主页 > 网络知识 > XSS扫描器成长记(4)

XSS扫描器成长记(4)

awvs会比较参数名称来确定。在后面的自动化扫描中,发现这种方式的误报还是很高,最后我将这种情况调整到了awvs的方式,只检测指定的属性key。

从这两处细微的差异可以看到,awvs宁愿漏报也不误报,结果会很准确,xray更多针对白帽子,结果会宽泛一些。

5.对于在html注释内的内容,以下case

<!-- this is comment <?php echo $t;?> -->

xray顺序发送了以下payload:spzzmsntfzikatuchsvu,--><husyfmzvuq>,--!><oamtgwmoiz>,和上面类似,当确定-->--!>没有过滤时,会发送

以 --> 或 --!> 开头,添加如下内容 <bvwpmjtngz> sCrIpTbvwpmjtngzsCrIpT ImGsRcOnErRoRbvwpmjtngz> sVgOnLoAdbvwpmjtngz> iFrAmEsRcJaVaScRiPtbvwpmjtngz> aHrEfJaVaScRiPtbvwpmjtngzcLiCkA InPuTaUtOfOcUsOnFoCuSbvwpmjtngz> Avvs

Awvs的扫描规则很多,针对的情况也很多,没有仔细看它的工作方式是怎样的,主要是看它的payload以及检测的情况,和上面两种查漏补缺,最终合成了我的xss扫描器~比如它会对meta标签的content内容进行处理,会对你srcipt,src等tag的属性处理,也有一些对AngularJs等一些流行的框架的XSS探测payload。

我的扫描器

我的XSS扫描器就是综合上面的几种扫描器而来,如果仔细观察,将会发现上面的扫描器的一些不同寻常的细节。

比如xray不会发送xss的payload,都是用一些随机字符来代替,同时也会随机大小写对一些标签名称,属性名称等等。

这些精致的技巧我的扫描器也都一一吸取了,嘿嘿!

扫描流程

我的扫描器扫描流程是这样的

发送随机flag -> 确定参数回显 -> 确定回显位置以及情况(html,js语法解析) -> 根据情况根据不同payload探测 -> 使用html,js语法解析确定是否多出来了标签,属性,js语句等等

使用html语法树检测有很多优势,可以准确判定回显所处的位置,然后通过发送一个随机payload,例如<Asfaa>,再使用语法检测是否有Asfaa这个标签,就能确定payload是否执行成功了。

html语法树用python自带的库

from html.parser import HTMLParser

js检测也是如此,如果回显内容在JavaScript脚本中,发送随机flag后,通过js语法解析只需要确定IdentifierLiteral这两个类型中是否包含,如果flag是Identifier类型,就能直接判断存在xss,payload是alert(1)//,如果flag是Literal类型,再通过单双引号来闭合进行检测。

Debug之旅

整个xss扫描代码不过1000行,但debug的过程是道阻且长。

本地靶机测试后就对在线的靶机进行了测试 https://brutelogic.com.br/knoxss.html

查漏补缺后就就开始了自动化扫描。

整个自动化架构如下

1. 提供url -> 爬虫爬取 -> 参数入库 -> 消息队列 -> xss扫描器 -> 子域名入库 -> url入库

1.爬虫使用的crawlergo,效果挺不错的,但还是不太满足我的需求(造轮子的心态又膨胀了)

2.数据库使用的mongodb

3.用celery分散调用,由于用到了celery,又用到了rabbitmq消息编码,鲜花监控

4.用了服务器酱进行微信推送(得到一个扩展微信就会响一次)

刚开始打把游戏微信就会不停的响,然后就查找误报,优化逻辑,随之而来

经过了不懈的改造,优化了检测逻辑,加入了去重处理后,现在既扫描的慢且推动的消息也变少了。

一些成果

经过缩短对src的扫描后,成功还是挺多的(很多都归功于爬虫)

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!