1、xsscrapy的思路
学习并梳理xsscrapy的运作机制:
- xss_sipder中start_request()对start_url即初始填写的url发起请求
- 中间件middlewares中process_request()对url、form、header去重处理并发出请求
-
结果返回到xss_spider中parse_start_url()、parse_url()进行判断:
-- 如果是url:进入回循环前面流程继续发起请求
-- 如果是非urlitem数据:进入pipline中process_item()判断是否注入
image.png
2、xsscrapy二次开发
通过xsscrapy代码的分析以及对sqlmapapi集成的经验,发现应用到综合服务平台的测试,需要做一些调整、功能增加的二次开发。
注入功能相关思考:
- 请求的参数、cookie、referer的配置,例如,源码仅支持一对建值,而目前大多都是两对建值对
- 请求的处理,根据caseid记录实际发起xss注入检查的请求,即payloads级别的请求的记录,方便后续问题复现
- 注入数据的记录,对存在注入时,根据对应caseid生成注入结果文件,并记录注入数据
- ps: 因为根据caseid进行记录数据,而每个case会多次被执行,所以在每次执行注入请求前根据caseid去清空存量数据的记录
框架思考:
一方面,xsscrapy以类似sqlmapapi的方式以单独服务运行,减少bugmirror的功能堆积;一方面,xsscrapy原作者使用的是python2,不能直接集成到Bugmirror。
所以将xsscrapy利用flask搭建成一个服务XssInjectionServer。
- 执行xss注入检查任务接口:xsscrapy使用的scrapy框架,执行任务时占用主进程,在使用flask直接执行xsscrapy时会报冲突,故采用os命令的方式调用xsscrapy
- 获取注入结果数据接口
- 获取发起xss注入检查payloads级请求数据的接口
- 。。。
2.1、cookie格式改写
源码仅支持一对建值,而目前大多都是两对建值对,因此改为直接传递cookie字典。
-
xss_spider.py
image.png
image.png
2.2、payloads请求记录
请求执行前,根据caseid清空payloads文件数据,并在本次请求过程中记录对应的payloads数据
-
xss_spider.py
image.png
*middlewares.py
image.png
2.3、漏洞数据的记录
请求执行前,根据caseid清空漏洞记录文件数据,并在本次请求过程中记录对应的漏洞数据
*xss_spider.py

*piplines.py

2.4、flask搭建服务
-
xsscrapy.py修改成期望传递参数的格式
image.png
-
runserver.py搭建成服务,运行:python runserver.py
image.png
2.4、接口实现
-
运行case,发起xss注入请求
image.png
-
获取漏洞数据
image.png
-
获取payloads数据
image.png
网友评论