以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/