Sky's blog

湖湘杯复赛web400

Word count: 620 / Reading time: 2 min
2017/11/27 Share

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.inc

1
2
3
<?php 
system('ls');
?>

于是上传

发现上传成功
注:记得改一下Content-Type否则过不了waf
此时利用

我们可以构造序列化

然后利用include参数包含路径
于是综合payload如下:

命令执行成功。
总结一下:

  1. 利用重定向+00截断读源码
  2. 利用重定向+debug获得本地登录的phpsessionid
  3. 上传.inc结尾的恶意文件
  4. 利用spl_autoload_register()的文件包含+cookie反序列化执行命令

最后感谢我的队友的执念于心的指点~

CATALOG
  1. 1. Web400