Web400
(注:研究出来的时候题目已经关了,自己本地尝试的,所有没有css和js很丑,这个其实重要)
最开始拿到题目:http://118.190.113.111:10080/index.php?act=user的时候挺没有头绪的
一开始以为是ssrf摸内网,又发现好像有上传,各种尝试302打进去探测端口,发现都挺奇怪的,一直没get到考点
后来发现有一个redirect.php,会重定向
于是在photo url处尝试了一下
http://118.190.113.111:10080/redirect.php?redirect=file:///etc/passwd
但是这里会被waf拦下,只允许通过.jpg和.png的结尾,于是尝试00截断
如下:
发现可以成功读取到内容
于是拿下源码进行分析(以下为本地测试,vps就打码了,毕竟是队友的)
在login.php里
如果是本地访问的话,token才会为1
在common.php中
可以发现debug的值为1会返回http头数据
于是猜想利用redirect.php请问,伪造本地登录
http://118.190.113.111:10080/redirect.php?redirect=login.php?username=1&password=1.jpg
这样是不是就可以达到本地登录的目的了呢?
(注:这里有个小坑,需要2次url编码,所以payload如下)
注意到源码中debug为1的时候会返回http头数据,跟进$result去处
可见http头被写入了图片中,于是我们去访问刚才生成的图片
可以看到我们需要的http头数据,里面就有我们需要的phpsession
将自己的phpsessionid改成这个
可见我们已经用haozi登录成功了
看upload.php
发现过滤并没有过滤.inc,并且token为1才可以上传
而我们注意到
这里的spl_autoload_register();
我们测试一下
发现是可以解析.inc的
于是想到上次一个.inc文件
自己写了一个上传
再写了一个ls.inc1
2
3
system('ls');
于是上传
发现上传成功
注:记得改一下Content-Type否则过不了waf
此时利用
我们可以构造序列化
然后利用include参数包含路径
于是综合payload如下:
命令执行成功。
总结一下:
- 利用重定向+00截断读源码
- 利用重定向+debug获得本地登录的phpsessionid
- 上传.inc结尾的恶意文件
- 利用spl_autoload_register()的文件包含+cookie反序列化执行命令
最后感谢我的队友的执念于心的指点~