开发文档怎么编写_PoC 编写指南
什么是 PoC
PoC(全稱: Proof of Concept), 中文譯作概念驗證。在安全界,你可以理解成為漏洞驗證程序。和一些應(yīng)用程序相比,PoC 是一段不完整的程序,僅僅是為了證明提出者的觀點的一段代碼。因為是一些代碼片段,所以到現(xiàn)在都沒看到有一本書來講怎么編寫 PoC 的,因為這些東西對于會寫代碼的人來說,他們會很驚訝分分鐘就會了的事為什么還要出本書。
什么是 Exp
Exp(全稱: Exploit),中文叫漏洞利用程序,就是一段可以發(fā)揮漏洞價值的程序。想象一下這樣的場景,目標存在一個 SQL 注入漏洞,然后被你知道了,然后你編寫了一個程序,通過這個 SQL 注入漏洞,拿到了目標的權(quán)限,那么這個程序就是所謂的 Exp 了,當(dāng)然,如果你沒有使用這個漏洞,它就這么放著,那么這個漏洞,對你來說可以認為是沒有價值的。
關(guān)于 PoC/Exp 的兩個誤區(qū)
1. 寫 PoC 要會 Python?
PoC 的存在,只有一個目的:證明漏洞存在。而關(guān)于 PoC 的形式,或者說代碼實現(xiàn)方式,你喜歡用什么方式,就用什么方式。我們推薦 Python, 只是說安全界用 Python 的人居多,你寫的東西能被更多人看懂,還有 Python 這門語言的靈活,類庫強大等特性,給編寫的人提供了很大便利。
2. PoC 就是 Exp?
其實嚴格來講,PoC 和 Exp 是兩個東西。PoC 就是用來證明漏洞存在的,而 Exp 是用來利用這個漏洞的,在很多情況下,我們知道了漏洞存在,卻不知道具體怎么利用,編寫一個 PoC 非常簡單,而編寫一個 Exp 是相當(dāng)有挑戰(zhàn)性的。
什么是漏洞靶場
漏洞靶場(Vulnerability Firing Range), 就是跑著有漏洞的程序的測試機器。一般用虛擬機來實現(xiàn),當(dāng)然現(xiàn)在也有用 Docker 來實現(xiàn)的,反正就是給你一個已經(jīng)復(fù)現(xiàn)了漏洞的環(huán)境讓你測試漏洞的東西。
我們在學(xué)習(xí) PoC 編寫的時候,推薦自己搭建靶場來測試,不推薦直接使用互聯(lián)網(wǎng)上跑著業(yè)務(wù)的機器,因為現(xiàn)實環(huán)境安全配置情況往往要比靶場復(fù)雜的多,不利于新手學(xué)習(xí),這些都不是重點,重點是萬一你不小心把人家機器搞壞了,你說這鍋誰來背?
PoC 編寫流程
這里我們不討論未公開的漏洞,對于一個已經(jīng)公開的漏洞,PoC 的編寫流程是這樣的:
如果是一些 CMS, 可以去 對應(yīng)的官網(wǎng)下載歷史版本程序,有些漏洞作者不會提具體版本號,那你就要根據(jù)漏洞作者提交的時間來判斷了。當(dāng)然除了官方網(wǎng)站之外,還可以去 github 上尋找源碼,這些個官網(wǎng)都喜歡把歷史版本的程序刪除掉,善用 github 上的 tag, branch, release 功能,上面有你要的所有版本。
這里其實沒什么好說的,下載了人家的源碼之后,在你的虛擬機里面配置好環(huán)境就行了,還能順便學(xué)一下運維的一些皮毛知識。
根據(jù)漏洞詳情,手動將整個流程走一遍,熟悉下復(fù)現(xiàn)條件,比如使用 GET 還是 POST 請求,需不需要登陸,返回的頁面會是什么樣子的,我提交不同的參數(shù),會不會出現(xiàn)其它結(jié)果,如果漏洞不存在的話,會出現(xiàn)什么樣的結(jié)果......
磨刀不誤砍柴功,熟悉了這些之后,后面編碼實現(xiàn)簡直就是分分鐘的事,因為一開始我們就說過了,PoC 就是一小段代碼。
手動復(fù)現(xiàn)了一次漏洞之后,分析漏洞證明步驟,根據(jù)自己的實際測試情況一步一步寫代碼,用我的話來說,寫代碼,其實就是用程序模擬人工操作的每一個步驟,如果你上一步認真做了,這一步只是經(jīng)驗問題,本教程將在后面豐富你在這方面的閱歷。
其它測試和編碼基本都是在同時進行的,為什么要單獨提出來講呢,我們在寫 PoC 的時候,除了在存在漏洞的靶機上測試我們的代碼,還要在不存在漏洞的站點測試,一般為說,一個優(yōu)秀的 PoC 在后期測試的時候要求對 10000 個目標測試,誤報不能超過 10 個。
PoC 與 PoC 框架
PoC 框架就是一個批量管理,調(diào)度 PoC 的程序。因為是框架,要批量調(diào)度,那就要求 PoC 在編寫的時候要遵守一些規(guī)范,這些規(guī)范常見的有:
考慮到批量使用 PoC 的調(diào)度情況,統(tǒng)一入口框架調(diào)用該 PoC 的時候會非常之方便。這個就需要根據(jù)具體的框架的調(diào)度要求來看了,都有文檔的,看一下就會了。
API 是該框架對一些基礎(chǔ)類庫的封裝,比如說框架提供了一些網(wǎng)絡(luò)請求工具。這些封裝有什么好處呢?我還是舉例子來說明,比如某次掃描,調(diào)用了 1000 個 PoC 去掃描目標主機了,假設(shè)這個掃描任務(wù)中有一部分是需要登錄的,而有一些的作者在編寫的時候忘記在 PoC 中接收用戶自定義的 Cookie 了,那么此時就會因為接收不到 Cookie 而導(dǎo)致請求不成功。那么在使用了框架的情況下,即使在忘記了添加這些字段的情況下,框架也會自動將 Cookie 添加進請求中,為 PoC 開發(fā)者提供了極大的便利。
國內(nèi) PoC 框架簡介
官方的可以去各自的平臺看,這里只簡要說一下。
- Beebeeto
Evi1m0 創(chuàng)辦,民間社區(qū)。PoC 開發(fā)語言為 Python。白帽子互相學(xué)習(xí)并使用它人的 PoC。2016 年被 Sebug 收購。
Beebeeto 開發(fā)文檔地址 - Sebug-Pocsuite
早年學(xué)安全的人都聽過 Sebug 的名號,以前的民間漏洞庫,后來被知道創(chuàng)宇收購。Pocsuite 是 Sebug 平臺上通用的遠程漏洞驗證框架,使用 Python 編寫 PoC。寫 PoC 可以直接兌換實物與現(xiàn)金獎勵,兌換比例 1KB = ¥5(這是 RMB 不是日元)。Sebug 收購 Beebeeto 后,更名為 Seebug。
Pocsuite 開發(fā)文檔地址 - Bugscan
西安四葉草安全驅(qū)動的國內(nèi)首個基于社區(qū)的分布式漏洞掃描平臺。PoC 在這里也被稱作插件。使用 Python 編寫 PoC, 要求只能使用 Python2.7 的標準庫。寫插件有 rank 獎勵,可兌換實物獎勵,兌換比例 1 Rank = ¥10,商城有個比亞迪秦,看著很誘人啊。
Bugscan 開發(fā)文檔地址 - Tangscan
Wooyun 社區(qū)驅(qū)動的針對企業(yè)的掃描器,使用 Python 編寫 PoC。寫 PoC 命中后有湯圓,可參與分紅。
Tangscan 開發(fā)文檔地址 - 其它
網(wǎng)絡(luò)基礎(chǔ)
為什么要學(xué)網(wǎng)絡(luò)
安全界不缺乏有一些人連計算機網(wǎng)絡(luò)是什么都不清楚,但是拿站,滲透一搞一個準。然而像我這種整天把基礎(chǔ)知識掛在嘴邊的人,拿站的時候照樣慫。基礎(chǔ)知識在我看來,是種常識,是種工具,不能說不會基礎(chǔ)知識的人就一定不能怎么樣,我只能說,我建議,我推薦,我支持先從基礎(chǔ)學(xué)起來,這樣在后面的學(xué)習(xí)當(dāng)中就會如魚得水。
需要學(xué)什么
對于寫 PoC 來說,我們需要的并不是你去把 OSI 7 層模型的每一層都精通,你要精通了所有層的東西,你就不會坐在這里了。
好了,大概說一下我們需要了解哪些,相關(guān)的專業(yè)知識你可以去百度和Goole。
- 請求響應(yīng)配對
- 域名系統(tǒng)
- IP 地址
- TCP 是做什么的
- HTTP 協(xié)議(請重點關(guān)注這個,后面很多地方都會用到)
編碼基礎(chǔ)
編碼基礎(chǔ)這里不要求你精通, 畢竟一開始就深化了一下 PoC 的概念,他就是一個不完整的程序,所以你只要會一些常用的就 OK, 不要說你不會這種話,不會可以花一點時間來學(xué),放心,根本不需要你達到一個什么樣的深度。
那我就大概寫一下需要學(xué)什么東西了:
- HTML
這里不單是看 HTML 語言,更多的要去理解什么是瀏覽器。你看到的漂亮的不像實力派的網(wǎng)頁,在傳輸?shù)臅r候是什么樣子的,瀏覽器在接收到響應(yīng)之后大概做了點什么事。 - Javascript
想學(xué) XSS, CSRF 不會這兩個可不行。 - Python
我們后面寫 PoC 會用到,所以這個要必會。這里只需要你會一點點 Python 的語法和一些常用的功能庫就夠了。 - SQL
- 正則表達式
自動化過程中經(jīng)常需要自動匹配,不需要精通,但是要多多少少會一些。怎么測試你會了呢?我給你任意一個 wooyun 的漏洞頁面,然后你能用腳本把里面的漏洞標題,作者,漏洞提交時間等等信息能夠輕松用正則表達式提取出來,吶,這樣就 OK 了。
關(guān)于 Python 的一些庫
- urllib
- urllib2
- requests
- httplib
- cookielib
發(fā)送 HTTP 請求的,當(dāng)然還有一些其他的。 - urlparse
處理 url 的 - re
正則表達式 - random
看名字就知道是生成隨機數(shù)的 - hashlib
md5 算法幫你集成在這里了 - base64
base64 編碼全家福都在這里 - socket
如果你知道 TCP 和 HTTP 的關(guān)系的話,你就能理解 socket 和 urllib 的關(guān)系了。
文/Medici.Yan
GitHub: https://github.com/Medicean
總結(jié)
以上是生活随笔為你收集整理的开发文档怎么编写_PoC 编写指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Go 语言web 框架 Gin 练习6
- 下一篇: Go 语言web 框架 Gin 练习 7