xsscrapy及二次开发

1、xsscrapy的思路

学习并梳理xsscrapy的运作机制:

  1. xss_sipder中start_request()对start_url即初始填写的url发起请求
  2. 中间件middlewares中process_request()对url、form、header去重处理并发出请求
  3. 结果返回到xss_spider中parse_start_url()、parse_url()进行判断:
    如果是url:进入回循环前面流程继续发起请求
    如果是非urlitem数据:进入pipline中process_item()判断是否注入
    xsscrapy及二次开发_第1张图片

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

xsscrapy及二次开发_第2张图片

xsscrapy及二次开发_第3张图片

 

 

 

2.2、payloads请求记录

  • 请求执行前,根据caseid清空payloads文件数据,并在本次请求过程中记录对应的payloads数据

* xss_spider.py

xsscrapy及二次开发_第4张图片

 

*middlewares.py

xsscrapy及二次开发_第5张图片

 

2.3、漏洞数据的记录

  • 请求执行前,根据caseid清空漏洞记录文件数据,并在本次请求过程中记录对应的漏洞数据

*xss_spider.py

xsscrapy及二次开发_第6张图片

 

*piplines.py

xsscrapy及二次开发_第7张图片

 

2.3、flask搭建服务

  • xsscrapy.py修改成期望传递参数的格式

 

  • runserver.py搭建成服务,运行:python runserver.pyxsscrapy及二次开发_第8张图片

 

2.4、接口实现

  • 运行case,发起xss注入请求xsscrapy及二次开发_第9张图片

 

  • 获取漏洞数据xsscrapy及二次开发_第10张图片

 

  • 获取payloads数据

 

xsscrapy及二次开发_第11张图片

你可能感兴趣的:(渗透测试)