0x01Wanli简介
官方一点的说法是方便红队人员对目标站点进行安全检测,快速获取资产,但作者最开始也在公众号文章说过,最初的设定是“把常用的工具给做了一个调用整合到一个程序内,功能拓展比较方便,目前是根据自己的一些习惯写的,比如目录扫描、子域名爆破+验证、漏洞扫描”
项目地址:https://github.com/ExpLangcn/WanLi
仓库最新版是作者重构的2.2版本,相比前面的初始版本,代码结构更为规范化。
本篇文章依据Wanli的初始版本。
0x02 正文部分
将初始版本下载到本地,安装一下依赖,主界面如下:
打开项目,首先看config
文件,这里定义的是工具的位置,因为是Windows环境,所以需要加入双反斜杠:
打开主程序Wanli.py
这里可以自定义banner
信息:
从第85行开始,进入项目核心程序,作者使用了cmd2库:
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的命令行中可以继续执行下一条命令,无需等待当前程序运行结束:
同样,再次新增一个参数,调用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))
|
通过Wanli我们可以简化命令行窗口和重复性的输入命令。
当前的2.2版本Wanli定位变成了面向红队的快速工具。
查看仓库中core/domain.py
文件,可以发现相比初始版本,当前版本变得稍显复杂,也稍显规范化
当前版本Windows安装可能会出现如下情况:
curses
依赖无法通过pip直接安装,需要先去https://www.lfd.uci.edu/~gohlke/pythonlibs/#curses网站下载`whl`文件,再通过pip安装(但我同样没有安装成功,所以没有2.2版本运行的截图)
相比于初始版本,当前2.2版本扩充性稍减,毕竟定位发生了变化。