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

    ghostscript 命令注入漏洞分析

    VSole2021-09-24 18:21:50

    最近在網上看到一個關于ghostscript軟件的一個poc生成腳本,看了下生成的poc感覺應該挺簡單的,隨手分析下,該漏洞目前在野。

    漏洞信息

    1、漏洞簡述

    ? 漏洞名稱:無

    ? 漏洞編號:無

    ? 漏洞類型:命令注入

    ? 漏洞影響:遠程命令執行

    ? CVSS評分:無

    ? 利用難度:簡單

    ? 基礎權限:不需要

    2、組件概述

    ghostscript是一款圖像瀏覽工具。ghostscript能夠查看以及打印PS、EPS、PDF格式的文件。適用于Unix、Mac OS X、VMS、Windows、OS/2和Mac OS classic等操作系統的使用。

    3、漏洞影響

    Ghostscript9.50, 基于Ghostscript的三方庫和工具。

    其他版本不詳,未測試。

    漏洞復現

    1、環境搭建

    Ubuntu20.4

    2、復現過程

    a) 使用提供的poc生成腳本生成poc

    python '/home/hua/桌面/IM-RCE-via-GhostScript-9.5.py' 'touch the_poc' '/home/hua/桌面/test.jpg'
    

    b) 安裝imagemagick

    sudo apt install imagemagick-6.q16
    

    c) 運行convert轉換圖片

    convert test.jpg test.png
    

    漏洞分析

    根據流出的poc readme 得知該漏洞并不是直接由convert觸發,而是convert調用了GhostScript, GhostScript觸發了該漏洞。

    先找到convert調用GhostScript的地方,并觀察傳遞的命令行參數。

    在linux系統中,調用其他進程的函數無非就system,execX,popen這幾個函數,所以可以在libc中對這幾個函數下斷點。

    一段操作后并未發現斷點命中,懷疑可能是先fork然后在子進程中調用。果然命中。

    根據棧回溯,找到調用fork函數的地方,并修改ip強制將ip指向子進程的空間中,找到了調用gs的地方。

    傳遞的詳細命令行參數如下

    gs -sstdout=%stderr -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 -sDEVICE=pngalpha -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r72x72 -g612x792 -dEPSCrop -sOutputFile=/tmp/magick-15565sSaJTfcgWCk7%d -f/tmp/magick-15565gqAGdyB3qGD9 -f/tmp/magick-15565RttrpTjPQ4Qb

    其中最關鍵的參數是/tmp/magick-15565RttrpTjPQ4Qb指向的文件。

    可以看到,我們傳入的命令已經被寫入到了其中。

    手動執行上面的命令行測試。

    /tmp/magick-15565RttrpTjPQ4Qb 是一個軟連接,它指向/proc/self/fd/3, 由于進程不同所以需要將self替換為convert的進程id。

    可以肯定該漏洞肯定是由GhostScript觸發的。

    現在來調試GhostScript,和前面的思路一樣,既然是命令注入肯定逃不脫system、execX、popen系列的函數,所以還是在libc中將這些函數下斷點等它來即可。

    可以看到在popen函數中命中了斷點,并且利用’;’來執行命令。

    查了一下GhostScript是一個開源的軟件,下載了一份源碼看下具體的調用邏輯,但由于太過復雜,所以只是簡單的分析了下來龍去脈。

    這里有一個數據結構,應該是根據%pipe%這個字段來調用該數據結構中的函數指針進行解析。

    pipe_fopen函數中調用了open_pipe函數指針。

    open_pipe函數指針在pipe_init函數中初始化并賦值為fs_file_open_pipe。

    fs_file_open_pipe函數中調用了popen函數,這里就是漏洞的觸發點。

    很明顯,此處是將括號中的字符串當作文件名直接傳遞給了popen函數來進行執行,所以才導致該漏洞存在。 

    另附poc生成腳本(可點擊文末閱讀原文前往下載附件)。

     

    函數調用imagemagick漏洞
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    概述在windows系統上,涉及到內核對象的功能函數,都需要從應用層權限轉換到內核層權限,然后再執行想要的內核函數,最終將函數結果返回給應用層。本文就是用OpenProcess函數來觀察函數從應用層到內核層的整體調用流程。OpenProcess函數,根據指定的進程ID,返回進程句柄。NTSTATUS Status; //保存函數執行狀態。OBJECT_ATTRIBUTES Obja; //待打開對象的對象屬性。HANDLE Handle; //存儲打開的句柄。CLIENT_ID ClientId; //進程、線程ID. dwDesiredAccess, //預打開進程并獲取對應的權限。ObjectNamePresent = ARGUMENT_PRESENT ; //判斷對象名稱是否為空
    關于堆棧ShellCode操作:基礎理論002-利用fs寄存器尋找當前程序dll的入口:從動態運行的程序中定位所需dll003-尋找大兵LoadLibraryA:從定位到的dll中尋找所需函數地址004-被截斷的shellCode:加解密,解決shellCode的零字截斷問題
    反射式DLL注入實現
    2022-05-13 15:59:21
    反射式dll注入與常規dll注入類似,而不同的地方在于反射式dll注入技術自己實現了一個reflective loader()函數來代替LoadLibaryA()函數去加載dll,示意圖如下圖所示。藍色的線表示與用常規dll注入相同的步驟,紅框中的是reflective loader()函數行為,也是下面重點描述的地方。
    漏洞發生的位置是在驅動文件Win32k.sys中的xxxHandleMenuMessage函數,產生的原因是沒有對該函數中調用的xxxMNFindWindowFromPoint函數的返回值進行合法性驗證,直接將其作為參數傳遞給后面的xxxSendMessage函數調用,從而造成了提權漏洞
    Win32k組件最初的設計和編寫是完全建立的用戶層上的,但是微軟在 Windows NT 4.0 的改變中將 Win32k.sys 作為改變的一部分而引入,用以提升圖形繪制性能并減少 Windows 應用程序的內存需求。窗口管理器(User)和圖形設備接口(GDI)在極大程度上被移出客戶端/服務端運行時子系統(CSRSS)并被落實在它自身的一個內核模塊中。
    結構&拷貝與引用
    2023-05-10 11:27:04
    結構&拷貝與引用開始之前,我們約定數據塊也叫插槽,也就是storage。storage是永久存儲在區塊鏈上的地方。Stack 的最大深度為 1024 個元素,支持 256 位的字長。結構當定義局部變量時,它存儲在內存中,然后壓入堆棧以執行。1024棧深簡介EVM不是寄存器機而是堆棧機,所以所有的計算都在稱為堆棧的數據區域上進行。1024 是一個非常保守的值,以盡可能安全EVM 的設計方式往往會使更大的堆棧變得無用。EVM 只能訪問堆棧中前16個slot。
    可是當我們開啟了smap保護之后,內核態就沒有辦法訪問用戶態的數據,此時當我們再hijack tty_operation到我們的用戶態時,我們的kernel就會panic,更別說劫持執行流到用戶態上執行rop了。當我們調用msgsnd時,在linux內核中會調用do_msgsnd。
    本篇針對該JS中的字符串混淆進行還原。字符串是如何混淆的解密方式想要對字符串反混淆就要先分析該樣本是如何對字符串進行混淆的。而處于全局作用域的_0x1f1a68實際上也是對另一個函數的調用。
    當線程從等待狀態蘇醒后,會自動檢測自己得APC隊列中是否存在APC過程。所以只需要將目標進程的線程的APC隊列里面添加APC過程,當然為了提高命中率可以向進程的所有線程中添加APC過程。然后促使線程從休眠中恢復就可以實現APC注入。往線程APC隊列添加APC,系統會產生一個軟中斷。第二個參數表示插入APC的線程句柄,要求線程句柄必須包含THREAD_SET_CONTEXT訪問權限。第三個參數表示傳遞給執行函數的參數。如果直接傳入shellcode不設置第三個函數,可以直接執行shellcode。
    01高門檻,勿入在Cisco平臺上有一個很有用的Traceback log功能,實時記錄當前Code運行到特
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类