Web400
最開始拿到題目: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
<?php
system(‘ls’);
?>
于是上傳

發現上傳成功
注:記得改一下Content-Type否則過不了waf
此時利用

我們可以構造序列化

然后利用include參數包含路徑
于是綜合payload如下:

命令執行成功。
總結一下:
1.利用重定向+00截斷讀源碼
2.利用重定向+debug獲得本地登錄的phpsessionid
3.上傳.inc結尾的惡意文件
4.利用spl_autoload_register()的文件包含+cookie反序列化執行命令
2017湖湘杯-Writeup