【渗透测试】Make Arsenal from Wanli

0x01Wanli简介

官方一点的说法是方便红队人员对目标站点进行安全检测,快速获取资产,但作者最开始也在公众号文章说过,最初的设定是“把常用的工具给做了一个调用整合到一个程序内,功能拓展比较方便,目前是根据自己的一些习惯写的,比如目录扫描、子域名爆破+验证、漏洞扫描”

项目地址:https://github.com/ExpLangcn/WanLi

仓库最新版是作者重构的2.2版本,相比前面的初始版本,代码结构更为规范化。

本篇文章依据Wanli的初始版本。

0x02 正文部分

将初始版本下载到本地,安装一下依赖,主界面如下:

Untitled

打开项目,首先看config文件,这里定义的是工具的位置,因为是Windows环境,所以需要加入双反斜杠:

Untitled

打开主程序Wanli.py这里可以自定义banner信息:

Untitled

从第85行开始,进入项目核心程序,作者使用了cmd2库:

Untitled

1
2
3
4
5
6
7
8
9
dirscan_parser = Cmd2ArgumentParser()
dirscan_parser.add_argument(
"url",help="扫描单个Web应用敏感文件及敏感地址,dirscan <https://www.baidu.com/>")

@cmd2.with_argparser(dirscan_parser)
def do_dirscan(self, args):
'''扫描单个Web应用敏感文件及敏感地址,dirscan <https://www.baidu.com/>'''
if args.url != "":
lib.cmd.wanli.dirscan(args.url)

跟进cmd.wanli.dirscan(args.url)函数:

1
2
3
def dirscan(url):
datatime = datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
system(r"start cmd /k " + config.config.PYTHON + " " +config.config.dirsearch +r" -u " + url + " -t 100")

前面说过,Wanli最开始的定位就相当于一个快速启动脚本,所以它的逻辑很清晰,注册参数,输入url,自动执行函数调用工具运行扫描。

那么我们就可以非常容易的对Wanli进行扩充,比如我们增加Finger指纹扫描:

1
2
3
4
5
6
7
8
9
10
finger_parser = Cmd2ArgumentParser()
finger_parser.add_argument(
"-f", nargs='?',help="调用Finger指纹对文本批量指纹扫描, finger -f url.txt")

@cmd2.with_argparser(finger_parser)
def do_finger(self,args):
'''调用Finger指纹对文本批量指纹扫描, finger -f url.txt'''
if args.f:
file = args.f
system(r"start cmd /k " + config.config.PYTHON + " " + config.config.finger + " " + r"-f" + " " + file + r" -o xlsx")

运行程序查看参数,因为这里用的是新开窗口,所以运行一个参数之后在Wanli的命令行中可以继续执行下一条命令,无需等待当前程序运行结束:

Untitled

Untitled

同样,再次新增一个参数,调用subfinder域名爆破,ksubdomain验证模式,输出csv:

1
2
3
4
5
6
7
8
9
10
11
12
13
domainbrute_parser = Cmd2ArgumentParser()
domainbrute_parser.add_argument(
"-d", nargs='?',help="调用subfinder域名爆破,ksubdomain验证模式,输出csv, domainbrute -d baidu.com")

@cmd2.with_argparser(domainbrute_parser)
def do_domainbrute(self,args):
'''调用subfinder域名爆破,ksubdomain验证模式,输出csv, domainbrute -d baidu.com'''
if args.d:
domain = args.d
datatime = datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
system(r"start cmd /k " + config.config.subfinder + r" -d " + domain + " -o G:\\\\Arsenal\\\\PenFrameWork\\\\WanLi\\\\results\\\\domainbrute\\\\{}.txt".format(domain))
time.sleep(30)
system(r"start cmd /k " + config.config.ksubdomain + " -verify -f G:\\\\Arsenal\\\\PenFrameWork\\\\WanLi\\\\results\\\\domainbrute\\\\{}.txt -csv -o G:\\\\Arsenal\\\\PenFrameWork\\\\WanLi\\\\results\\\\domainbrute\\\\{}".format(domain,datatime))

Untitled

Untitled

Untitled

Untitled

通过Wanli我们可以简化命令行窗口和重复性的输入命令。

当前的2.2版本Wanli定位变成了面向红队的快速工具。

查看仓库中core/domain.py文件,可以发现相比初始版本,当前版本变得稍显复杂,也稍显规范化

Untitled

当前版本Windows安装可能会出现如下情况:

Untitled

curses依赖无法通过pip直接安装,需要先去https://www.lfd.uci.edu/~gohlke/pythonlibs/#curses网站下载`whl`文件,再通过pip安装(但我同样没有安装成功,所以没有2.2版本运行的截图)

相比于初始版本,当前2.2版本扩充性稍减,毕竟定位发生了变化。