W13Scan 漏洞扫描器之XSS插件模块编写示例

news2024/11/24 15:32:43

一、背景

上周将W13Scan目录结构整理了一番,觉得要深入研究还得从代码层,于是尝试编写一下插件;框架本身已经集成了XSS扫描插件;

本篇文章的XSS插件的编写单纯是为了学习这个框架,所以只支持GET型,了解插件的编写方法和原理即可。

W13scan 是基于Python3的一款开源的Web漏洞发现工具,它支持主动扫描模式和被动扫描模式,能运行在Windows、Linux、Mac上。

二、框架结构

在编写插件之前,我们需要对框架本身的目录结构有一定了解,由于W13Scan本身的文档不是太详细,我自己整理了一下,目录结构图下所示

├── api 通过API调用启动扫描
├── certs HTTPS证书存放目录
├── datahtml输出模板存放目录
├── fingprints指纹数据
│ ├── framework 框架
│ ├── os操作系统
│ ├── programing│ └── webserver web服务
├── lib 框架核心目录
│ ├── api
│ ├── controller
│ ├── core
│ ├── helper
│ ├── parse
│ ├── proxy
│ └── reverse
├── output扫描结果输出目录
├── scanners扫描器插件
│ ├── PerFile 针对每个文件,包括参数啥的
│ ├── PerFolder 针对url的目录,会分隔目录分别访问
│ ├── PerServer 对每个domain的
├── thirdpart
│ ├── requests
└── w13scan.py启动入口 

在上方目录结构中,我们看到插件都放在scanners目录中,入口文件则为w13scan.py文件,因此这两个位置就是我们需要重点所关注的;现在我们需要去分析框架的运行流程。

三、运行流程

使用pycharm编辑器打开文件 w13scan.py,可以看到入口文件中的如下代码

def main():# 检查版本信息version_check()# 获取绝对路径root = modulePath()# 解析命令行参数cmdline = cmd_line_parser()# 初始化执行init(root, cmdline) 

在上方代码中可以看到运行了初始化init(root,cmdline)方法,按住ctrl然后用鼠标点击跳转到方法详情,编辑器自动打开了文件 lib/core/option.py,可以看到初始化的具体流程

def init(root, cmdline):cinit(autoreset=True)setPaths(root)# 指纹信息banner()# 从config.py读取配置信息_init_conf()# 从cmdline读取配置_merge_options(cmdline)# 设置端口信息_set_conf()initKb()# 加载插件initPlugins()# 输出配置信息_init_stdout()patch_all() 

在上方代码中可以看到,里面有一个initPlugins()方法,同样按住ctrl然后点击方法名字,编辑器会自动打开文件 lib/core/option.py,可以看到插件初始化的整个过程

def initPlugins():# 加载检测插件for root, dirs, files in os.walk(path.scanners):# 获取插件下的文件列表files = filter(lambda x: not x.startswith("__") and x.endswith(".py"), files)# 对每一个文件进行处理for _ in files:# 获取文件名q = os.path.splitext(_)[0]# 判断插件白名单if conf.able and q not in conf.able and q != 'loader':continue# 判断插件黑名单if conf.disable and q in conf.disable:continue# 文件绝对路径filename = os.path.join(root, _)# 加载该文件mod = load_file_to_module(filename) 

在上方代码中可以看到初始化插件,其实就是扫描了插件目录的文件列表,然后挨个加载文件。

四、分析调试

为了证实这个猜想,我在遍历的位置进行了代码调试,加了print()方法,来验证我的猜想,代码如下所示

 # 获取文件名q = os.path.splitext(_)[0]print(q)print("\n")# 判断插件白名单if conf.able and q not in conf.able and q != 'loader':continue 

找了一个靶场系统,然后使用w13scan的扫描命令运行,执行命令如下所示

pythonw13scan.py-u "http://192.168.152.135:8888/home/index.php?m=tiezi&a=index&bk=6" 

命令执行,在控制台看到如下信息

(w13scan) D:\mycode\tools\w13scan\W13SCAN>pythonw13scan.py-u "http://192.168.152.135:8888/home/index.php?m=tiezi&a=index&bk=6"
 ________________
