關於poc腳本的一些問題


什么是 PoC

PoC(全稱: Proof of Concept), 中文譯作概念驗證。在安全界,你可以理解成為漏洞驗證程序(本教程中,如無特別說明,默認代表漏洞驗證程序),當然你要強行說我說的不對,我肯定支持你,反正我沒打算反駁你。和一些應用程序相比,PoC 是一段不完整的程序,僅僅是為了證明提出者的觀點的一段代碼。因為是一些代碼片段,所以到現在都沒看到有一本書來講怎么編寫 PoC 的,因為這些東西對於會寫代碼的人來說,他們會很驚訝分分鍾就會了的事為什么還要出本書。

什么是 Exp

Exp(全稱: Exploit),中文叫漏洞利用程序。名字上說的已經很清楚了,簡單講,就是一段可以發揮漏洞價值的程序,這話感覺和沒說一樣。想象一下這樣的場景,目標存在一個 SQL 注入漏洞,然后被你知道了,然后你編寫了一個程序,通過這個 SQL 注入漏洞,拿到了目標的權限,那么這個程序就是所謂的 Exp 了,當然,如果你沒有使用這個漏洞,它就這么放着,那么這個漏洞,對你來說可以認為是沒有價值的。

關於 PoC/Exp 的幾個誤區

  1. 寫 PoC 要會 Python.

    這句話,毒害了很多人。PoC 的存在,只有一個目的:證明漏洞存在。而關於 PoC 的形式,或者說代碼實現方式,你想用什么方式,就用什么方式。我們推薦 Python, 只是說安全界用 Python 的人居多,你寫的東西能被更多人看懂,還有 Python 這門語言的靈活,類庫強大等特性,給編寫的人提供了很大便利。

    你可以這么理解啊,你要找工作了,你爸媽都推薦你去考公務員,你能說要工作就只能考公務員這種話嗎?

  2. PoC 就是 Exp.

    這話也不知道是誰第一個說的。其實嚴格來講,PoC 和 Exp 是兩個東西,你要強行說兩個是一個,那你當我沒說好了。在我看來,PoC 就是用來證明漏洞存在的,而 Exp 是用來利用這個漏洞的,在很多情況下,我們知道了漏洞存在,卻不知道具體怎么利用,編寫一個 PoC 非常簡單,而編寫一個 Exp 是相當有挑戰性的。

    PoC 和 Exp 的區別就有點像你發現了家門口的超市的鎖有問題,你給人家證明鎖有問題和通過鎖有問題這個現象偷到超市的錢 這是兩碼事。

什么是漏洞靶場

漏洞靶場(Vulnerability Firing Range), 就是跑着有漏洞的程序的測試機器。一般用虛擬機來實現,當然現在也有用 Docker 來實現的,反正就是給你一個已經復現了漏洞的環境讓你測試漏洞的東西。

我們在學習 PoC 編寫的時候,推薦自己搭建靶場來測試,不推薦直接使用互聯網上跑着業務的機器,因為現實環境安全配置情況往往要比靶場復雜的多,不利於新手學習,這些都不是重點,重點是萬一你不小心把人家機器搞壞了,你說這鍋誰來背?你背的起嗎?

PoC 編寫流程

這里我們不討論未公開的漏洞,對於一個已經公開的漏洞,PoC 的編寫流程是這樣的:

  1. 根據漏洞詳情,尋找受影響版本程序。

    如果是一些 CMS, 可以去 對應的官網下載歷史版本程序,有些漏洞作者不會提具體版本號,那你就要根據漏洞作者提交的時間來判斷了。當然除了官方網站之外,還可以去 github 上尋找源碼,這些個官網都喜歡把歷史版本的程序刪除掉,善用 github 上的 tag, branch, release 功能,上面有你要的所有版本。

  2. 搭建對應漏洞靶場

    這里其實沒什么好說的,下載了人家的源碼之后,在你的虛擬機里面配置好環境就行了,還能順便學一下運維的一些皮毛知識。

  3. 手動復現漏洞

    根據漏洞詳情,手動將整個流程走一遍,熟悉下復現條件,比如使用 GET 還是 POST 請求,需不需要登陸,返回的頁面會是什么樣子的,我提交不同的參數,會不會出現其它結果,如果漏洞不存在的話,會出現什么樣的結果......

    磨刀不誤砍柴功,熟悉了這些之后,后面編碼實現簡直就是分分鍾的事,因為一開始我們就說過了,PoC 就是一小段代碼。

  4. 寫代碼

    手動復現了一次漏洞之后,分析漏洞證明步驟,根據自己的實際測試情況一步一步寫代碼,用我的話來說,寫代碼,其實就是用程序模擬人工操作的每一個步驟,如果你上一步認真做了,這一步只是經驗問題,本教程將在后面豐富你在這方面的閱歷。

  5. 測試 PoC

    其它測試和編碼基本都是在同時進行的,為什么要單獨提出來講呢,我們在寫 PoC 的時候,除了在存在漏洞的靶機上測試我們的代碼,還要在不存在漏洞的站點測試,一般為說,一個優秀的 PoC 在后期測試的時候要求對 10000 個目標測試,誤報不能超過 10 個。

PoC 與 PoC 框架

PoC 框架就是一個批量管理,調度 PoC 的程序。因為是框架,要批量調度,那就要求 PoC 在編寫的時候要遵守一些規范,這些規范常見的有:

  1. 入口規范

    考慮到批量使用 PoC 的調度情況,統一入口框架調用該 PoC 的時候會非常之方便。這個就需要根據具體的框架的調度要求來看了,都有文檔的,看一下就會了。

  2. API 規范

    API 是該框架對一些基礎類庫的封裝,比如說框架提供了一些網絡請求工具。這些封裝有什么好處呢?我還是舉例子來說明,比如某次掃描,調用了 1000 個 PoC 去掃描目標主機了,假設這個掃描任務中有一部分是需要登錄的,而有一些的作者在編寫的時候忘記在 PoC 中接收用戶自定義的 Cookie 了,那么此時就會因為接收不到 Cookie 而導致請求不成功。那么在使用了框架的情況下,即使在忘記了添加這些字段的情況下,框架也會自動將 Cookie 添加進請求中,為 PoC 開發者提供了極大的便利。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM