2022 长安杯 服务器赛时做题思路备忘 Zodi4c
VC容器密码为:2022.4th.changancup!
我赛时的做题思路和关心老师的讲解基本一致,只是没了上帝视角,本人只开了服务器,所以案件的关联性方面会差点,专注于服务器本身,以及比赛时是如何思考的。
队伍分工为本人服务器,毛同学为PC+基础检材分析,刘同学为手机+apk+exe逆向
做多了比赛题,基本都是换汤不换药
一切恐惧都来源于火力不足,不是拿个轻薄本就能把比赛打好的
检材1
1. 检材1的SHA256值为
考点:基础取证
E48BB2CAE5C1D93BAF572E3646D2ECD26080B70413DC7DC4131F88289F49E34
2. 分析检材1,搭建该服务器的技术员IP地址是多少?用该地址解压检材2
考点:基础取证
172.16.80.100
关键词 搭建 技术员
要搭建应该要远程连进来才能运维,查看登录日志,对检材2进行解压,解压成功,验证前面猜想
3. 检材1中,操作系统发行版本号为
考点:基础取证
[root@localhost app]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
熟悉命令和工具,工具取不出来就搜索用命令
4. 检材1系统中,网卡绑定的静态IP地址为
考点:基础取证
[root@localhost app]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=172.16.80.133
NETMASK=255.255.255.0
GATEWAY=172.16.80.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=a51d1d55-06ed-4c61-9cf8-4a71bc1010b2
DEVICE=ens33
ONBOOT=yes
这条命令很常用,建议全文背诵
好,我们在这里发现这个服务器起的是静态IP,且是172网段的,我在等待发解压密码的时候已经把所有题目看过了,是一个java站,没怎么遇到过,可能会有点麻烦,IP什么配置起来可能不方便,所以这里不选择把static修改成dhcp的方式,而是选择使用修改虚拟网络编辑器的方式来配置,直接配置虚拟机的网段,使服务器的IP落在虚拟网络编辑器配置的虚拟网段内,来实现远程工具的连接。
先配置子网,再配置dhcp范围
点击确定即生效,xshell即可连接
5. 检材1中,网站jar包所存放的目录是(答案为绝对路径,如“/home/honglian/”)
考点:历史记录history
/web/app
查看历史记录,有1000多条,我先从上到下概览了一遍
有很多重复的wget,第一遍是下载安装包没问题,多次重复可能是在更新包,后面可能要注意看是否有备份包需要还原
既然是java站,运行网站就是运行.jar,那么对.jar过滤一遍先,看看到底有几个jar包,做了哪些操作
对history通览一遍后发现有很多启动语句,从下向上找最后一次看起来最多最完整的启动语句,先记录一下,稍后重构的时候应该会用到
此时也可以清晰的看到网站运行都是在/web/app这个目录下的
查看一下该目录
里面共有5个jar包和2个tar包及tar包解压出来的文件夹
本题答案找到了但是对于整个服务器的重构,本题的使命还没有结束
看完这一段语句后继续往下看,明显看到是有启动脚本的,我很兴奋,觉得这个服务器应该就到这里了
一搜心凉半截,没有这个脚本,可能真的需要手动启动这几个服务,手动起就会有一个问题就是启动脚本后面可能需要加许多参数,我们设置不好这个参数
到这里历史记录基本上算是看完了
6. 检材1中,监听7000端口的进程对应文件名为
考点:网站配置文件(这里是java站,多了一个解jar包的过程)、网站结构、关联分析
cloud.jar
程序要想要起一个端口,肯定要声明我要这个端口,所以在某处一定会有记录的,程序员为了程序的可用和可移植性,会把很多经常需要修改的参数放到一起,那就是配置文件。所以在这里要找这个声明端口,最有可能是在网站的配置文件里,其次就是源码system这类系统类文件的某处。
我因为平时看各类取证文章比较多,像安全村、取证实录、龙信的格物刊,也关注服务器取证的各类技术。所以对这类站点还是有一定了解的。
直接将5个包用zip方式解压,对其中文件进行检查,在BOOT-INF\classes处发现application.properties这一配置文件
对这五个配置文件进行检查,发现7000端口在cloud.jar中被声明
通过找端口的过程,我们对网站结构和配置文件的结构有了一定的了解,同时也看到数据库配置等其他信息
这是很关键的一个东西,在这里留一个心眼,后面多少会用到数据库
此时逆向的队友很急,因为没开出检材4 的密码,需要检材3先做,他们说检材3还需要修复数据库,可能有点麻烦,我看了一下检材3,基本是数据库的题,加上配置文件里连接了很多数据库,像mysql,redis,mongodb这些,而且连接的也不是本机,所以很可能检材3是数据库服务器。此时其实同时我已经在使用命令启动检材1里的服务了。有很多报错,这是肯定的,肯定是数据库这些没连好。也是与此同时,做PC队友问我是不是有两个IP,一个是80.128,一个是80.133,我一看对的,80.133正是现在做的这个服务器,80.128是一个配置文件里的数据库连接的服务器,我反问,128是不是数据库,答曰不知道。
133是当前服务器,也存在mysql,尝试使用配置文件中mysql 的账号密码登录本机的mysql,密码错误
我觉得很可能128就是另一个数据库服务器,但是配置文件里又存在很多192开头的数据库链接地址,但是其他配置都是一样的,这让我很疑惑
马上分析另一个服务器检材三,弘联取证软件无法分析,遂直接仿真,取证大师分析,分析成功。
检材三预分析
查看历史命令
发现有docker
mongodb和redis
kafka
zookeeper
一般这种启动命令找最后几条,找长的准没错
攒一波启动命令
查看网络配置,也是静态的,IP为172.16.80.128
[root@localhost b1]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=172.16.80.128
NETMASK=255.255.255.0
GATEWAY=172.16.80.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=a51d1d55-06ed-4c61-9cf8-4a71bc1010b2
DEVICE=ens33
ONBOOT=yes
其他都还是其次,现在我想做的就是验证检材3这个服务器是否就是检材1中jar包连接的数据库服务器,现在已知mysql在docker中,因为本机没有mysql
[root@localhost b1]# mysql
-bash: mysql: command not found
起docker,查看数据库
比赛时比较紧张,这里我直接启动了,没有注意到docker-compose,也能做,不太影响
发现docker里的3306映射到主机的33050端口,端口对上了,进docker,使用jar包配置文件中的密码登录,登陆成功,现在基本确定这个检材3数据库就是为检材1提供服务的
[root@localhost b1]# docker exec -it 8e /bin/bash
root@8eda4cb0b452:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.32-log MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
将所有配置文件中的192.168.60.128改为检材3的IP172.16.80.128
这里我使用7z直接打开jar包
在压缩包中进行编辑
编辑是一律使用替换
编辑结束后ctrl+s保存
直接更新到压缩包内,上传到服务器替换,配置结束
7. 检材1中,网站管理后台页面对应的网络端口为(答案填写阿拉伯数字,如“100”)
考点:证据综合分析
9090
这里手残提交快了,错了。在admin-api.jar中发现声明了6010端口,又有admin字段,但是6010怎么访问都不对,后面检材也都没开,小伙伴也没吭声,头铁直接交了,错了。
7-10题焦灼了一小时左右,在前面将配置文件中的IP都修改了之后,检材三将docker和其他组件手动起了之后,建材一中的组件也逐渐手工起了。
没有头绪,做手机+逆向的小伙伴在手机浏览器上找到了曾登录后台的痕迹和地址。
问题迎刃而解,后来发现这些命令不应该直接用nohup去后台执行的,这杨我们就会少看到很多输出,报错和提示了,不用nohup其实对程序是没有影响的,这也是我这次比武很大的收获,后来手工起其实/web/app/admin才是真实的admin目录,admin-api.jar只是admin-api,
[root@localhost admin]# ls
build dist favicon.ico index.html LICENSE MemberManage.vue node_modules nohup.out package.json package-lock.json README-EN.md README.md src
[root@localhost admin]# npm run dev
> ztuo_admins@1.2.3 dev /web/app/admin
> webpack-dev-server --content-base ./ --open --inline --hot --compress --config build/webpack.dev.config.js
Happy[happybabel]: Version: 4.0.1. Threads: 2 (shared pool)
Project is running at http://0.0.0.0:9090/
webpack output is served from /dist/
Content not from webpack is served from /web/app/admin
Unable to open browser. If you are running in a headless environment, please do not use the open flag.
Happy[happybabel]: All set; signaling webpack to proceed.
Hash: 8e42b699de52a18648f5
Version: webpack 3.12.0
Time: 8079ms
Asset Size Chunks Chunk Names
0.chunk.js.map 28.6 kB 0 [emitted]
2c2ae068be3b089e0a5b59abb1831550.eot 121 kB [emitted]
05acfdb568b3df49ad31355b19495d4a.woff 67.9 kB [emitted]
621bd386841f74e0053cb8e67f8a0604.svg 334 kB [emitted] [big]
0.chunk.js 14.2 kB 0 [emitted]
1.chunk.js 97.1 kB 1 [emitted]
2.chunk.js 96.7 kB 2 [emitted]
3.chunk.js 37.4 kB 3, 35 [emitted]
4.chunk.js 17.8 kB 4 [emitted]
5.chunk.js 53.1 kB 5 [emitted]
6.chunk.js 18.5 kB 6 [emitted]
7.chunk.js 22.6 kB 7 [emitted]
8.chunk.js 22.1 kB 8 [emitted]
9.chunk.js 24.8 kB 9 [emitted]
10.chunk.js 9.39 kB 10 [emitted]
11.chunk.js 19.1 kB 11 [emitted]
12.chunk.js 13.6 kB 12 [emitted]
13.chunk.js 11.6 kB 13 [emitted]
14.chunk.js 10.6 kB 14 [emitted]
15.chunk.js 11 kB 15 [emitted]
16.chunk.js 14.7 kB 16 [emitted]
17.chunk.js 8.31 kB 17 [emitted]
18.chunk.js 42.8 kB 18 [emitted]
19.chunk.js 15.4 kB 19 [emitted]
20.chunk.js 9.5 kB 20 [emitted]
21.chunk.js 13 kB 21 [emitted]
22.chunk.js 19.5 kB 22 [emitted]
23.chunk.js 9.6 kB 23 [emitted]
24.chunk.js 15.5 kB 24 [emitted]
25.chunk.js 9.01 kB 25 [emitted]
26.chunk.js 16.5 kB 26 [emitted]
27.chunk.js 18.3 kB 27 [emitted]
28.chunk.js 16.5 kB 28 [emitted]
29.chunk.js 10.6 kB 29 [emitted]
30.chunk.js 14.2 kB 30 [emitted]
31.chunk.js 29 kB 31 [emitted]
32.chunk.js 26.3 kB 32 [emitted]
33.chunk.js 10.2 kB 33 [emitted]
34.chunk.js 16.8 kB 34 [emitted]
35.chunk.js 15.2 kB 35 [emitted]
36.chunk.js 20.9 kB 36 [emitted]
37.chunk.js 11.7 kB 37 [emitted]
38.chunk.js 13.3 kB 38 [emitted]
39.chunk.js 16.4 kB 39 [emitted]
40.chunk.js 10.1 kB 40 [emitted]
41.chunk.js 10.7 kB 41 [emitted]
42.chunk.js 13.3 kB 42 [emitted]
43.chunk.js 13.9 kB 43 [emitted]
44.chunk.js 10.3 kB 44 [emitted]
45.chunk.js 21.7 kB 45 [emitted]
46.chunk.js 7.76 kB 46 [emitted]
47.chunk.js 7.29 kB 47 [emitted]
48.chunk.js 8.44 kB 48 [emitted]
49.chunk.js 15.4 kB 49 [emitted]
50.chunk.js 26.4 kB 50 [emitted]
51.chunk.js 11.4 kB 51 [emitted]
52.chunk.js 15.4 kB 52 [emitted]
main.js 4.84 MB 53 [emitted] [big] main
vender-exten.js 299 kB 54 [emitted] [big] vender-exten
vender-base.js 2.24 MB 55 [emitted] [big] vender-base
main.css 227 kB 53 [emitted] main
24712f6c47821394fba7942fbb52c3b2.ttf 189 kB [emitted]
1.chunk.js.map 169 kB 1 [emitted]
2.chunk.js.map 167 kB 2 [emitted]
3.chunk.js.map 69.4 kB 3, 35 [emitted]
4.chunk.js.map 30 kB 4 [emitted]
5.chunk.js.map 77 kB 5 [emitted]
6.chunk.js.map 28.2 kB 6 [emitted]
7.chunk.js.map 48.9 kB 7 [emitted]
8.chunk.js.map 51 kB 8 [emitted]
9.chunk.js.map 60.3 kB 9 [emitted]
10.chunk.js.map 16.6 kB 10 [emitted]
11.chunk.js.map 33.9 kB 11 [emitted]
12.chunk.js.map 28.8 kB 12 [emitted]
13.chunk.js.map 21.1 kB 13 [emitted]
14.chunk.js.map 19.4 kB 14 [emitted]
15.chunk.js.map 21.9 kB 15 [emitted]
16.chunk.js.map 31.3 kB 16 [emitted]
17.chunk.js.map 13.7 kB 17 [emitted]
18.chunk.js.map 121 kB 18 [emitted]
19.chunk.js.map 38.7 kB 19 [emitted]
20.chunk.js.map 19 kB 20 [emitted]
21.chunk.js.map 26.5 kB 21 [emitted]
22.chunk.js.map 50.6 kB 22 [emitted]
23.chunk.js.map 26 kB 23 [emitted]
24.chunk.js.map 36.4 kB 24 [emitted]
25.chunk.js.map 18.6 kB 25 [emitted]
26.chunk.js.map 30.6 kB 26 [emitted]
27.chunk.js.map 40.1 kB 27 [emitted]
28.chunk.js.map 28.6 kB 28 [emitted]
29.chunk.js.map 26.3 kB 29 [emitted]
30.chunk.js.map 29 kB 30 [emitted]
31.chunk.js.map 66.4 kB 31 [emitted]
32.chunk.js.map 69.3 kB 32 [emitted]
33.chunk.js.map 17.8 kB 33 [emitted]
34.chunk.js.map 41.7 kB 34 [emitted]
35.chunk.js.map 35 kB 35 [emitted]
36.chunk.js.map 44.6 kB 36 [emitted]
37.chunk.js.map 23.9 kB 37 [emitted]
38.chunk.js.map 29.6 kB 38 [emitted]
39.chunk.js.map 38.4 kB 39 [emitted]
40.chunk.js.map 19.5 kB 40 [emitted]
41.chunk.js.map 20.7 kB 41 [emitted]
42.chunk.js.map 29 kB 42 [emitted]
43.chunk.js.map 27 kB 43 [emitted]
44.chunk.js.map 20.2 kB 44 [emitted]
45.chunk.js.map 46.8 kB 45 [emitted]
46.chunk.js.map 13.1 kB 46 [emitted]
47.chunk.js.map 12.2 kB 47 [emitted]
48.chunk.js.map 13.7 kB 48 [emitted]
49.chunk.js.map 25.7 kB 49 [emitted]
50.chunk.js.map 62.2 kB 50 [emitted]
51.chunk.js.map 24 kB 51 [emitted]
52.chunk.js.map 31.3 kB 52 [emitted]
main.js.map 5.97 MB 53 [emitted] main
main.css.map 85 bytes 53 [emitted] main
vender-exten.js.map 361 kB 54 [emitted] vender-exten
vender-base.js.map 2.67 MB 55 [emitted] vender-base
favicon.ico 2.93 kB [emitted]
../index.html 708 bytes [emitted]
g.css 212 kB [emitted]
r.css 212 kB [emitted]
y.css 212 kB [emitted]
[5] ./node_modules/js-cookie/src/js.cookie.js 3.89 kB {54} [built]
[18] (webpack)-dev-server/client?http://0.0.0.0:9090 7.93 kB {55} [built]
[20] (webpack)/hot/log.js 1.04 kB {55} [built]
[21] (webpack)/hot/dev-server.js 1.61 kB {55} [built]
[22] ./node_modules/iview/dist/iview.js 1.48 MB {55} [built]
[35] ./node_modules/qs/lib/index.js 211 bytes {53} [built]
[36] ./src/store/index.js 757 bytes {53} [built]
[39] (webpack)/hot/emitter.js 77 bytes {55} [built]
[71] multi (webpack)-dev-server/client?http://0.0.0.0:9090 webpack/hot/dev-server @/main 52 bytes {53} [built]
[77] ./node_modules/strip-ansi/index.js 161 bytes {55} [built]
[90] ./src/main.js 4.12 kB {53} [built]
[189] multi (webpack)-dev-server/client?http://0.0.0.0:9090 webpack/hot/dev-server @/vendors/vendors.base.js 52 bytes {55} [built]
[190] ./src/vendors/vendors.base.js 431 bytes {55} [built]
[191] multi (webpack)-dev-server/client?http://0.0.0.0:9090 webpack/hot/dev-server @/vendors/vendors.exten.js 52 bytes {54} [built]
[192] ./src/vendors/vendors.exten.js 590 bytes {54} [built]
+ 510 hidden modules
Child html-webpack-plugin for "../index.html":
1 asset
[0] ./node_modules/html-webpack-plugin/lib/loader.js!./src/template/index.ejs 1.3 kB {0} [built]
[1] ./node_modules/lodash/lodash.js 540 kB {0} [built]
[2] (webpack)/buildin/global.js 509 bytes {0} [built]
[3] (webpack)/buildin/module.js 517 bytes {0} [built]
Child extract-text-webpack-plugin node_modules/extract-text-webpack-plugin/dist node_modules/css-loader/index.js?minimize!node_modules/autoprefixer-loader/index.js!node_modules/iview/dist/styles/iview.css:
Asset Size Chunks Chunk Names
2c2ae068be3b089e0a5b59abb1831550.eot 121 kB [emitted]
24712f6c47821394fba7942fbb52c3b2.ttf 189 kB [emitted]
05acfdb568b3df49ad31355b19495d4a.woff 67.9 kB [emitted]
621bd386841f74e0053cb8e67f8a0604.svg 334 kB [emitted] [big]
[0] ./node_modules/iview/dist/styles/fonts/ionicons.eot?v=2.0.0 82 bytes {0} [built]
[1] ./node_modules/css-loader?minimize!./node_modules/autoprefixer-loader!./node_modules/iview/dist/styles/iview.css 230 kB {0} [built]
[2] ./node_modules/css-loader/lib/url/escape.js 448 bytes {0} [built]
[3] ./node_modules/css-loader/lib/css-base.js 2.26 kB {0} [built]
[4] ./node_modules/iview/dist/styles/fonts/ionicons.ttf?v=2.0.0 82 bytes {0} [built]
[5] ./node_modules/iview/dist/styles/fonts/ionicons.woff?v=2.0.0 83 bytes {0} [built]
[6] ./node_modules/iview/dist/styles/fonts/ionicons.svg?v=2.0.0 82 bytes {0} [built]
webpack: Compiled successfully.
访问9090端口,访问到后台
故后台端口为9090
8. 检材1中,网站前台页面里给出的APK的下载地址是(答案格式如下:“https://www.forensix.cn/abc/def”)
考点:网站重构
https://pan.forensix.cn/f/c45ca511c7f2469090ad
或
https://pan.forensix.cn/f/c45ca511c7f2469090ad/?dl=1
这里也是,开始很久没找到入口在哪里,重启了一遍,不nohup之后在对各个服务进行启动,在/web/app/web下启动npm run dev
就能成功启动网站
[root@localhost web]# npm run dev
> bitrade@1.0.0 dev /web/app/web
> webpack-dev-server --inline --progress --config build/webpack.dev.conf.js
10% building modules 2/3 modules 1 active ...ode_modules/webpack/hot/dev-server.jsUnable to open brow 22% building modules 104/124 modules 20 active ...late&index=0!/web/app/web/src/App.vue{ parser: "babylon" } is deprecated; we now treat it as { parser: "babel" }. 95% emitting
DONE Compiled successfully in 6257ms 11:39:04 AM
I Your application is running here: http://0.0.0.0:3000
端口为3000
访问网站主页,在右上角发现apk下载,有俩二维码
扫描发现两个是相同的
访问,下载到一个apk,交给逆向的同学。
9. 检材1中,网站管理后台页面调用的用户表(admin)里的密码字段加密方式为?
考点:网站重构,源码分析,后台密码绕过
此处纠结半个小时,因为没找到网站后台数据库
做pc的同学问我是不是有个b1数据库,我说是的,此时我还没有意识到问题的严重性,纠结好久。
接下来是我纠结的过程,也是做题时一部分绕弯的思路,不想看可以跳过
因为实在找不到数据库在哪,检材3一干二净
检材1数据库没有密码,但是取证软件显示里面也是没有东西的
那只有可能在检材2里,分析一下检材2,其中有两个b1表,大小还一样,盲猜一样
加上虽有此时做到做过了wsl,我一直认为b1表会存在wsl的mysql里,仿真起来
发现有俩不同ubuntu,问队友队友也说不清,两个打开一看,一个打开直接进,一个打开刚好进初始化向导,那肯定时直接进那个是对的
使用检材1里的数据库密码,提示的是这个错误
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)
想可能权限不够?
su root了一下 猜密码 猜到123456竟然猜对了
同样报错,不是权限问题,搜索了一下,感觉有点复杂,此时时间还剩1.5个小时左右,后台还没起来,头皮发麻,不想调错了。
使用取证软件的数据库工具将所有表导出
新建一个b1数据库
尝试将sql语句导回到这个数据库中,一直失败
随便看看计算机里的文件,在D盘根目录找到了这个数据库文件,还有两个服务器的启动脚本,这个服务器对我来说已经结束了。
#!/bin/bash
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"kil
#!/bin/bash
echo "Starting App: Cloud "
nohup java -jar /web/app/cloud.jar &
sleep 20s
echo "Starting App: market "
nohup java -jar /web/app/market.jar &
sleep 60s
echo "Starting App:exchange "
nohup java -jar /web/app/exchange.jar &
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"kil
但是怎么将这个b1这个数据库文件夹里的文件导入到docker对应的文件目录中
我想到docker cp 这样的方法
只需定位到容器内这个b1文件夹的路径即可,加上刚才我们已经新建了一个b1数据库,我们直接搜索
[root@localhost b1]# find / -name b1
/data/mysql/db/b1
发现数据卷映射到本地了,大喜,虽然没有起docker-compose,但是找到了这个数据卷位置,我们到这个目录中,删除我们建的b1数据库,将检材2中的数据库文件导出,导入到这个数据卷目录当中,此时刷新一下数据库,这个数据表跃然出现在我们面前
查看其密码,发现长得倒也像md5,但是不是很肯定,用户名确是root
没办法了,只好反编译
将整个adimn-api.jar拖到jadx中
随便尝试登录,查看输出报错
在jadx中定位报错所在位置
是在cn.ztuo.bitrade.controller.system.EmployeeController的当中
查看登录逻辑
加密核心逻辑为String password2 = Encrypt.MD5(password + this.md5Key);
那么this.md5Key就是他的盐,Encrypt.MD5就是他的加密方法
双击Encrypt.MD5技巧怒查看,应该就是进行一个md5的操作,我java也不太好
esc返回,看一下盐
双击md5Key跳转
发现似乎是获取一个${bdtop.system.md5.key}类似全局变量的东西,要从别的地方填充到此处的,这个东西很眼熟啊,之前找配置文件,那五个配置文件反反复复看了十几遍,这个就在配置文件最底下
10. 分析检材1,网站管理后台登录密码加密算法中所使用的盐值是
考点:网站重构,源码分析,后台密码绕过
XehGyeyrVgOV4P8Uf70REVpIw3iVNwNs
所以盐值就是XehGyeyrVgOV4P8Uf70REVpIw3iVNwNs
后台密码绕过
他这里没有问下去了,其实这里就应该把网站后台密码绕过然后进去看,因为我不太擅长java,看代码又眼花,所以一般我不自己构造加密字符串,这里是反编译的源码,又不好修改,报错输出这条路又走不通,这里我想到mysql的general log,我随便输个密码,网站肯定会构造好密钥串发到数据库去查的,看数据库的查询日志不就能直接看到构造好的密钥串了吗?
遂至mysql 进行一个general log一把梭操作
很巧general log一直开着,这也给我一个思路,后面那些删除的、修改的只要那时候general log也开着,就一定能找到记录。
show variables like 'general_log';
查看一下general log的位置
show variables like 'general_log_file';
不做其他任何操作,我使用密码123尝试登录,登陆失败
查看general log的最后几行
发现一个查询语句
2022-10-29T16:31:12.546422Z 12 Query select admin0_.id as id1_0_, admin0_.area_code as area_cod2_0_, admin0_.avatar as avatar3_0_, admin0_.department_id as departm18_0_, admin0_.email as email4_0_, admin0_.enable as enable5_0_, admin0_.google_date as google_d6_0_, admin0_.google_key as google_k7_0_, admin0_.google_state as google_s8_0_, admin0_.last_login_ip as last_log9_0_, admin0_.last_login_time as last_lo10_0_, admin0_.mobile_phone as mobile_11_0_, admin0_.password as passwor12_0_, admin0_.qq as qq13_0_, admin0_.real_name as real_na14_0_, admin0_.role_id as role_id15_0_, admin0_.status as status16_0_, admin0_.username as usernam17_0_ from admin admin0_ where admin0_.username='root' and admin0_.password='f5fedc7f85ba5d6beec93944b8b474a6'
f5fedc7f85ba5d6beec93944b8b474a6就是构造好的密钥串,替换到数据库中,再使用123登录,即可登陆成功
至此网站重构结束。
检材3
20. 检材3中,监听33050端口的程序名(program name)为
docker-proxy
考点:基础取证
[root@localhost b1]# netstat -anptl
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:22 0.0.0.0:* LISTEN 967/sshd
tcp 0 0 0.0.0.0:33050 0.0.0.0:* LISTEN 6420/docker-proxy
tcp 0 0 172.16.80.128:22 172.16.80.1:59992 ESTABLISHED 1354/sshd: root@not
tcp 0 36 172.16.80.128:22 172.16.80.1:59975 ESTABLISHED 1349/sshd: root@pts
tcp 0 0 172.16.80.128:22 172.16.80.1:61167 ESTABLISHED 2434/sshd: root@not
tcp6 0 0 :::9092 :::* LISTEN 1678/java
tcp6 0 0 :::2181 :::* LISTEN 1392/java
tcp6 0 0 :::33255 :::* LISTEN 1392/java
tcp6 0 0 :::39374 :::* LISTEN 1678/java
tcp6 0 0 :::22 :::* LISTEN 967/sshd
tcp6 0 0 :::33050 :::* LISTEN 6426/docker-proxy
tcp6 0 0 ::1:36472 ::1:2181 ESTABLISHED 1678/java
tcp6 0 0 ::1:2181 ::1:36472 ESTABLISHED 1392/java
21. 除MySQL外,该网站还依赖以下哪种数据库
考点:历史记录,配置文件
在前面讲的历史记录中
也可以在检材1配置文件里找到,检材1需要连接什么,检材3就需要有什么
22. 检材3中,MySQL数据库root账号的密码是
考点:配置文件
shhl7001
在前面检材1各配置文件中有
23. 检材3中,MySQL数据库在容器内部的数据目录为
考点:mysql,配置文件
/var/lib/mysql
进docker mysql内部 查看一下配置文件
[root@localhost b1]# docker exec -it 8e /bin/bash
root@8eda4cb0b452:/# whereis mysql
mysql: /usr/bin/mysql /usr/lib/mysql /etc/mysql /usr/share/mysql
root@8eda4cb0b452:/# cd /etc/mysql
root@8eda4cb0b452:/etc/mysql# sl
bash: sl: command not found
root@8eda4cb0b452:/etc/mysql# ls
conf.d my.cnf my.cnf.fallback mysql.cnf mysql.conf.d
root@8eda4cb0b452:/etc/mysql# cat mysql.cnf
[mysqld]
user=mysql
general_log=1
default-storage-engine=INNODB
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
root@8eda4cb0b452:/etc/mysql# cd mysql.conf.d/
root@8eda4cb0b452:/etc/mysql/mysql.conf.d# ls
mysqld.cnf
root@8eda4cb0b452:/etc/mysql/mysql.conf.d# cat mysqld.cnf
# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation. The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# The MySQL Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
#log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
root@8eda4cb0b452:/etc/mysql/mysql.conf.d#
24. 涉案网站调用的MySQL数据库名为
b1
考点:配置文件,综合分析
检材1中的配置文件连接的是b1数据库
手工逐条启动检材1中的网站时,报错提示缺少数据库b1
检材2中发现b1数据库
25. 勒索者在数据库中修改了多少个用户的手机号?(答案填写阿拉伯数字,如“15”)
3
考点:综合分析,sql查询,日志,general log
解析见下题
26. 勒索者在数据库中删除的用户数量为(答案填写阿拉伯数字,如“15”)
28
考点:综合分析,sql查询,日志,general log
查看general log
做过这类题目,更新一般直接找update,删除一般直接找delete没错的,如果找不到还要考虑其他情况。
搜索update
共找到3条记录
2022-10-19T03:20:39.001499Z 13 Query UPDATE `b1`.`member` SET `mobile_phone` = '13638991111' WHERE `id` = 9
2022-10-19T03:20:39.009042Z 13 Query SELECT * FROM `b1`.`member` WHERE `id` = 9
2022-10-19T03:20:39.158260Z 10 Query SET autocommit=0
2022-10-19T03:20:39.159384Z 10 Query select lockpositi0_.id as id1_36_, lockpositi0_.amount as amount2_36_, lockpositi0_.coin_id as coin_id10_36_, lockpositi0_.create_time as create_t3_36_, lockpositi0_.member_id as member_i4_36_, lockpositi0_.member_name as member_n5_36_, lockpositi0_.reason as reason6_36_, lockpositi0_.status as status7_36_, lockpositi0_.unlock_time as unlock_t8_36_, lockpositi0_.wallet_id as wallet_i9_36_ from lock_position_record lockpositi0_ where lockpositi0_.status=0 and lockpositi0_.unlock_time<'2022-10-18 23:20:39.158'
2022-10-19T03:20:39.159820Z 10 Query commit
2022-10-19T03:20:39.160034Z 10 Query SET autocommit=1
2022-10-19T03:20:41.844626Z 13 Init DB b1
2022-10-19T03:20:41.851525Z 13 Query UPDATE `b1`.`member` SET `mobile_phone` = '13282992222' WHERE `id` = 10
2022-10-19T03:20:41.857329Z 13 Query SELECT * FROM `b1`.`member` WHERE `id` = 10
2022-10-19T03:20:44.177888Z 13 Init DB b1
2022-10-19T03:20:44.184953Z 13 Query UPDATE `b1`.`member` SET `mobile_phone` = '13636993333' WHERE `id` = 11
每次登录会更新登录时间IP等,这些其他修改可以直接忽略
搜索delete
可以查到按顺序删除了28条记录
2022-10-19T03:16:36.987428Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 973
2022-10-19T03:16:37.011565Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 974
2022-10-19T03:16:37.018915Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 975
2022-10-19T03:16:37.024719Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 976
2022-10-19T03:16:37.030514Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 977
2022-10-19T03:16:37.036525Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 978
2022-10-19T03:16:37.043063Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 979
2022-10-19T03:16:37.050115Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 980
2022-10-19T03:16:37.058208Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 981
2022-10-19T03:16:37.063910Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 982
2022-10-19T03:16:37.069479Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 983
2022-10-19T03:16:37.075433Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 984
2022-10-19T03:16:37.081648Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 985
2022-10-19T03:16:37.090573Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 986
2022-10-19T03:16:37.097442Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 987
2022-10-19T03:16:37.109309Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 988
2022-10-19T03:16:37.116375Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 989
2022-10-19T03:16:37.122000Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 990
2022-10-19T03:16:37.128186Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 991
2022-10-19T03:16:37.134416Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 992
2022-10-19T03:16:37.141373Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 993
2022-10-19T03:16:37.147063Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 994
2022-10-19T03:16:37.153631Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 995
2022-10-19T03:16:37.161562Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 996
2022-10-19T03:16:37.168149Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 997
2022-10-19T03:16:37.175782Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 998
2022-10-19T03:16:37.183277Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 999
2022-10-19T03:16:37.191203Z 13 Query DELETE FROM `b1`.`member` WHERE `id` = 1000
而且都是对member表操作,其他表一点都没动
27. 还原被破坏的数据库,分析除技术员以外,还有哪个IP地址登录过管理后台网站?用该地址解压检材4
172.16.80.197
考点:网站重构,数据分析
在后台可以看到最原始的操作IP都是172.16.80.100
后来变成了172.16.80.197服务器登录也都是172.16.80.100
可以考虑172.16.80.197才是外来的,尝试解压压缩包,解压成功
28. 还原全部被删改数据,用户id为500的注册会员的HT币钱包地址为
cee631121c2ec9232f3a2f028ad5c89b
考点:网站重构,数据分析
在后台查找id为500的用户
不能直接查id
到member表里看一下
查个电话,搜一下电话
查看操作找到地址cee631121c2ec9232f3a2f028ad5c89b
29. 还原全部被删改数据,共有多少名用户的会员等级为’LV3’(答案填写阿拉伯数字,如“15”)
164
考点:sql语句,数据分析
这题比武的时候写错了,没加删除的数据
这里讲比武的时候的思路,并按比武时的思路解下去,也能出,更好的方法是将删除的数据导回到数据库中
会员管理处有等级
对数据库进行分析,在member表处也能找到类似等级的
member_grade_id
为了确认,查两个用户对应一下
是对应的,那么进行一个计数操作
158条是错的,我们比武时就做到这一步,接下来是按照我的思路继续做下去
之前删掉的记录没有包含其中,比武的时候没有这么清晰,没敢把全部导回去,其实先导回去再分析出来的结果就都是对的
我们查看删除记录
找前面insert这些id的记录
查找member_grade_id对应的字段,是在第二个中国后的第二个字段,特征为0, 3, 0
对这一块删除的数据进行检索
找到6个
故最终答案为158+6=164个,很可惜做错了
30. 还原全部被删改数据,哪些用户ID没有充值记录(答案填写阿拉伯数字,多个ID以逗号分隔,如“15,16,17”)
318,989
考点:数据分析,sql语句
这里对表进行分析
先将member表中所有未删除的的id复制到excel中
再将删除的id补充进去,发现刚好有序的1000个整
对财务管理进行分析
发现充值表为member_transaction,member_transaction没有进行删除和修改,放心使用
查看id=1和id=2的用户进行确认
将member_transaction表里的所有有的id(即充值过的id)导出
去重后留下998个顺序不重复的值
与左边序号一一对比,目力审计得318和989没有充值记录
31. 还原全部被删改数据,2022年10月17日总计产生多少笔交易记录?(答案填写阿拉伯数字,如“15”)
1000
考点:数据分析,sql语句
后台找不到这个日期的交易记录,但刚才看member_transaction表的时候,第一页有看到
查询计数一下
32. 还原全部被删改数据,该网站中充值的USDT总额为(答案填写阿拉伯数字,如“15”)
408228
考点:数据分析,sql语句
除了member表,其他表都没有被删除和修改,“还原全部被删改数据”这句话在这里没有作用,继续对member_transaction的充值进行分析
发现充值对应这里flag字段
flag=0则为充值
对所有充值的usdt金额进行统计
网站部分到此结束
因为我专心做服务器,可能其他与手机检材的与pc的联动会少一点。这就是团体赛,需要配合,单刷的话整个脉络会更清楚。这是我比赛的时候的思路,现在听完关老师的讲解,对这套题有了更全面的理解,我的思路与关老师的思路基本一致,由于没有上帝视角,走了点弯路。
检材1和3错了两题,一题是头铁交太快了,后台都没进就交了,一题是忘了算删掉的数据了,但是比赛的时候sql语句手滑打错了,错的答案都算错了。队友一个IP手滑打错了加上一个废题。这么比起来我还是有很大提高空间的。文章来源:https://www.toymoban.com/news/detail-430709.html
参赛体验不错,仍要继续不断学习。文章来源地址https://www.toymoban.com/news/detail-430709.html
到了这里,关于2022第四届长安杯电子取证竞赛 服务器赛时思路&题解 Zodi4c的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!