< w13scan v2.1.0 >
 ----------------
 \\,__, ||(oo)\||___(__)\|| )\_ ||_w |\ |||| * Cower....
loader
analyze_parameter
backup_file
....插件列表,省略....
net_xss
swf_files
[11:23:49] [INFO] Load scanner plugins:29 

在上方的信息中,看到scanners目录下的文件列表,所以验证了我的猜想;

接下来我就可以正式编写插件了,为了防止编写过程中对插件目录造成损坏,我将scanners目录复制了一份,如下图所示

接着我回到scanners目录,在目录里面有29个插件,调试的时候不是太方便,我先将其他插件都删除,为了参考插件怎么编写的,我留下一个,如下图所示

在上图中,我只留下了一个backup_file.py插件,用于编写自己的插件参考;同时我将这个插件改成自己插件的名字,如下图所示

在上图中,我将插件文件名子改为了xss_test.py,再次运行,看看是否能正确运行,运行结果如下图所示

在上图中可以看到依然是可以运行的,同时插件名字也发生了变化,变成了xss_test文件

五、编写插件

现在我们就开始编辑xss_test.py插件,使用pycharm打开后,看到的代码如下图所示

在上图中可以看到插件代码里面有两个方法audit_check,我做了下分析,audit才是对外的方法,_check方法是插件内部的方法,我们不需要,直接删除即可;

接着我们新建一个audit方法,同时备份之前的audit方法为audit_bak作为参考,如下图所示

在上图中,我新建了一个audit方法,并接收了请求头信息和要请求的URL地址,并给出了要实现XSS漏洞检测的三个步骤:

1.准备poc
2.发送请求
3.判断返回数据里面是否包含了poc

接着我就开始实现这三个步骤,首先去准备poc代码,如下代码所示

 # 接收头信息headers = self.requests.headers# 我们不要URL地址中的参数部分url = self.requests.netloc# 从这里单独接收参数,字典类型params = self.requests.params# 这里备份一下字典,不要使用同一个内存地址paramsBak = params.copy()# 1. 准备pocpayloads = ["1'\"()&%<acx><ScRiPt >prompt(915149)</ScRiPt>","<svg/onload=alert(1)>","\"><script>alert(document.cookie)</script>"] 

接着我需要将poc代码和URL地址结合,生成一个带有攻击参数的链接地址,代码如下所示

 # 每一个payloads都测试一遍for payload in payloads:# 每一个参数都需要测试for key, val in params.items():# 每次只测试一个参数,所以需要将之前的字典覆盖params = paramsBak.copy()# 将字典里的值改变,然后放到另外一个函数生成一个URL地址params[key] = payloadnUrl = self.createUrl(url, params) 

生成如下URL地址:

http://192.168.152.135:8888/home/index.php?m=<svg/onload=alert(1)>&a=index&bk=6

或者如下:

http://192.168.152.135:8888/home/index.php?m=tiezi&a=<svg/onload=alert(1)>&bk=6

依次将poc代码替换到原有请求参数当中,接下来就是使用python去请求这个地址,并查看返回结果是否包含了poc代码,如果包含了poc代码说明后端没有做过滤处理,代码如下所示

 # 2. 发送请求r = requests.get(nUrl, headers=headers, allow_redirects=False)# 如果返回值是200,说明页面可以访问if r.status_code == 200:# 3.判断返回数据里面是否包含了poc,包含了说明存在XSSif payload in r.text:# 将结果返回给框架,统一存储result = self.new_result()result.init_info(nUrl, "XSS检测", VulType.BRUTE_FORCE)# 存储扫描结果result.add_detail("payload请求", r.reqinfo, "请求返回结果", "插件备注信息", nUrl, "", PLACE.GET)self.success(result) 

代码的含义在上面的备注信息中已经有说明,就不再过多赘述了,接下来我们再次运行W13Scan,运行命令如下所示

pythonw13scan.py-u "http://192.168.152.135:8888/home/index.php?m=tiezi&a=index&bk=6" 

命令运行之后,控制台输出的信息如下所示

在上图中可以看到我们的插件已经成功运行,并检测到了XSS漏洞

六、结果验证

接下来我复制其中一个带有poc的URL地址,放到浏览器去运行,如下图所示

