XSS语义分析的阶段性总结(二)
本文首发于“合天智汇”微信公众号,作者:Kale
前言
上次分享了javascript
语义分析,并且简单介绍了新型xss扫描器的一些想法,如何在不进行大量fuzz的情况下又能准确的检测出xss漏洞,这其中我们又可以尽量的避免触发waf的xss防护功能!
关联文章:XSS语义分析的阶段性总结(一)
首先先接着上文介绍一下html语义分析的方法。
扫描思路
HTML语义分析
如果把html语义分析看为对html结构的解析与识别,在python中我们可以使用HTMLParser
,对,又是python帮我解决了难题。在XSStrike里面同样使用了自定义的HTMLParser
进行漏洞的辅助识别。
我们可以通过继承HTMLParser
并重载其方法来实现我们需要的功能
下面是简单的 HTML 解析器的一个基本示例,使用 HTMLParser
类,当遇到开始标记、结束标记以及数据的时候将内容打印出来
from html.parser import HTMLParser class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print("Encountered a start tag:", tag) def handle_endtag(self, tag):
print("Encountered an end tag :", tag) def handle_data(self, data):
print("Encountered some data :", data) parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head>'
'<body><h1>Parse me!</h1></body></html>')
我们需要定义一个我们自己的HTML
解析器来处理我们的标签,标识出来script标签,html注释,html标签,属性,css等等
部分代码如下
寻找反射点的思路和js的类似,通过遍历标签来来解析html结构,tagname
代表标签名,attibutes
代表属性,content
代表数据内容,#comment
代表注释,每个标签被封装为字典形式的列表元素
使用以下的demo
 <html>
