以nginx為例子,nginx現在企業都用,測試版本1.12.0
example1:
nginx.conf:
location /flag/ {
deny all;
return 403;
}
location /baidu/ {
proxy_pass http://baidu.com;
}
location /qq {
proxy_pass http://qq.com;
}
重新開機生效:
測試通路:
http://119.45.227.86:8080/flag/

直接403攔截:
輸入不存在目錄:
仍然顯示攔截,遇到這種情況,最好的解決方法就是不要遞歸爆破這個目錄了,大機率無用功,不要浪費時間在這裡.
想要通路目錄,需要代理轉發到tomcat容器,那麼可以使用..;/
例如這樣:
example2:
location /baidu/ {
proxy_pass http://baidu.com;
}
location /qq {
proxy_pass http://qq.com;
}
location /flag/read {
proxy_pass http://119.45.227.86/readfile/test2.php;
}
通路http://119.45.227.86:8080/flag/
通路不存在的目錄:
這種情況就值得目錄爆破,目錄爆破極有可能存在東西:
假設已經被入侵,存在某個漏洞,但是暫時無法從代碼層修複,那麼需要緩解措施?
緩解措施兩個保證(1)保證部分使用者能通路 (2)杜絕外部ip通路
修改nginx.conf:
location /baidu/ {
proxy_pass http://baidu.com;
}
location /qq {
proxy_pass http://qq.com;
}
location /flag/read {
proxy_pass http://119.45.227.86/readfile/test2.php;
allow 外部信任ip;
deny all;
}
burp挂上外部代理通路:
使用信任ip通路,取消外部代理:
被信任的ip被通路到
怎麼判斷是否是nginx:
(1)安裝插件:
(2)通過http請求辨別符:
(3)全部隐藏了怎麼辦?
通過網頁跳轉等手段:
nginx大多數基于正規表達式:
example:
location /baidu/ {
proxy_pass http://baidu.com;
}
location /qq {
proxy_pass http://qq.com;
}
location /flag/read {
proxy_pass http://119.45.227.86/readfile/test2.php;
allow 222.72.216.6;
deny all;
}
通路/qq:
qq後面跟任意字元串:
如果仍然可以跳轉,說明是nginx,因為他基于規則比對到了qq,是以跳轉到了qq.com
其實nginx限制的手段有很多,有基于ip的,也有基于浏覽器的,需要額外關注,本人簡單記錄下,挺有意思的呵呵,對極端漏洞挖掘情況下,nginx的防護繞過,是有可行性的,有機會聊聊實戰案例
參考文章:https://www.acunetix.com/blog/articles/a-fresh-look-on-reverse-proxy-related-attacks/