[JMCTF 2021]GoOSS
题目给了源码,我们下载下来看
是一个go语言的题目,index.php可以读取文件
我们来看一下go文件,大致分为了两块,upload和vul,并且可以上传一个json请求
upload没法利用,我们来看vul
它首先严格限制了url必须是以http://127.0.0.1:1234/
开头的ssrf
然后我们在fileMidderware里面发现如果满足fi是文件夹且c.Request.URL.String()不以”/“结尾的话,那么就会重定向到c.Request.URL.String()+”/“的页面,实质上是进行了一次请求,而c.Request.URL.String()是我们可控的,所以这里应该存在ssrf。但是直接在浏览器中构造,发现无论怎么构造最后解析的路由都是”/“,无法利用,于是又把目光放到之前的/vul路由上。
那我们思路就清晰了,利用302跳转到本地的80端口的index.php,进而读取flag
参考
1 | https://www.secpulse.com/archives/102918.html |
我们需要使用双斜杠告诉浏览器这是绝对路径
比如:http://127.0.0.1:8000//baidu.com/ 会跳转到baidu.com里
payload
1 | {"url":http://127.0.0.1:1234//vps/index.php/..} |
这里的..是为了让url不以/结尾
vps/indexphp
1 | <?php |