<body>
<a href="?q=1&w=2&e=3&r=4&t=5">test</a>
<style>
body{
background:#aaaflag{};
}
</style>
<script>
var a = 'xx';flag{}</script>
<div>
<textarea>flag{}</TexTarea>kkk
</div>ffff<aaaaa>bb
<input style="color:flag{111222}" value2="flag{111222}" aflag{}="aaa"/>
<!--
this is comment
5flag{}
-->
</body>
</html>
处理后的效果
处理完html标签,接下该寻找sink输出点在html的上下文。思路跟js的寻找思路是相同的
通过遍历列表内容来找到我们的input
,部分代码如下:
最后会给出输出点上下文的一些细节信息,如是否是html标签等等
然后根据不同的上下文给出我们的payload,使用html语法树有很多好处,比如可以准确判断回显的位置
探究发包
X3Scan的扫描思路参考了一些xray的扫描思路,比如不发送一些产生危害的payload,只根据回显的上下文发送一些flag测试一些关键字符是否被转义和过滤,如<>,".',()等,如果没有过滤最后给出建议payload,如:confirm()
首先对于无法使用html和js解析的回显,如jsonp和json格式的相应包,我们使用如下的发包顺序:
随机flag ---》判断回显 ----》解析找不到回显 ---》发送<随机flag> ---》判断响应包中字符是否转义---》给出payload
最后给出<img src=1>
的payload,对与jsonp_xss这里有一个tip,正常情况下判断jsonp_xss,会首先判断content-type
是包含text/html
,然后继续测试,实际测试中当content-type
为空时,也可能存在xss漏洞,因此应该对两种情况都进行一下判断。
if 'html' in (resp_headers.get("content-type","").lower()) or resp_headers.get("content-type")==None:
对于html标签内的内容
<h2>xxxxx</h2>
扫描器会依次发送0xb9d8c
,</H2><mowvhry>
当确认标签可以闭合,会给出</h2><img src=1>
对于标签属性
demo:https://brutelogic.com.br/xss.php?b3=
扫描器会依次发送0xb78123
,'psafq='
,'><arcbvyf>
,"psafq="
,"><arcbvyf>
,当确认引号和尖括号没有被过滤时,最终给出"><img src=1>
,"OnMoUsEoVeR=confirm()//
。
对于html注释
`<!-- this is comment <?php echo $t;?> -->
`
扫描器会依次发送0xfda748
,--><aorxlwd>
,--!><aorxlwd>
,当确定-->
或--!>
没有过滤时,给出payload,--><aorxlwd>
对于script标签的回显
扫描器会依次发送0x829a5c
,-829a5c-
,</sCRiPt><sCRiPt>dncjbwv</sCRiPt>
,当最后确认</sCrIpT>
未被过滤时,最终给出payload,</sCRiPt><sCRiPt>confirm()</sCRiPt>
另外一种情况就是回显到script标签的注释里面
使用以下demo
<html> <body> <script> var a = 1; // inline <?php echo $_GET["a"];?> /* <?php echo $_GET["b"];?> */ </script> </body> </html
扫描器会依次发出0x829a5c
,-829a5c-
,</sCRiPt><sCRiPt>dncjbwv</sCRiPt>
,\n;rmhwe;//
,最后给出payload,</sCRiPt><sCRiPt>confirm()</sCRiPt>
,/n;prompt(1);//
。
对于块注释,扫描器会依次发出,0xc13f
,*/0xc13f;/*
,最后给出payload,*/prompt(1);/*
通过上面的分析,我们可以发现使用html语法树有很多好处,比如通过发送一个随机payload,例如:<wrqweew>
,然后通过html语法树检测是否有wrqweew
这个标签,便可以确定payload是否执行成功了。
对于回显在js的情况,发送测试payload后,通过js语法树解析确定Identifier
和Literal
这两个类型中是否包含,如果payload是Identifier
类型,就可以直接判断存在xss,最后给出payload,confirm();//
。如果payload是Literal
类型,再通过单双引号来测试是否可以闭合。
另外,还有一些比较精致的技巧,比如对payload的随机大小写,由于html对大小写是不敏感的,但是一些waf由于设计缺陷能会被绕过。
大致流程
扫描器大致流程:
发送随机字符--》确认参数回显---》通过html/js解析确认回显位置--》根据回显的上下文发送不同的payload进行测试--》使用html,js语法树解析是否多出来标签,属性,js语句等来确定是否执行成功
成果展示
由于一直处于开发阶段,并没进行大规模测试,但是偶尔也会有个小惊喜,某次调bug的时候发现京东某站的xss
XSS语义分析的阶段性总结(二)的更多相关文章
- XSS语义分析的阶段性总结(一)
本文作者:Kale 前言 由于X3Scan的研发已经有些进展了,所以对这一阶段的工作做一下总结!对于X3Scan的定位,我更加倾向于主动+被动的结合.主动的方面主要体现在可以主动抓取页面链接并发起请求 ...
- XSS跨站攻击(二)
本人最近在学习XSS,想总结一下常见的XSS攻击的几种情况,刚好看到<防御 XSS 的七条原则>这篇文章,里面讲的七条防御原则不正是针对XSS的几种利用方式吗?于是,借来学习一下. 原则1 ...
- WEB安全测试之XSS攻击
目录结构 1.背景知识 2.XSS漏洞的分类 3.XSS防御 4.如何测试XSS漏洞 5.HTML Encode 6.浏览器中的XSS过滤器 7.ASP.NET中的XSS安全机制 一.背景知识 1.什 ...
- NLP+语义分析(四)︱中文语义分析研究现状(CIPS2016、角色标注、篇章分析)
摘录自:CIPS2016 中文信息处理报告<第二章 语义分析研究进展. 现状及趋势>P14 CIPS2016> 中文信息处理报告下载链接:http://cips-upload.bj. ...
- 快速找出网站中可能存在的XSS漏洞实践
笔者写了一些XSS漏洞的挖掘过程记录下来,方便自己也方便他人. 一.背景 在本篇文章当中会一permeate生态测试系统为例,笔者此前写过一篇文章当中笔者已经讲解如何安装permeate渗透测试系统, ...
- web安全之XSS攻击原理及防范
阅读目录 一:什么是XSS攻击? 二:反射型XSS 三:存储型XSS 四:DOM-based型XSS 五:SQL注入 六:XSS如何防范? 1. cookie安全策略 2. X-XSS-Protect ...
- vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结
vue—你必须知道的 目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...
- 哈工大 信息安全实验 XSS跨站脚本攻击原理与实践
XX大学XX学院 <网络攻击与防御> 实验报告 实验报告撰写要求 实验操作是教学过程中理论联系实际的重要环节,而实验报告的撰写又是知识系统化的吸收和升华过程,因此,实验报告应该体现完整性. ...
- CNN for NLP (CS224D)
斯坦福课程CS224d: Deep Learning for Natural Language Processing lecture13:Convolutional neural networks - ...
随机推荐
- iOS 协议分发
Github:AOMultiproxier.HJProtocolDispatcher 协议实现分发器,能够轻易实现将协议事件分发给多个实现者. 一.AOMultiproxier.h #define A ...
- .Net微服务实践(一):微服务框架选型
微服务框架 微服务(Microservices)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务之间是松耦合的.每个微服务仅关注于完成一件任务并很 ...
- E 比赛评分
时间限制 : - MS 空间限制 : - KB 评测说明 : 1s,128m 问题描述 Lj最近参加一个选秀比赛,有N个评委参加了这次评分,N是奇数.评委编号为1到N.每位评委给Lj的分数是 ...
- session分布式处理
session分布式处理 标签(空格分隔): 分布式 1. Session复制 在支持Session复制的Web服务器上, 通过修改服务器配置, 可以实现将Session同步到其它Web服务器上, 达 ...
- Light of future-冲刺Day 6
目录 1.SCRUM部分: 每个成员进度 SCRUM 会议的照片 签入记录 代码运行截图 用户浏览界面 订单详情界面 管理员浏览界面 新增后台界面 2.PM 报告: 时间表 燃尽图 任务总量变化曲线 ...
- C9K Stackwise Virtual(一)
一.SV技术基本说明 思科Catalyst9K平台的Stackwise Virtual技术是将两个物理的交换机虚拟成一个逻辑的实体(从网络控制层面和管理的角度来看),这两个交换机合二为一之后,将共享相 ...
- 【php】错误日志处理
一. 错误处理: a) 在写程序的过程当中,遇到错误时,你的反应?可能比较急躁,比较烦 b) 遇到错误后:一别哭,二别闹,三别上吊,四别尿……二. 你可能会遇到的错误: a) 语法错误 i. 语法错误 ...
- spring04
今天设计到的内容是是spring的sqel和ioc的生命周期和bean的后置处理器 具体的测试文件如下: <?xml version="1.0" encoding=" ...
- vector数组的相关知识
Vector 类实现了一个动态数组.和 ArrayList 很相似,但是两者是不同的: Vector 是同步访问的. Vector 包含了许多传统的方法,这些方法不属于集合框架. Vector 主要用 ...
- pyecharts的使用及总结
包的下载及配置 这个包的相应的配置较多,版本也不兼容,总结一下 预览:pyecharts画图 pip pyecharts pip 各级别地图(6.7个左右) pip jupyter环境 [为了生成pn ...