中間件安全之Nginx滲透


一、概述

目錄結構

gFLtZ6.png

默認情況下,網站主目錄是在該文件下的html文件中,但是這里使用小皮進行搭建,根目錄重新設置了,可以在\nginx\conf\nginx.conf文件中查看

gFLNdK.png

gFLUIO.png

版本查看

Linux下

gFXyUf.png

二、Nginx漏洞分析及復現

1、文件解析漏洞

文件上傳,繞過

0x01 概述

該漏洞是由於Nginxphp配置不當而造成的,Nginx版本無關,但在高版本的php中,由於security.limit_extensions的引入,使得該漏洞難以被成功利用。

在已經上傳了惡意1.jpg文件后,訪問/1.jpg/xxx.php,(路徑修復cgi.fix_pathinfo=1后)使得Nginx將其解析為php文件傳給php-cgi程序(傳給路徑位於_SERVER["SCRIPT_FILENAME"],修復去除路徑位於_SERVER["PATH_INFO"]),但cgi程序將其解析為1.jpg並執行。

0x02 環境搭建

使用Win7phpstudy進行搭建復現環境,下載安裝即可,切換版本為

gFLxSJ.png

// Nginx版本
C:\phpStudy\PHPTutorial\nginx>nginx -v
nginx version: nginx/1.11.5

IP192.168.112.139

0x03 復現操作

1)創建1.jpg文件

<?php
	phpinfo(); 
?>

2)網站訪問該文件

http://192.168.112.139/1.jpg

gFLOFU.png

3)修改訪問URI

http://192.168.112.139/1.jpg/xxx.php

gFLXYF.png

成功解析

0x04 漏洞原理分析

Nginx的處理程序和FastCGI處理程序不同導致

Nginx拿到URI/1.jpg/xxx.php后,識別處后綴是.php,認為是php文件,轉交給PHP FastCGI處理程序去處理。PHP FastCGI處理程序識別該URI/1.jpg/xxx.php不存在,按照PHP FastCGI處理程序自己的規則,刪去最后的/xxx.php,又看/1.jpg存在,就將/1.jpg當成要執行的文件,就成功解析。

Nginx傳送給PHP FastCGI處理程序的路徑可以在phpinfo中查看【傳送路徑查看】

gFLoyn.png

cgi.fix_pathinfo為php中的一個選項,默認開啟為1,作用為修理路徑,也就是對路徑URI的處理規則

gFLHe0.png

當php遇到文件路勁為/1.jpg/xxx.php/ss.001時,該文件不存在,會刪除最后的/ss.001,再判斷/1.jpg/xxx.php是否存在,若存在則將/1.jpg/xxx.php當作/1.jpg/xxx.php/ss.001文件,若不存在,則繼續刪除最后一個路徑。刪除的多余路徑會存在PATH_INFO中,在這里為ss.001

gFLTLq.png

0x05 參考

文件解析漏洞總結-Nginx

備注:高版本的情況還沒復現,高版本PHP提供security.limit_extensions參數,不允許將jpg文件當作php解析

IIS在這一點和Nginx是一樣的,同樣存在這一問題

2、目錄遍歷漏洞

0x01 概述

也是類似解析漏洞,是nginx配置問題導致的

0x02 環境搭建

文件解析漏洞環境

0x03 復現操作

1)在網站根目錄下創建一個文件夾test

2)訪問該文件夾

回顯403

gFLbwV.png

3)修改nginx.conf配置文件,訪問即可

autoindex off改為autoindex on

gFLqoT.png

0x04 參考

https://www.cnblogs.com/yuzly/p/11208842.html

3、空字節代碼執行漏洞

0x01 概述

在使用PHP-FastCGI執行php的時候,URL里面在遇到%00空字節時與FastCGI處理不一致,導致可在非php文件中嵌入php代碼,通過訪問url+%00.php來執行其中的php代碼。如:http://local/robots.txt.php會把robots.txt文件當作php來執行。

影響版本:

nginx 0.5.*
nginx 0.6.*
nginx 0.7 <= 0.7.65
nginx 0.8 <= 0.8.37

一般需要配合文件上傳進行

0x02 復現操作

復現環境信息:

ip:192.168.112.140
Nginx:0.7.65
php:5.3.2

1)開啟Nginx

gFORn1.png

2)在網站目錄下添加1.jpg文件

gFOW0x.png

3)訪問該文件

gFOf76.png

4)抓包,添加%00

這里由於該圖非正常,在抓包時最后面添加..,可以讓burpsuite抓到

gFOrhF.png

將請求修改為:

/1.jpg..php

gFO61J.png

5)發包即可

gFOyp4.png

4、CRLF注入漏洞

0x01 概述

漏洞成因:Nginx將傳入的url進行解碼,對其中的%0a%0d替換成換行符,導致后面的數據注入至頭部,造成CRLF注入漏洞

環境:

Nginx
php5.2.17

0x02 復現操作

1)設置

設置https跳轉,這樣就可以接收到url,進而進行處理。在C:\phpStudy\PHPTutorial\nginx\conf\nginx.conf文件中添加下面一行話。

location / { 
	return 302 https://$host$uri;
}

gFOcc9.png

2)構造url,訪問

http://192.168.1121.140/%0ASet-cookie:JSPSESSID%3D3

抓包發送

gFOgXR.png

3)惡意利用

%0D%0A%0D%0A%3cscript%3ealert(123)%3c%2fscript%3e

gFOz4S.png

不過這里沒有彈窗成功,有相關函數進行了過濾

參考:
https://www.leavesongs.com/PENETRATION/bottle-crlf-cve-2016-9964.html
https://www.leavesongs.com/PENETRATION/Sina-CRLF-Injection.html

5、文件名邏輯漏洞(CVE-2013-4547)

繞過訪問限制(目錄跨越)、代碼執行

0x01 概述

這一漏洞的原理是非法字符空格和截止符(\0)會導致Nginx解析URI時的有限狀態機混亂,此漏洞可導致目錄跨越及代碼執行,其影響版本為:nginx 0.8.41 – 1.5.6

環境:

此次實驗在vulhub中復現

0x02 復現操作

1)創建1.jpg 文件,並上傳

抓包,在該文件最后添加一個空格

gFXp9g.png

可以看到上傳成功

gFOxN8.png

2)訪問該文件,burpbuite抓包處理

訪問URL:http://192.168.112.111/1.jpg...php

在burp的hex頁面中將第一個點.改成20,第二個改為00

gFX93Q.png

發送即可

gFXCcj.png

參考:
CVE-2013-4547 Nginx解析漏洞深入利用及分析_91Ri.org
14.Nginx 文件名邏輯漏洞(CVE-2013-4547) - bmjoker - 博客園 (cnblogs.com)

0x03 解析漏洞小結

這篇文章中介紹了三個解析漏洞

文件解析漏洞		   配置問題
%00解析漏洞			nginx 0.5、0.6、<0.7.65、<0.8.37
空格和截止符解析漏洞 	nginx 0.8.41 – 1.5.6

參考:文件解析漏洞總結-Nginx | 若水齋 (werner.wiki)

6、整數溢出漏洞(CVE-2017-7529)

0x01 概述

在 Nginx 的 range filter 中存在整數溢出漏洞,可以通過帶有特殊構造的 range 的 HTTP 頭的惡意請求引發這個整數溢出漏洞,並導致信息泄露。

影響程度:

攻擊成本:低
危害程度:低
影響范圍:Nginx 0.5.6 – 1.13.2

參考:

Nginx 整數溢出(CVE-2017-7529)漏洞分析 (seebug.org)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM