|
3 | 3 | import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; |
4 | 4 | import java.io.ByteArrayInputStream; |
5 | 5 | import java.io.ByteArrayOutputStream; |
| 6 | +import java.util.ArrayList; |
6 | 7 | import java.util.Iterator; |
| 8 | +import java.util.List; |
7 | 9 | import java.util.Map; |
| 10 | +import java.util.regex.Matcher; |
| 11 | +import java.util.regex.Pattern; |
8 | 12 | import net.rebeyond.behinder.utils.ReplacingInputStream; |
9 | 13 | import net.rebeyond.behinder.utils.Utils; |
10 | 14 | import org.objectweb.asm.ClassAdapter; |
@@ -62,7 +66,7 @@ public static byte[] getParamedAssembly(String clsName, Map params) throws Excep |
62 | 66 | String paramValue; |
63 | 67 | for(Iterator var6 = params.keySet().iterator(); var6.hasNext(); paramsStr = paramsStr + paramName + ":" + paramValue + ",") { |
64 | 68 | paramName = (String)var6.next(); |
65 | | - paramValue = Base64.encode(((String)params.get(paramName)).toString().getBytes()); |
| 69 | + paramValue = Base64.encode(((String)params.get(paramName)).toString().getBytes("UTF-8")); |
66 | 70 | } |
67 | 71 |
|
68 | 72 | paramsStr = paramsStr.substring(0, paramsStr.length() - 1); |
@@ -117,19 +121,42 @@ public static byte[] getParamedPhp(String clsName, Map params) throws Exception |
117 | 121 | bis.close(); |
118 | 122 | code.append(bos.toString()); |
119 | 123 | String paraList = ""; |
| 124 | + Iterator var9 = getPhpParams(code.toString()).iterator(); |
120 | 125 |
|
121 | | - String paraName; |
122 | | - for(Iterator var9 = params.keySet().iterator(); var9.hasNext(); paraList = paraList + ",$" + paraName) { |
123 | | - paraName = (String)var9.next(); |
124 | | - String paraValue = (String)params.get(paraName); |
125 | | - code.append(String.format("$%s=\"%s\";", paraName, paraValue)); |
| 126 | + while(var9.hasNext()) { |
| 127 | + String paraName = (String)var9.next(); |
| 128 | + if (params.keySet().contains(paraName)) { |
| 129 | + String paraValue = (String)params.get(paraName); |
| 130 | + code.append(String.format("$%s=\"%s\";", paraName, paraValue)); |
| 131 | + paraList = paraList + ",$" + paraName; |
| 132 | + } else { |
| 133 | + code.append(String.format("$%s=\"%s\";", paraName, "")); |
| 134 | + paraList = paraList + ",$" + paraName; |
| 135 | + } |
126 | 136 | } |
127 | 137 |
|
128 | 138 | paraList = paraList.replaceFirst(",", ""); |
129 | 139 | code.append("\r\nmain(" + paraList + ");"); |
130 | 140 | return code.toString().getBytes(); |
131 | 141 | } |
132 | 142 |
|
| 143 | + public static List getPhpParams(String phpPayload) { |
| 144 | + List paramList = new ArrayList(); |
| 145 | + Pattern mainPattern = Pattern.compile("main\\s*\\([^\\)]*\\)"); |
| 146 | + Matcher mainMatch = mainPattern.matcher(phpPayload); |
| 147 | + if (mainMatch.find()) { |
| 148 | + String mainStr = mainMatch.group(0); |
| 149 | + Pattern paramPattern = Pattern.compile("\\$([a-zA-Z]*)"); |
| 150 | + Matcher paramMatch = paramPattern.matcher(mainStr); |
| 151 | + |
| 152 | + while(paramMatch.find()) { |
| 153 | + paramList.add(paramMatch.group(1)); |
| 154 | + } |
| 155 | + } |
| 156 | + |
| 157 | + return paramList; |
| 158 | + } |
| 159 | + |
133 | 160 | public static byte[] getParamedAsp(String clsName, Map params) throws Exception { |
134 | 161 | String basePath = "net/rebeyond/behinder/payload/asp/"; |
135 | 162 | String payloadPath = basePath + clsName + ".asp"; |
|
0 commit comments