专栏名称: Seebug漏洞平台
Seebug,原 Sebug 漏洞平台,洞悉漏洞,让你掌握第一手漏洞情报!
目录
相关文章推荐
ZaomeDesign  ·  未来已来!2025年MAD即将建成的七个作品 ·  3 小时前  
大家居洞察  ·  大股东出手!美凯龙或获建发6亿元租金收入 ·  6 小时前  
大家居洞察  ·  大股东出手!美凯龙或获建发6亿元租金收入 ·  6 小时前  
字体设计  ·  风格多样的电影海报设计灵感网站 ·  2 天前  
马靖昊说会计  ·  DeepSeek+小红书,这才是未来5年财务 ... ·  3 天前  
51好读  ›  专栏  ›  Seebug漏洞平台

如何打造自己的PoC框架-Pocsuite3-使用篇

Seebug漏洞平台  · 公众号  ·  · 2019-04-25 14:30

正文

作者: w7ay@知道创宇404实验室


相比于无聊的用法介绍,我更想说一下Pocsuite3为什么会有这些功能以及是如何实现的。如果你也想制造一款类似的工具,Pocsuite3的一些思想或许能够帮助到你。本文同时也是记录Pocsuite3开发过程中的一些思考与理解。


简 介


Pocsuite 是由知道创宇404实验室打造的一款开源的远程漏洞测试框架。它是知道创宇安全研究团队发展的基石,是团队发展至今一直维护的一个项目,保障了我们的 Web 安全研究能力的领先。


你可以直接使用 Pocsuite 进行漏洞的验证与利用;你也可以基于 Pocsuite 进行 PoC/Exp 的开发,因为它也是一个 PoC 开发框架;同时,你还可以在你的漏洞测试工具里直接集成 Pocsuite,它也提供标准的调用类。


Pocsuite3是完全由Python3编写,支持Windows/Linux/Mac OSX等系统,在原Pocsuite的基础上进行了整体的重写与升级,使整个框架更具有操作性和灵活性。


巨人的肩膀


Pocsuite3在编写时参考了很多市面上的开源框架以及流行成熟的框架,在代码工程结构上参考了Sqlmap,Pocsuite-console模式则参照了routersploit与metasploit,所以PoC的代码格式和以前有些差别(但是尽量克制了大的改动)。Pocsuite3也提供了非常简单的接口调用,可以集成到其他安全工具内部。


下 载


Pip 安装


安装有两种,pip和直接运行源码。

pip install -U pocsuite3 --no-cache-dir


将使用Pocsuite3最新版。


执行

pocsuite -h


检验安装效果。


源码安装


如果你自信能折腾的话,可以下载源码使用,这也是我们推荐的方式,因为pip的更新可能会慢于github,

wget https://github.com/knownsec/pocsuite3/archive/master.zip
unzip master.zip


同时需要安装两个依赖

pip install requests requests-toolbelt


如果同时也是Windows系统,除了上面的依赖还需要安装一个

pip install pyreadline # Windows console模式下使用,如果不使用可以不安装


最后

python cli.py -h


检验安装效果。


另外需要注意的是,两种安装方式只可以取其一,不可同时安装。建议使用源码安装的方式。


一般使用帮助


大多数情况, -h 可以帮助你了解Pocsuite支持的功能。



一个简单的测试

python3 cli.py -r pocs/ecshop_rce.py --dork ecshop --threads 5


将使用ZoomEye搜索ecshop并使用 ecshop_rce.py 探测,指定线程数量为5



Pocsuite的运行模式默认是 verify 验证模式,此时对目标印象最小,也有 attack shell 模式,对目标进行相关攻击与shell反弹(当然需要PoC的支持,Pocsuite的PoC编写格式预留了这三种模式的接口,并且有很多内置API帮助实现这三种接口)


Shell模式


Pocsuite3新增加了shell模式的设定,当你选择了此函数,Pocsuite3将会监听一个端口,并等待目标的反连。我们提供了各种语言用于反连的payload



以及用于生成在Windows/Linux平台下可执行的shellcode。


从配置文件运行


有时候命令行命令太多,有些参数的重用性比较高,Pocsuite也提供了从配置文件中运行的方法。

我们以redis未授权访问漏洞为例,我们修改这个文件pocsuite.ini[1]



线程也调整一下,RUN!

