https://www.freebuf.com/articles/web/149761.html
nginx作為下載文件服務器
server {
listen 8082; #端口
server_name localhost; #服務名
root /dev/shm/update; #顯示的根索引目錄
autoindex on; #開啟索引功能
autoindex_exact_size off; # 關閉計算文件確切大?。▎挝籦ytes),只顯示大概大?。▎挝籯b、mb、gb)
autoindex_localtime on; # 顯示本機時間而非 GMT 時間
}
或者
server {
listen 8082; #端口
server_name localhost; #服務名
location / {
root /dev/shm/update; #顯示的根索引目錄
autoindex on; #開啟索引功能
autoindex_exact_size off; # 關閉計算文件確切大小(單位bytes),只顯示大概大小(單位kb、mb、gb)
autoindex_localtime on; # 顯示本機時間而非 GMT 時間
}
}
nginx目錄遍歷漏洞
http://ip:8082/ ,顯示/dev/shm/update/目錄下所有文件,說明存在漏洞
解決:
autoindex off,重啟nginx后
http://ip:8082/ 就不顯示目錄下的文件
ngnix 漏洞:任意文件讀取
這個常見于Nginx做反向代理的情況,動態(tài)的部分被proxy_pass傳遞給后端端口,而靜態(tài)文件需要Nginx來處理。假設靜態(tài)文件存儲在/home/目錄下,而該目錄在url中名字為files,那么就需要用alias設置目錄的別名:
location /files {
alias /home/;
}
此時訪問http://127.0.0.1:8080/files/1.txt,就可以獲取/home/1.txt 文件。
我們發(fā)現(xiàn),url上/files沒有加后綴/ ,而alias設置的/home/是有后綴/的,這個 /就導致我們可以從/home/目錄穿越到他的上層目錄,造成任意文件下載:
http://127.0.0.1:8080/files../etc/hosts
修復方法:不寫成上面那種有漏洞的形式,比如可以寫成結(jié)尾都帶著/字符。
location /files/ {
alias /home/;
}
0x01$uri導致的CRLF注入
在實際業(yè)務場景中經(jīng)常需要在nginx中配置路徑跳轉(zhuǎn)。
比如用戶訪問http://x.com 自動跳轉(zhuǎn)到https://x.com 或者是訪問 http://x.com 自動跳轉(zhuǎn)到 http://www.x.com
在跳轉(zhuǎn)的過程中,我們需要保證用戶訪問的頁面不變,所以需要從Nginx獲取用戶請求的文件路徑,有三個可以表示uri的變量:
$uri
$document_uri
$request_uri
document_uri表示的是解碼以后的請求路徑,不帶參數(shù),$request_uri表示的是完整的URI(沒有解碼),如果在nginx.conf中配置了下列的代碼:
location /test {
return 302 http://$host:81$uri;
}
因為$uri是解碼以后的請求路徑,所以可能就會包含換行符,也就造成了一個CRLF注入漏洞
該漏洞除了發(fā)生在 return后面,也可能發(fā)生在rewrite、add_header、p roxy_set_header、proxy_pass之后。
修復方式:將document_uri改為 $request_uri。
alias/root 區(qū)別使用
https://blog.csdn.net/zhuchunyan_aijia/article/details/53033050