在上图中可以看到浏览器触发了XSS代码,弹出了cookie值,至此编写XSS检测插件就完成了,当然这个插件还不够完善,有兴趣的可以自己再深入研究~

完整的poc代码可以参考:

https://gitee.com/songboy/codes/kodyj714izqbpgv8cu2n390 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168335.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文解析企业网盘 带你寻找数据协作的“满分答案”

数据量急剧增长&#xff0c;线上办公逐渐成为常态。许多企业都会选择部署企业网盘来满足日益增长的数据管理与数据协作的需求。网盘市场乱花渐欲迷人眼&#xff0c;企业又该如何从中甄别最适合自己的企业网盘&#xff1f; 网盘&#xff0c;企业的数字基建 飞速发展的科技让企业…

[GIT] GIT拆分仓库--不丢git提交历史记录

背景 如果你的代码仓库里有多个目录&#xff0c;你想把其中一个目录拆分出去变成一个独立的代码仓库。重要的一点是拆分的过程中要保留git提交历史记录。 拆分步骤 1. 检查一下你的 repo 的根目录中。 进入根目录后&#xff0c;快速运行 ls 终端命令以确保列出所有子目录。…

ruoyi-vue版本框架(二)源码目录结构的讲解,与底层子项目的讲解

目录1 目录介绍2 ruoyi-common 子项目3 ruoyi-system 子项目4 配置文件5 ruoyi-framework6 数据库表7 druid 监控1 目录介绍 下载下来源码&#xff0c;后端一共有6个模块 其中 rouyi-admin这个子项目是整个若依框架的web项目&#xff0c;也就是我们要启动的后台就是这个子项目…

Django 第五章RESTFramework(DRF)框架初探以及认识serializers序列化器的增删改查

定义 Django REST framework (简称 DRF) 是一个强大灵活的wb api工具 功能完善&#xff0c;可快速开发api平台 官网地址 https://www.django-rest-framework.org/安装要求 pip3 install django3.2 pip3 install djangorestframework1.0 使用drf实现用户的增删改查 1.创建ap…

influxdb问题: unable to create database ‘mydb‘ 与 failed to send metrics to influx

[influx-metrics-publisher] ERROR i.m.i.InfluxMeterRegistry - [createDatabaseIfNecessary,117] - unable to create database mydb&#xff1b; [influx-metrics-publisher] ERROR i.m.i.InfluxMeterRegistry - [publish,161] - failed to send metrics to influx现象解决方…

Spring REST风格

REST&#xff08;Representational State Transfer&#xff09;&#xff0c;表现形式状态转换,它是一种软件架构风格。 当我们想要表示一个网络资源时&#xff0c;传统方式通常是用一个请求url表示一个操作。这样既不方便&#xff0c;也不安全&#xff0c;因为操作对于用户是透…

精要速览 | PacBio三代全长扩增子测序的多方向研究应用进展

随着测序技术的不断发展&#xff0c;组学研究愈加深入。在微生态研究领域&#xff0c;受限于二代测序读长的扩增子测序技术&#xff0c;迎来了“解放式”全面发展优化的三代测序时代——PacBio全长扩增子测序的优势逐渐显现&#xff1a;凭借其超长读长&#xff0c;高准确率&…

独立产品灵感周刊 DecoHack #044 - 新的一年如何管理你的时间

本周刊记录有趣好玩的独立产品设计开发相关内容&#xff0c;每周发布&#xff0c;往期内容同样精彩&#xff0c;感兴趣的伙伴可以点击订阅我的周刊。为保证每期都能收到&#xff0c;建议邮件订阅。欢迎通过 Twitter 私信推荐或投稿。本周看到了很多时间管理的工具类型产品&…

力扣中SQL刷题

小知识点 取余数&#xff1a;mod(数,2) 取第一个字母&#xff1a;left(name,1) 或者name like ‘M%’ 196. 删除重复的电子邮箱 题型&#xff1a;删除列A中重复的记录&#xff0c;指保留列B最小的那一行记录 答案&#xff1a;delete t1 from 表名 t1,表名 t2 where t1.列At2…

测试——自动化测试(Selenium工具)