python3 cli.py -c ../pocsuite.ini



由于开启了 comparsion 参数,我们可以看到更多的信息



如果你同时还是 Zoomeye VIP ,搜集目标的同时也能够识别出蜜罐信息。目前只有通过Zoomeye接口获取的数据才能有蜜罐的标识。其他接口Shodan、Censys暂未开放相关API接口。


插件系统


Pocsuite支持了插件系统,按照加载目标(targets),加载PoC(pocs),结果处理(results)分为三种类型插件。


Targets插件


除了本身可以使用 -u -f 加载本地的目标之外,你可以编写一个targets类型插件从任何你想加载的地方加载目标(eg:Zoomeye、Shodan)甚至从网页上,redis,都可以。Pocsuite3内置了四种目标加载插件。



从上文可以看出,如果使用了搜索dork —dork —dork_zoomeye —dork_shodan —dork_censys ,相关插件将自动加载,无需手动指定。


Pocs插件


原来只能通过从seebug中调用插件,现在将这种方式抽离出来作为插件,将允许从任何能够访问的地方调用,甚至写一个插件在github上维护一个仓库调用都行。


Demo:

https://github.com/knownsec/pocsuite3/blob/master/pocsuite3/plugins/poc_from_redis.py

https://github.com/knownsec/pocsuite3/blob/master/pocsuite3/plugins/poc_from_seebug.py


Results插件


Results插件允许对扫描的结果进行处理,可以参考内置的两个插件,保存结果为html与保存结果为txt。Results插件的结果是实时的,具体可以看plugins/file_record.py的实现方式。


https://github.com/knownsec/pocsuite3/blob/master/pocsuite3/plugins/html_report.py

https://github.com/knownsec/pocsuite3/blob/master/pocsuite3/plugins/file_record.py


调用插件


通过 --plugins 在后面指定插件名称,多个插件可以用 , 分割。例如 --plugins html_report 将会生成HTML报表格式文档。


内置API


基于我们漏洞应急的积累,基本上Pocsuite内置的API接口可以做到PoC编写的全覆盖了。很多API接口我们下一章再说,这里说两个比较有趣的案例。


Shellcode生成支持


在一些特殊的Linux和Windows环境下,想得到反弹shell条件比较困难。为此我们制作了用于在Windows/Linux x86 x64环境下的用于反弹的shellcode,并制作了接口支持,你在只需要拥有命令执行权限下便可以自动将shellcode写入到目标机器以及执行反弹shell命令。Demo Poc: https://github.com/knownsec/pocsuite3/blob/master/pocsuite3/pocs/thinkphp_rce2.py


HTTP服务内置


如果你们还对“Hacking Jenkins Part 2 - Abusing Meta Programming for Unauthenticated RCE! ”[2]有印象。多么完美的漏洞,但是在编写PoC的时候我们遇到了困难, verify 模式我们可以轻松用Ceye来识别,但是 attack 模式与 shell 模式我们就必须要制作自己的Jar并将它上传到服务器上面!


为此我们制作Jar格式打包的API以及HTTP服务API,在后面的众多越来越难以自动化的PoC编写中,会发现它是如此好用。


附 Jenkins Abusing Meta Programming for Unauthenticated RCE(CVE-2019-1003000) with Pocsuite3 演示视频。


https://www.youtube.com/watch?v=5P7WWlqYt4U


自定义参数传递


随着编程人员的安全意识逐渐提高,会发现以前一条链接就可以获取RCE的时代已经过去了。越来越多的漏洞转向需要一定"权限"才能触发。为此,我们需要在Pocsuite3预留参数接口。


在尽量保持原有PoC格式的前提下,我们增加了一个 _options 方法,用于指定用户传递的参数。DemoPoc: https://github.com/knownsec/pocsuite3/blob/master/tests/login_demo.py


我们定义了在Poc中需要传递 username password 两个参数,为了使用的方便,可以直接在命令行模式下如下

python3 cli.py -u http://localhost -r tests/login_demo.py --username "404team" --password "password"


是的,就是这么简单。可能你会问如果PoC中定义的参数与Pocsuite自带的参数名冲突了如何解决?我们的解决办法是不允许定义冲突的参数名,Pocsuite在启动时就会检查,如果有冲突的参数名会提示你修改PoC中的自定义参数名称。


Console模式







请到「今天看啥」查看全文