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

相比于无聊的用法介绍,我更想说一下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

线程也调整一下,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-plugin

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! 有印象。多么完美的漏洞,但是在编写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模式
在某些情况下,我们也考虑到了可交互的命令模式(***的仪式感)。并且它完全能兼容命令行模式下的PoC,如果你在Linux或Mac下使用它,将得到更好的体验。


一些Tips:

在此模式下多用help可以明白更多
加载PoC插件时,可以直接use + 数字,更简单方便,当然输入完整路径也可以,按下Tab会自动补全。
有一些命令别名没有在help中显示,作为彩蛋等待使用者发现


API 通用集成
我们鼓励也支持将Pocsuite3作为安全产品中的一部分。只需要将Pocsuite3作为模块导入到你的项目中就能轻松使用。后面我们也会详细说明Pocsuite3是如何做到这一点的。

pocsuite3.api将Pocsuite中所有接口暴露出来,不管是写PoC还是集成到自己的环境,只需要使用这就可以。一个简单调用Demo。

from pocsuite3.api import init_pocsuite
from pocsuite3.api import start_pocsuite
from pocsuite3.api import get_result
from pocsuite3.api import path
import os

config = {
  ‘url‘: ‘https://www.baidu.com/‘,
  ‘poc‘: os.path.join(paths.POCSUITE_ROOT_PATH, "../tests/login_demo.py"),
  ‘username‘: "asd",
  ‘password‘: ‘asdss‘,
  ‘verbose‘: 0
}
#config字典的配置和cli命令行参数配置一模一样
init_pocsuite(config)
start_pocsuite()
result = get_results().pop()
print(result)

最后
一个功能完备的框架并不只是一个可以批量处理任务的引擎,很多东西需要在实战中积累并以最好的方式实现出来(俗称踩坑)。在打造自己的PoC框架过程中,一定要清楚自己需要的是什么,以及用何种方式将它优雅的解决?下篇将具体谈谈Pocsuite3中的框架结构。

原文地址:https://blog.51cto.com/14126565/2384733

时间: 2024-08-03 10:22:34

如何打造自己的PoC框架-Pocsuite3-使用篇的相关文章

Android注入框架你应该知道的一切------打造自己的注入框架

前言 Java的所有框架基本都是基于反射的,所以有句话是这么说的,无反射,无框架.所以Android的注入框架也是基于反射的,接下来就简单的介绍一下Android的注入框架你应该知道的一切. 注解简介 注解(Annotation)在Java里面是比较重要的一部分,但是通常很少接触到这一部分,这里就简单的过一下.现在我们简单的写一个注解然后解释它. 通过Eclipse右键->New->Annotation然后敲入下面的代码. @Target(ElementType.FIELD) @Retenti

LrcCache和DiskLruCache相结合打造图片加载框架

LrcCache和DiskLruCache相结合打造图片加载框架 1概述 这几在研究图片加载的方面的知识,在网上看了一下前辈们写的文章,受到了一些启发,于是综合多方面的知识,将这些整合起来,自己边写了一个图片加载框架.说到图片加载最容易出问题的就是OOM就是内存溢出,所以一定要限制加载图片时使用的内存,这就使用到Android提供的缓存类LruCache,关于LruCache的知识这里不再赘述,大家自行学习.但是如果图片非常的多而且频繁操作的话,加上LruCache的缓存空间有限,缓存就不得不经

Android注入框架你应该知道的一切——打造自己的注入框架

Java的所有框架基本都是基于反射的,所以有句话是这么说的,无反射,无框架.所以Android的注入框架也是基于反射的,接下来就简单的介绍一下Android的注入框架你应该知道的一切. 注解简介 注解(Annotation)在Java里面是比较重要的一部分,但是通常很少接触到这一部分,这里就简单的过一下.现在我们简单的写一个注解然后解释它. 通过Eclipse右键->New->Annotation然后敲入下面的代码. @Target(ElementType.FIELD) @Retention(

MVC系列——MVC源码学习:打造自己的MVC框架(四:自定义视图)

前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾.对于这个系列,通过学习源码,博主也学到了很多东西,在此还是把博主知道的先发出来,供大家参考. 本文原创地址:http://www.cnblogs.com/landeanfen/p/6019719.html MVC源码学习系列文章目录: MVC系列——MVC源码学习:打造自己的MVC框架(一) MVC

iOS OpenGLES 框架相关 24 篇文档排序整理

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. OpenGLES Use a compact, efficient subset of the OpenGL API for 2D and 3D

ym—— Android网络框架Volley(实战篇)

转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103).谢谢支持. 之前讲了ym-- Android网络框架Volley(体验篇),大家应该了解了volley的使用,接下来我们要看看怎样把volley使用到实战项目里面,我们先考虑下一些问题: 从上一篇来看 mQueue 仅仅须要一个对象就可以,new RequestQueue对象对资源一种浪费,我们应该在application.以及能够把取消请求的方法也在application进行统一管理,看下面代

Android开源框架Afinal第一篇——揭开圣女的面纱

Android开源框架Afinal第一篇——揭开圣女的面纱 分类: Android开源框架哪点事2013-09-02 14:25 260人阅读 评论(0) 收藏 举报 Afinal 这是Afinal在github的地址:https://github.com/yangfuhai/afinal Afinal这个框架主要分4块: 1.FinalDB模块:android中的orm框架,一行代码就可以进行增删改查.支持一对多,多对一等查询. 2.FinalActivity模块:android中的ioc框架

ym—— Android网络框架Volley(体验篇)

<a target=_blank href="https://android.googlesource.com/platform/frameworks/volley" style="font-family: Arial, Helvetica, sans-serif; box-sizing: border-box; background-image: initial; background-attachment: initial; background-color: rg

计算机常识--框架、编程语言篇

Python Python是一种面向对象语言.能够把用其他语言(尤其是c/c++)制作的各种模块联结在一起.Python在执行时,首先会将 .py文件中的源代码编译成Python的 byte code(字节码),然后在由Python virtual machine来执行这些编译好的字节码文件按.基于c的Python编译出的字节码文件,通常是.pyc格式. MFC Microsoft Foundation Classes 微软公司提供的一个类库,以c++类的形式封装了windows的api,并且包