php %00,Nginx %00 null byte执行任意代码(php)漏洞
Ngnix在遇到%00空字節(jié)時與后端FastCGI處理不一致,導致可以在圖片中嵌入PHP代碼然后通過訪問abc.png%00.php來執(zhí)行其中的代碼,惡意攻擊者可以通過上傳包含執(zhí)行代碼的圖片文件來執(zhí)行有特殊目的的代碼。
影響版本:0.5.*, 0.6.*, 0.7 <= 0.7.65, 0.8
<= 0.8.37
nginx默認以cgi的方式支持php的運行,譬如在配置文件當中可以以
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
的方式支持對php的解析,location對請求進行選擇的時候會使用URI環(huán)境變量進行選擇,其中傳遞到后端Fastcgi的關(guān)鍵變量SCRIPT_FILENAME由nginx生成的$fastcgi_script_name決定,而通過分析可以看到$fastcgi_script_name是直接由URI環(huán)境變量控制的,這里就是產(chǎn)生問題的點。而為了較好的支持PATH_INFO的提取,在PHP的配置選項里存在cgi.fix_pathinfo選項,其目的是為了從SCRIPT_FILENAME里取出真正的腳本名。
那么假設(shè)存在一個http://www.aabc.com/aaxx.png,我們以如下的方式去訪問
將會得到一個URI
/aaxx.png/%00.php
經(jīng)過location指令,該請求將會交給后端的fastcgi處理,nginx為其設(shè)置環(huán)境變量SCRIPT_FILENAME,內(nèi)容為
/scripts/aaxx.png/%00.php
而在其他的webserver如lighttpd當中,我們發(fā)現(xiàn)其中的SCRIPT_FILENAME被正確的設(shè)置為
/scripts/%00.php
所以不存在此問題。
后端的fastcgi在接受到該選項時,會根據(jù)fix_pathinfo配置決定是否對SCRIPT_FILENAME進行額外的處理,一般情況下如果不對fix_pathinfo進行設(shè)置將影響使用PATH_INFO進行路由選擇的應用,所以該選項一般配置開啟。Php通過該選項之后將查找其中真正的腳本文件名字,查找的方式也是查看文件是否存在,這個時候?qū)⒎蛛x出SCRIPT_FILENAME和PATH_INFO分別為
/scripts/aabc.png和%00.php
最后,以/scripts/aabc.png作為此次請求需要執(zhí)行的腳本,攻擊者就可以實現(xiàn)讓nginx以php來解析任何類型的文件了。
POC:
訪問一個nginx來支持php的站點,在一個任何資源的文件如robots.txt后面加上/aaxx.php,這個時候你可以看到如下的區(qū)別:
訪問http://www.abcd.com/robots.txt
HTTP/1.1 200 OK
Server: nginx/0.6.32
Date: Thu, 20 May 2010 10:05:30 GMT
Content-Type: text/plain
Content-Length: 18
Last-Modified: Thu, 20 May 2010 06:26:34 GMT
Connection: keep-alive
Keep-Alive: timeout=20
Accept-Ranges: bytes
訪問http://www.abcd.com/robots.txt/%00.php
HTTP/1.1 200 OK
Server: nginx/0.6.32
Date: Thu, 20 May 2010 10:06:49 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=20
X-Powered-By: PHP/5.2.6
其中的Content-Type的變化說明了后端負責解析的變化,該站點就可能存在漏洞。
漏洞廠商:http://www.nginx.org
解決方案:
nginx升級到?0.7
>?0.7.65,
0.8?> 0.8.37
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的php %00,Nginx %00 null byte执行任意代码(php)漏洞的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java调用 火眼臻睛,连接创新,发现未
- 下一篇: php 实现百度坐标转换,PHP中腾讯与