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

20154307 《网络对抗》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的具体过程我就不描述了,我安装的版本是7.1

1.xss注入攻击

(1).Phishing with XSS

在文本框里写一个钓鱼网站,大致代码如下:

之后在框中输入的账号密码就会被盗取

成功了。。。

(2).Stored XSS Attacks

在邮件中用alert随便输入一些什么。。。

大致效果如下。。

这个比较较简单呐

(3).Reflected XSS Attacks

反射型XSS,又称非持久型XSS,这种攻击方式的注入代码是从目标服务器通过错误信息、搜索结果等等方式“反射”回来的。同时这种攻击方式具有一次性。攻击者通过电子邮件等方式将包含注入脚本的恶意链接发送给受害者,当受害者点击该链接时,注入脚本被传输到目标服务器上,然后服务器将注入脚本“反射”到受害者的浏览器上,从而在该浏览器上执行了这段脚本。

比如攻击者将如下链接发送给受害者: http://www.targetserver.com/search.asp?input=<script>alert("FB is best");</script>

效果如下:

当受害者点击这个链接的时候,注入的脚本被当作搜索的关键词发送到目标服务器的search.asp页面中,则在搜索结果的返回页面中,这段脚本将被当作搜索的关键词而嵌入。这样,当用户得到搜索结果页面后,这段脚本也得到了执行。

2.CSRF攻击

(1).Cross Site Request Forgery (CSRF)

这个实践是利用cookie冒名登录,用代码伪造请求

在message里面输入<img src="http://localhost:8080/WebGoat/attack?Screen=288&menu=900&transferFunds=4000"/>就会发出一个转钱的请求,盗取钱财。(288和900都是题目提供的数据)

交易记录

(2).CSRF Prompt By-Pass

在message框中输入代码<iframe src="attack?Screen=298&menu=900&transferFunds=10000" id="myFrame" frameborder="1" marginwidth="0" marginheight="0" width="800" scrolling=yes height="300" onload="document.getElementById('frame2').src='attack?Screen=282&menu=900&transferFunds=CONFIRM';">

点击confirm后,把后面的内容改为transferfunds=CONFIRM,然后就ok了。

3.sql注入

(1).Command Injection

按F12,编辑网页的源代码,在accesscontrolmatrix.help后面加上"& netstat -an & ipconfig",点击view后显示如下界面。。

(2).Numeric SQL Injection

还是摁F12,在选择框内,把代码改成如下。。因为1=1是永真式,所以永远成立。。。

点击go即可看到所有地方的天气。。

(3).Log Spoofing

在文本框中输入4307%0d%0aLogin Succeeded for username: admin

攻击成功

(4).String SQL Injection

sql注入,在文本框中输入' or 1=1 --,点击go,攻击成功

(5).Database Backdoors

stage1:输入102得到102的信息

进行sql注入102; update employee set salary=1500000,点击submit。

stage2:创建一个后门,出入以下代码:
102;CREATE TRIGGER fbBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20154307@163.com' WHERE userid = NEW.userid

(6).Blind Numeric SQL Injection

我们的目标是查找出pins表中cc_number为1111222233334444的员工的pin值,提示pin值为整数。

于是我们输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > N );(N为任意整数)进行判断,此处可以采用二分法,慢慢找到该整数为2364

(7).Blind String SQL Injection

我们的目标是猜测cc_number为4321432143214321的name,name为varchar。

首先我输入101;select * from pins where cc_number=4321432143214321 and length(name)=N (N可以是任意数),此处还是用了二分法,最后得出名字字符串的长度是4。

然后101;select * from pins where cc_number=4321432143214321 and substring(name,x,1)='$'(此处x代表第几个字母,$可以是任意大小写字母)可以确定每个位置上的字母,然而要一个一个测试过去岂不是太麻烦,所以此处我们还是采用二分法。。

输入101;select * from pins where cc_number=4321432143214321 and (substring(name,1,1)>='A' and substring(name,1,1)<='Z' ),进一步确定每一位上的字母的范围,从而确定他们。。。

最后查找结果为Jill。。

三、实验心得体会

本次实验难度不是很大,每一个实验网上都有对应的教程,即使不理解英文也能在网上找到教学,本次实验能学习的知识也很多,结合了一些现实场景,为我们今后的实战也打下了一定的基础。本次实验还是挺有意思的,最后一次实验了,居然还有点恋恋不舍。。。。

posted @ 2018-05-24 20:17  20154307  阅读(208)  评论(0编辑  收藏  举报