一、实验名称
Web安全基础
二、实验目的
理解常用网络攻击技术的基本原理
三、实验内容
1.SQL注入攻击
(1)Numeric SQL Injection(数字型SQL注入)
(2)String SQL Injection(字符串型SQL注入)
(3)Log Spoofing(日志欺骗)
(4)Database Backdoors(数据库后门)
2.XSS攻击
(1)Stored XSS Attacks(存储型XSS攻击)
(2)Reflected XSS Attacks(反射型XSS攻击)
3.CSRF攻击
(1)Cross Site Request Forgery(CSRF)
(2)CSRF Prompt By-Pass
四、基础知识和实验准备
1.基础知识
(1)SQL注入攻击
通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串中,达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
(2)XSS攻击
跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被骇客用来编写危害性更大的phishing攻击而变得广为人知。
(3)CSRF攻击
跨站请求伪造(Cross-site request forgery),是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF利用的是网站对用户网页浏览器的信任。
2.实验准备
下载webgoat-container-7.0.1-war-exec.jar,并输入“java -jar webgoat-container-7.0.1-war-exec.jar”在root用户下启动WebGoat。
由下图“Starting ProtocolHandler[“http-bio-8080”]”可知WebGoat启动成功,并占用8080端口。
在浏览器中访问“localhost:8080/WebGoat”,在表单中填入用户名和密码(实验中选择用Admin账户)。
可在左侧课程列表中选择课程。
五、实验过程记录
5.1 SQL注入攻击
5.1.1 Numeric SQL Injection(数字型SQL注入)
课程目的:通过注入一条SQL语句显示全部天气信息(原来只能显示一个地方的天气)。
实现方法:右键选择“inspect Element”,在<select name=“station”>下的<option value=“101”>后加“or 1=1”,使之变成<option value=“101 or 1=1”>,于是后台数据库执行语句SELECT * FROM weather_data WHERE station = 101 or 1=1,由于1=1恒真,所以会将表weather_data中的所有数据列出来。(在选择框中右键会直达该控件对应的网页源码)
5.1.2 String SQL Injection(字符串型SQL注入)
课程目的:尝试注入一个SQL字符串显示所有信用卡号码。用户名使用Smith。
实现方法:在用户名处输入“Smith\' or 1=1--”,使SQL语句变为“SELECT * FROM user_data WHERE last_name = \'Smith\' or 1=1--\'”,Smith后的单引号用于提前闭合用户名字符串,虽然这会导致最后一个单引号非法,但是没关系,因为最后的单引号会被“--”注释掉,而“1=1”恒真,所以注入该字符串后会显示所有信用卡号码。
5.1.3 Log Spoofing(日志欺骗)
课程目的:网页中的灰色区域表示将要在web服务器的日志文件中记录的内容。我们的目标是使用户名为admin的用户可以成功登录,可以通过在日志文件中添加脚本来提高攻击效率。
实现方法:在User Name输入“wpw20171121%0aLogin Succeeded for username: admin”,“%0a”表示换行。通过注入语句(添加假的日志文件)实现日志欺骗,从而可以越过密码,使用其他用户登录。点击登录后,会在第二行显示用户admin登陆成功。
5.1.4 Database Backdoors(数据库后门)
·阶段1
课程目的:使用字符串型SQL注入来执行多个SQL语句。这个页面允许您查看您的密码、SSN和薪水,尝试通过注入一条SQL语句达到加薪的目的。
实现方法:在User ID表单中填入“101; update employee set salary=171121”,后台数据库会根据该语句更改用户101的salary。
·阶段2
课程目的:使用字符串型SQL注入攻击给数据库注入后门,尝试使用相同的技术注入一个触发器,将其作为SQL后门(注意,由于当前底层DB不支持触发器,所以实际上不会执行任何操作。)。
实现方法:在User ID表单中填入“101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=\'john@hackme.com\' WHERE userid = NEW.userid”,向数据库注入触发器。
5.2 XSS攻击
5.2.1 Stored XSS Attacks(存储型XSS攻击)
课程目的:当用户检索到恶意消息时,加载用户所不希望出现的页面。常见于贴吧、论坛等会永久存储用户输入的平台。
实现方法:在Message表单中输入“<script>alert("This page is not safe,it has been attacked by wpw20171121!");</script>”。由于输入内容是JavaScript语言,所以浏览器在解析该语句时,会将其作为指令,而不是数据,从而实现存储型的跨站脚本攻击。
5.2.2 Reflected XSS Attacks(反射型XSS攻击)
课程目的:攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站,通过电子邮件发送给受害者,或者通过其他方式让受害者点击它,从而加载受害者所不希望出现的页面。
实现方法:在access code表单中输入“<script>alert("This page is not safe,it has been attacked by wpw20171121!");</script>”,点击“Purchase”,后台服务器解析完后,将页面反弹回用户,浏览器会根据返回的内容加载出用户预期之外的页面。
5.3 CSRF攻击
5.3.1 Cross Site Request Forgery(CSRF)
课程目的:向newsgroup发送一封email。这个email包含一个image,其URL指向一个恶意请求。URL应该指向“攻击”小型应用程序,其中包含“Screen”和“menu”参数,以及一个额外的参数“transferFunds”,值为5000。可在右侧“Parameters”中找到“Screen”和“menu”的值来构造链接。经过身份验证的CSRF电子邮件将转移收件人的资金。
实现方法:在message表单中输入<img src="http://localhost:8080/WebGoat/attack?scr=283&menu=900&transferFunds=5000"/>,以图片的的形式将URL放进Message中,此URL对用户是不可见的,当用户点击Submit后,表单中的URL会指向恶意请求,转移用户的资金。
5.3.2 CSRF Prompt By-Pass
课程目的:与CSRF课程类似,本课程的目标是向newsgroup发送电子邮件:第一个请求是转账,第二个请求用来确认第一个请求。URL应该指向“攻击”小型应用程序,其中包含“Screen”和“menu”参数,以及一个额外的参数“transferFunds”,其数字值为5000、字符串值为“CONFIRM”。当有人收到这封电子邮件,碰巧在那个时候已完成身份认证,那么他的资金将被转移。
实现方法:在Message中输入“<img src="http://localhost:8080/WebGoat/attack?Screen=318&menu=900&transferFunds=5000"/>
<img src="http://localhost:8080/WebGoat/attack?scr=318&menu=900&transferFunds=CONFIRM"/>”以图片的的形式将URL放进Message中,此URL对用户是不可见的,当用户点击Submit后,表单中的URL会指向恶意请求,请求转移用户的资金并在用户不知情的情况下确认资金转移。
六、基础问题回答
1.SQL注入攻击原理,如何防御?
答:攻击原理:通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串中,达到欺骗服务器执行恶意的SQL命令。
防御措施:在SQL语句执行前,检查用户输入的合法性,过滤可能会使SQL语句恶意执行的特殊字符。
2.XSS攻击的原理,如何防御?
答:攻击原理:恶意Web用户将代码植入到提供给其它用户使用的页面中。由于输入内容是JavaScript语言,所以浏览器在解析该语句时,会将其作为指令,而不是数据,从而实现XSS。
防御措施:检查用户输入的内容中的合法性,检查其中是否含有脚本内容。
3.CSRF攻击原理,如何防御?
答:攻击原理:跨站请求伪造是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。CSRF利用的是网站对用户网页浏览器的信任,攻击者通过该浏览器向服务器发送请求,由于用户先前已经进行过身份验证,所以服务器无法分辨该请求是第三方请求还是用户的合法请求。
防御措施:由于CSRF攻击者不能获取Cookie的具体信息,只是使用,所以严格限制Cookie的使用范围,同时阻止不受信任的域名对我们发起的请求,可以防御CSRF攻击。
七、实验总结与体会
通过本次Web安全基础实验,我理解了常用网络攻击技术如SQL注入、XSS、CSRF攻击的基本原理,对上述攻击的防御方法也有了初步的了解,同时也让我更加重视Web安全。
本次实验是最后一次网络对抗实验,一学期的实验虽然做的很狼狈,但是让我受益匪浅、收获满满,也满足了一直以来想学网络对抗的心愿。最后,衷心感谢刘宇栋老师一学期的悉心指导。