您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何理解PoC框架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 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幫助實現這三種接口)。
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)分為三種類型插件。
除了本身可以使用-u
、-f
加載本地的目標之外,你可以編寫一個targets類型插件從任何你想加載的地方加載目標(eg:Zoomeye、Shodan)甚至從網頁上,redis,都可以。Pocsuite3內置了四種目標加載插件。
從上文可以看出,如果使用了搜索dork—dork
、—dork_zoomeye
、—dork_shodan
、—dork_censys
,相關插件將自動加載,無需手動指定。
原來只能通過從seebug中調用插件,現在將這種方式抽離出來作為插件,將允許從任何能夠訪問的地方調用,甚至寫一個插件在github上維護一個倉庫調用都行。
Demo:
https://github.com/knownsec/pocsuite3/blob/master/pocsuite3/plugins/poc_from_redis.pyhttps://github.com/knownsec/pocsuite3/blob/master/pocsuite3/plugins/poc_from_seebug.py
Results插件允許對掃描的結果進行處理,可以參考內置的兩個插件,保存結果為html與保存結果為txt。Results插件的結果是實時的,具體可以看plugins/file_record.py
的實現方式。
https://github.com/knownsec/pocsuite3/blob/master/pocsuite3/plugins/html_report.pyhttps://github.com/knownsec/pocsuite3/blob/master/pocsuite3/plugins/file_record.py
通過--plugins
在后面指定插件名稱,多個插件可以用,
分割。例如--plugins html_report
將會生成HTML報表格式文檔。
基于我們漏洞應急的積累,基本上Pocsuite內置的API接口可以做到PoC編寫的全覆蓋了。很多API接口我們下一章再說,這里說兩個比較有趣的案例。
在一些特殊的Linux和Windows環境下,想得到反彈shell條件比較困難。為此我們制作了用于在Windows/Linux x86 x64環境下的用于反彈的shellcode,并制作了接口支持,你在只需要擁有命令執行權限下便可以自動將shellcode寫入到目標機器以及執行反彈shell命令。
Demo Poc:https://github.com/knownsec/pocsuite3/blob/master/pocsuite3/pocs/thinkphp_rce2.py
如果你們還對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中的自定義參數名稱。
在某些情況下,我們也考慮到了可交互的命令模式(黑客的儀式感)。并且它完全能兼容命令行模式下的PoC,如果你在Linux或Mac下使用它,將得到更好的體驗。
我們鼓勵也支持將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框架過程中,一定要清楚自己需要的是什么,以及用何種方式將它優雅的解決?
關于如何理解PoC框架Pocsuite3就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。