目录 一、自动化测试的概念以及分类 二、Selenium—web自动化测试工具 1、自动化测试的一些前置工作 2、第一个自动化实例 3、总结​编辑 三、 Selenium常用方法 定位元素的方法 元素的操作 等待 强制等待&#xff08;待补充&#xff09; 隐式等待&#xff08;待补充&…

【python】python绘制相关性热力图

1.介绍 热力图&#xff08;heatmap&#xff09;&#xff0c;又称相关系数图&#xff0c;根据热力图中不同方块颜色对应的相关系数的大小&#xff0c;可以判断出变量之间相关性的大小。热力图通过对色块着色来显示数据的统计图表。绘图时&#xff0c;需指定颜色映射的规则。例如…

从运营小程序到实现数字化生态闭环还差几步?

近年来&#xff0c;不少企业纷纷开始关注小程序的开发。对于用户来说&#xff0c;小程序最大的好处就是能够即点即用&#xff0c;体验便捷。不知你是否发现&#xff0c;小程序经济已经开始制约中小企业的服务与合作。 对于一般的中小企业乃至大企业里没有什么IT预算的部门&…

缺省参数!C++教你如何成为一名优秀的舔狗

&#x1f451;专栏内容&#xff1a;C学习笔记⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;日拱一卒&#xff0c;功不唐捐 目录一、前言二、缺省参数1、缺省参数的定义2、缺省参数的分类Ⅰ、全缺省参数Ⅱ、半缺省参数三、注意事项1、直给中间的参数传参…

Docker中的容器命令

1、新建启动容器 docker run 镜像名 参数&#xff1a; -it 启动前台一个交互的终端 --name 启动容器后&#xff0c;赋予容器一个名字 -d: 后台运行容器&#xff0c;并返回容器ID&#xff0c;也即启动守护式容器&#xff1b; -P: 随机端口映射&#xff1b; -p: 指定端口映…

Svelte框架实现表格协同文档

首先&#xff0c;从框架搭建上,本篇示例采用当下流行的前后端分离的开发方式&#xff0c;前端使用npm作为脚手架搭建Svelte框架。 后端使用Java的SpringBoot作为后端框架。 首先&#xff0c;介绍下在前端Svelte框架下搭建在线表格编辑器。 1、在pageage.json文件中引入相关资源…

ANR问题分析

ANR概念 anr是指应用程序无响应&#xff0c;Android系统对于一些事件需要在一定时间范围内完成&#xff0c;如果超过预定时间未能得到有效响应或者响应时间过长&#xff0c;都会造成anr。通常发生anr时&#xff0c;系统会弹出一个提示框&#xff0c;让用户知道&#xff0c;该程…

AppScan介绍和安装

第一节-AppScan介绍和安装 1.简介 Appscan 10中文版是是全新网络安全漏洞扫描软件&#xff0c;软件可以直接可以对OS命令、SSRF和XXE攻击等漏洞进行检测&#xff0c;使得漏洞检测更加容易&#xff0c;提高漏洞的扫描效率。软件同时支持动态、静态、互动分析三种不同的测试功能…

OVN实验----NAT

概述 在L2互通、L3互通实验基础上通过NAT实现访问公网。 架构图如下&#xff0c; 这里两台逻辑路由器LR1和GLR是通过一台逻辑交换机LSjoin互连的&#xff0c; GLR和物理网络设备通过LSlocal相连。 物理拓扑 如上一个实验OVN实验----L2互通 逻辑拓扑 配置 开始实验前先检查…

设计模式之装饰者模式

装饰者模式 定义 先上定义&#xff1a;指在不改变现有对象结构的情况下&#xff0c;动态地给该对象增加一些职责&#xff08;即增加其额外功能&#xff09;的模式。 优缺点 优点&#xff1a; 1&#xff0c;装饰器是继承的有力补充&#xff0c;比继承灵活&#xff0c;在不改…

【进阶C语言】文件操作

文章目录一.文件1.文件的功能2.文件的分类3.文件路径绝对路径相对路径4.文件信息区5.文件缓冲区6.流的概念7.输入输出二.文件函数1.打开与关闭文件打开文件——fopen返回类型参数关闭文件——fclose返回类型参数2. 顺序读写1.输入输出字符输入字符函数——fgetc返回类型函数参数…