pyexp靶机渗透总结
靶机下载地址:
https://download.vulnhub.com/pyexp/pyexpvm.zip
-
打开靶机.使用nmap扫描出靶机的ip和开放的端口
可以看到,靶机开放了1337端口和3306端口
1337端口是ssh的端口,3306是mysql数据库的端口 -
根据之前做靶机的经验来看,一般是开放80端口,然后根据网站去找到合适的方法getshell,但是这里没有开放80端口,因此只能考虑1337端口和3306端口
那么先对这两个端口进行爆破一波,看是否能爆破出登录的密码由于不知道存在什么用户,因此只能先尝试root用户的爆破
mysql的3306端口爆破成功,得到root账户的密码prettywoman
hydra -l root -P /usr/share/wordlists/rockyou.txt mysql://192.168.11.135
ssh的1337端口爆破失败hydra -l root -P /usr/share/wordlists/rockyou.txt 192.168.11.135 ssh
-
利用密码成功远程登录mysql
-
本来刚开始我在考虑是否可以使用mysql提权
这里只能考虑使用udf提权,其它的mysql提权都不太合适
但是写入文件失败,这里权限是只读 -
既然无法mysql提权,那么就查看mysql里面是否有可用信息
发现data数据库下面fernet表存在有用的信息
这里网上百度了下,fernet是python的一种对称加解密的算法,类似于AES
百度出一个给出使用方法的网址
https://cryptography.io/en/latest/fernet/
先运行以下例子看看from cryptography.fernet import Fernet key = Fernet.generate_key() f = Fernet(key) token = f.encrypt(b"my deep dark secret") token b'...' f.decrypt(token) b'my deep dark secret'
这里python的得先安装cryptography库
pip install cryptography
如果没有这个库,会报错,就像下面这个图一样
大致看懂这个算法的使用了
(1) 需要先导入Fernet的库 , from cryptography.fernet import Fernet
(2) 然后给出一个key,它这里key是用的fernet生成的一般的key, key = Fernet.generate_key(),并且把key给了f变量
(3) 加密的时候需要用的这个key,f.encrypt(b"my deep dark secret") 就是加密的,里面的my deep dark secret是加密的东西,并且加密后赋值给了变量token
(4) 当输入token的时候,就可以看到加密后的值
(5) 加密是使用f.decrypt(token),就会给出要加密的东西,并且格式是b’要加密的内容’根据例子,我们可以仿照来写出我们这个题的解码的python代码
from cryptography.fernet import Fernet key = 'UJ5_V_b-TWKKyzlErA96f-9aEnQEfdjFbRKt8ULjdV0=' f = Fernet(key) f.decrypt(b'gAAAAABfMbX0bqWJTTdHKUYYG9U5Y6JGCpgEiLqmYIVlWB7t8gvsuayfhLOO_cHnJQF1_ibv14si1MbL7Dgt9Odk8mKHAXLhyHZplax0v02MMzh_z_eI7ys=')
成功获得加密的东西
b'lucy:wJ9`"Lemdv9[FEw-'
去掉固定的格式b’’
lucy:wJ9`"Lemdv9[FEw-
获得带这个东西,这个看起来像是密码
-
我们利用mysql查看是否存在lucy
使用load_file函数读取文件
select load_file (‘/etc/passwd’);
发现的确是存在lucy用户可以登录的 -
利用ssh的1337端口登录lucy用户
密码是我们获得的wJ9`"Lemdv9[FEw-
成功登录lucy用户
在lucy用户的目录下,发现第一个flag,但是以往的经验都是需要提权的,root的目录下肯定还存放着flag
-
这里发现了sudo滥用的提权
会以root的身份去运行exp.py脚本
并且脚本是可以输入的,意味着这个脚本可控
那么我们直接输入我们的反弹shell,然后运行即可
这里根据下面这个linux的反弹shell的网站,随便找一个python的反弹shell
https://www.revshells.com/
我这里也是随便试了一个
先开启12345端口监听
然后使用sudo /usr/bin/python2 /opt/exp.py 以root用户执行exp.py
how are you?后面可以继续输入python代码,直接赋值我们反弹shell网上找的python反弹代码
再返回监听的12345端口的终端的时候,发现成功回弹root的shell
提权成功,并且获得了root目录下的flag