前言
之前一直没有写博客的习惯,想着还是写一些吧,算是加强一下印象。时隔一年,再次回顾一下去年长安杯的题目,单就服务器和计算机部分来说,较去年同时期是有显著的进步的,但真正把这道题吃透,还远说不上。做题的过程中还是太糙了,低级错误犯了不少,最后参考了一下几位大佬的博客,才算把这篇wp勉强完成。不过时隔一年再去看同一道题,眼界广了,收获也就不一样了
案情简介
某地警方接到受害人报案称其在某虚拟币交易网站遭遇诈骗,该 网站号称使用“USTD 币”购买所谓的“HT 币”,受害人充值后不但“HT 币”无法提现、交易,而且手机还被恶意软件锁定勒索。警方根据受害 人提供的虚拟币交易网站调取了对应的服务器镜像并对案件展开侦查。
容器密码:2022.4th.changancup!
先说思路
现在回看整套题的思路其实比较清晰了——jar包类型的网站重构,检材一存放网站源代码,检材三存放docker配置的数据库,pc检材提供线索。
整体思路是依照pc检材中的建站笔记,依次启动前后端服务,网站就可以顺利重构。
检材一
先看history,以下截取一部分
可以看到检材一中进行了大量的npm run dev
和./start_web.sh
但是start_web.sh已经被删除了,不过可以推测网站的jar包启动顺序为
java -jar /web/app/market.jar
java -jar /web/app/exchange.jar
java -jar /web/app/admin-api.jar
java -jar /web/app/ucenter-api.jar
npm
npm run dev是用于搭建脚手架环境的命令,在使用之前需要先配置项目的package.json中
的script项
以/web/app/web下的package.json为例
"name": "bitrade",
"version": "1.0.0",
"description": "A Vue.js project",
"author": "bear <220806216@qq.com>",
"private": true,
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"unit": "jest --config test/unit/jest.conf.js --coverage",
"e2e": "node test/e2e/runner.js",
"test": "npm run unit && npm run e2e",
"lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs",
"build": "node build/build.js"
},
可以看到是一个vue项目,百度一下
DevServer是Webpack 3开放的一个实验功能,使用webpack-dev-middleware中间件,
提供热更新的开发服务器,旨在帮助开发者在开发阶段快速进行环境搭建。
–inline选项会为入口页面添加“热加载”功能,即代码改变后重新加载页面
–progress 查看 webpack 的编译进度
–config 配置文件的路径
一个快速搭建环境的命令,配置文件的路径在build/webpack.dev.conf.js
jar包
这几个jar包对应的是网站的不同功能,看名字猜也算比较好猜的
反编译admin-api.jar
可以看到jar包的一些配置信息,数据库的链接地址是172.16.80.128:33050
,数据库的账号密码;剩下的暂时也没有其他信息了
检材三
还是照例先看history
看到有mysql、mongoDB、redis、zookeeper、docker、kafka
[root@localhost /]# mysql -uroot -p
-bash: mysql: command not found
本机没有MySQL服务,那应该是在docker里面
service docker start
docker ps
docker exec -it mysql57 /bin/bash
先进一波docker看一下,成功登录mysql但是发现b1数据库被删除了,结合在pc中发现的b1数据库表结构文件,应该是要还原
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
历史命令看到有docker-compose
,追一下
root@localhost /]# cat /data/mysql/docker-compose.yml
version: '3'
services:
mysql:
image: "mysql:5.7.32"
restart: always
container_name: mysql57
environment:
MYSQL_ROOT_PASSWORD: shhl7001
TZ: Asia/Shanghai
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M
ports:
- 33050:3306
volumes:
- /data/mysql/db:/var/lib/mysql
- /data/mysql/conf/my.cnf:/etc/mysql/my.cnf
service
定义不同的引用服务,这里只有MySQL
可以看到MySQL
的版本是5.7.32
,docker的33050
端口映射到了主机的3306
端口,volumes的映射来自于/data/mysql/db
和/data/mysql/conf/my.cnf
到这一步就很清晰了,直接把表结构文件拖进去还原即可
当然这步其实有其他的解法
在自己做的时候,一开始没有注意到docker-compoese
,直接把表结构文件down下来,扔到火眼数据库工具跑出sql
文件再导入新建数据库也是可以的
网站重构
到这一步,前期的准备工作就基本完成了,接下来就是网站的重构
pc里有建站笔记,判断后端是jar包、检材三的数据库等服务以及/web/app/admin
路径下的npm
pc里还发现了start_web.sh和start.sh两个脚本,查看脚本内容发现是梭哈服务的
接下来依次启动服务就可以了,但是不知道为什么验证码部分就是不显示,费解
做题部分
1. 检材1的SHA256值为
9E48BB2CAE5C1D93BAF572E3646D2ECD26080B70413DC7DC4131F88289F49E34
2. 分析检材1,搭建该服务器的技术员IP地址是多少?用该地址解压检材2
172.16.80.100
last命令跑一下
[root@localhost /]# last
root pts/0 192.168.6.1 Tue Oct 17 21:58 still logged in
root tty1 Tue Oct 17 21:58 still logged in
reboot system boot 3.10.0-862.el7.x Tue Oct 17 21:58 - 00:06 (02:08)
root pts/0 192.168.6.1 Tue Oct 17 21:16 - crash (00:42)
root tty1 Tue Oct 17 21:11 - 21:58 (00:46)
reboot system boot 3.10.0-862.el7.x Tue Oct 17 21:11 - 00:06 (02:55)
reboot system boot 3.10.0-862.el7.x Tue Oct 17 21:10 - 00:06 (02:55)
root pts/1 172.16.80.100 Wed Oct 19 23:09 - 23:31 (00:21)
root pts/0 172.16.80.100 Wed Oct 19 22:48 - 23:25 (00:37)
root pts/0 172.16.80.100 Wed Oct 19 02:38 - 04:56 (02:18)
root pts/0 172.16.80.100 Wed Oct 19 00:18 - 00:23 (00:05)
root pts/0 172.16.80.100 Tue Oct 18 04:45 - 04:52 (00:07)
reboot system boot 3.10.0-862.el7.x Tue Oct 18 04:44 - 00:06 (364+19:21)
root pts/0 172.16.80.100 Tue Oct 18 03:56 - crash (00:48)
reboot system boot 3.10.0-862.el7.x Tue Oct 18 03:55 - 00:06 (364+20:10)
root pts/0 172.16.80.100 Tue Oct 18 03:30 - 03:55 (00:24)
reboot system boot 3.10.0-862.el7.x Tue Oct 18 03:15 - 03:55 (00:40)
3. 检材1中,操作系统发行版本号为
CentOS 7.5.1804
[root@localhost /]# uname -a
Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
4. 检材1系统中,网卡绑定的静态IP地址为
172.16.80.133
5. 检材1中,网站jar包所存放的目录是(答案为绝对路径,如“/home/honglian/”)
/web/app
6. 检材1中,监听7000端口的进程对应文件名为
cloud.jar
这道题在网站后端服务起了之后可以看,当然反编译jar包也行
[root@localhost /]# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9090 0.0.0.0:* LISTEN 1825/node
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 968/sshd
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 1826/node
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1213/master
tcp 0 0 192.168.6.135:9090 192.168.6.1:14935 ESTABLISHED 1825/node
tcp 0 36 192.168.6.135:22 192.168.6.1:13770 ESTABLISHED 1471/sshd: root@pts
tcp 0 0 192.168.6.135:22 192.168.6.1:2421 ESTABLISHED 2118/sshd: root@not
tcp6 0 0 :::3306 :::* LISTEN 1135/mysqld
tcp6 0 0 :::22 :::* LISTEN 968/sshd
tcp6 0 0 :::7000 :::* LISTEN 1577/java
tcp6 0 0 ::1:25 :::* LISTEN 1213/master
tcp6 0 0 :::6010 :::* LISTEN 1699/java
tcp6 0 0 127.0.0.1:36174 127.0.0.1:7000 TIME_WAIT -
tcp6 0 0 172.16.80.133:32880 172.16.80.128:33050 ESTABLISHED 1699/java
tcp6 0 0 127.0.0.1:36100 127.0.0.1:7000 TIME_WAIT -
lsof -p 7000
##这里网络不知道怎么lsof yum不来了,不过应该是可以的
这里推荐一下Zodi4c佬的思路:把所有jar解压下来以后爆搜7000端口
7. 检材1中,网站管理后台页面对应的网络端口为(答案填写阿拉伯数字,如“100”)
9090
发现问题了。。
源代码直接请求的是服务器原ip地址,而因为我是采用直接更改dhcp的方式分配ip,网站无法与数据库进行通信
而解决方法是使用虚拟网络编辑器分配子网并设置dhcp范围,然后再虚拟机中保持静态IP,这样既不会更改虚拟机ip也可以和虚拟机通讯
自我反省,基础知识不够扎实
不过这其实也算一个习惯问题,类似架构的集群采用的通信方式很有可能是和此类似的,以后配网需要保持好习惯
解决
8. 检材1中,网站前台页面里给出的APK的下载地址是(答案格式如下:“https://www.forensix.cn/abc/def”)
https://pan.forensix.cn/f/c45ca511c7f2469090ad/?dl=1
9. 检材1中,网站管理后台页面调用的用户表(admin)里的密码字段加密方式为?
md5
发个包看下请求,搜一下关键字
10. 分析检材1,网站管理后台登录密码加密算法中所使用的盐值是
XehGyeyrVgOV4P8Uf70REVpIw3iVNwNs
password = Encrypt.MD5(password + this.md5Key);
this.md5Key就是salt,我们直接追一下
@Value("${bdtop.system.md5.key}")
private String md5Key;
貌似是一个全局变量,application.properties
里面记录了
bdtop.system.md5.key=XehGyeyrVgOV4P8Uf70REVpIw3iVNwNs
application.properties
Spring Boot工程的配置文件
具体参考https://www.cnblogs.com/lenve/p/10947517.html
https://blog.csdn.net/yhahaha_/article/details/88568121
11. 检材2中,windows账户Web King的登录密码是
135790
12. 检材2中,除检材1以外,还远程连接过哪个IP地址?并用该地址解压检材3
172.16.80.128
火眼ssh连接记录
13. 检材2中,powershell中输入的最后一条命令是
ipconfig
powershell可以直接查看历史命令
命令Get-history
或者直接↑查看
14. 检材2中,下载的涉案网站源代码文件名为
ZTuoExchange_framework-master.zip
结合三个检材可以分析出来
15. 检材2中,网站管理后台root账号的密码为
root
chrome保存的密码可以直接看到
16. 检材2中,技术员使用的WSL子系统发行版本是(答案格式如下:windows 10.1)
Ubuntu 20.04
命令wsl -l
查看
17. 检材2中,运行的数据库服务版本号是(答案格式如下:10.1)
8.0.30
这道题我没注意审题,以为是检材三的数据库
18. 上述数据库debian-sys-maint用户的初始密码是
ZdQfi7vaXjHZs75M
查看/etc/mysql/debian.cnf查看内容,可以看到有这个mysql连接用户: [client] host = localhost user = debian-sys-maint password =
19.检材3服务器root账号的密码是
h123456
ssh历史命令里记录了
20. 检材3中,监听33050端口的程序名(program name)为
docker-proxy
docker起来以后netstat -anpt
[root@localhost app]# netstat -anpt | grep 33050
tcp6 0 0 172.16.80.133:55322 172.16.80.128:33050 ESTABLISHED 2632/java
21. 除MySQL外,该网站还依赖以下哪种数据库
MongoDB、redis
22. 检材3中,MySQL数据库root账号的密码是
shhl7001
同样是反编译以后配置文件查看spring.datasource.password=shhl7001
23. 检材3中,MySQL数据库在容器内部的数据目录为
/var/lib/mysql
划重点是容器内部,所以是volunms
的位置
docker inspect mysql57
查看,得到结果是
"Volumes": {
"/etc/mysql/my.cnf": {},
"/var/lib/mysql": {}
},
24. 涉案网站调用的MySQL数据库名为
b1
可以看到spring.datasource.url=jdbc:mysql://172.16.80.128:33050/b1?characterEncoding=utf-8
里访问的是b1数据库
25. 勒索者在数据库中修改了多少个用户的手机号?(答案填写阿拉伯数字,如“15”)
3
/data/msyql/db下有日志文件,查询一下
26. 勒索者在数据库中删除的用户数量为(答案填写阿拉伯数字,如“15”)
28
27. 还原被破坏的数据库,分析除技术员以外,还有哪个IP地址登录过管理后台网站?用该地址解压检材4
172.16.80.197
admin_access.log可以直接看,验证一下就行
28. 还原全部被删改数据,用户id为500的注册会员的HT币钱包地址为
cee631121c2ec9232f3a2f028ad5c89b
29. 还原全部被删改数据,共有多少名用户的会员等级为’LV3’(答案填写阿拉伯数字,如“15”)
158
网站起起来以后对照一下数据库,可以发现数据库的member_grade_id
就是会员等级
sql查询一下
30. 还原全部被删改数据,哪些用户ID没有充值记录(答案填写阿拉伯数字,多个ID以逗号分隔,如“15,16,17”)
518
31. 还原全部被删改数据,2022年10月17日总计产生多少笔交易记录?(答案填写阿拉伯数字,如“15”)
1000
32. 还原全部被删改数据,该网站中充值的USDT总额为(答案填写阿拉伯数字,如“15”)
408228