25盘古石初赛服务器复盘
写在前面
unraid真的抽象,必须要usb简直了,比赛的时候刚开始半小时就找到了本篇wp的做法,但是觉得绝对不可能就放弃了。最后半小时才重拾了这种方法并发现了其可行性,结合一位师傅的wp完善了我的做法。笔者的做法是——先去unraid官网下载usb引导,并把系统打入usb,接着仿真两个镜像,去webui上给自己的usb注册30天试用,不同于别的师傅把原镜像(server1)打入u盘和直接以ehci挂载系统盘的方法。最后能坚持用自己的做法做完也很不容易,希望大家能关注笔者的csdn
笔者的这个做法有个局限性,在注册完以后(网站都重构完了)蓝屏了,结果回来u盘的授权掉了,迫不得已换了一个u盘,所以做的时候不要直接重启物理机、不要切换u盘、不要蓝屏,有可能授权会掉。由于授权绑定u盘的guid,所以-29.9¥ QAQ
nmd,笔者刚写完这篇wp,就有师傅把不需要u盘的方法写完了,气急败坏了。目前笔者看到的有三种方法重构,一个是笔者自己摸索着做完了才发现的好用方法,写在wp的最前面;二是另一个师傅的方法,采用的是UEFI+QEMU KVM进行仿真(把启动盘以EHCI/XHCI总线(USB)的方式挂载),由于笔者没有复现成功,就没有写在这里;三是笔者自己摸索的方法,和第一种方法比起来实在麻烦,大伙看个乐呵就行,大家复现还是直接用方法一
仿真
首先还是先谈谈仿真的问题
如果直接server1、server2一起仿真,会无限循环,表示找不到/无法挂载
比赛的时候在网上看到,创建unraid虚拟机就必须用u盘作为启动盘,所以直接镜像仿真会失败
所以比赛时我从网上下载了一个unraid的usb flash creator,把自己的一个u盘做成启动盘再仿真。是成功仿真了,但是去mount server2会提示没有密钥,治标不治本
所以我企图直接在server1中找到keyfile,然后写入我的usb,但是失败了,因为根本找不到(实际上在pc里。。还一点提示没有,真逆天)
方法一(好方法,不用u盘,手动仿真)
用Arsenal Image Mounter挂载server2.001
脱机刚刚挂载的磁盘
diskpart
list disk
select disk X (X为要脱机的磁盘编号)
offline disk
exit
使用qemu-img将server1.001转成vmdk文件
qemu-img convert -f raw -O vmdk server1.001 output.vmdk
管理员运行vmware 新建虚拟机,自定义,稍后安装操作系统,版本选其他linux 6.x 内核64位,命名,cpu内存稍微大一点,网络模式都行,磁盘类型选IDE
推荐,使用物理磁盘,选刚刚脱机的硬盘
启动前,先改引导模式
把刚刚做的server1的镜像拖到虚拟机目录
最后修改虚拟机启动配置.vmx(关掉虚拟机的选项卡才能修改),以usb的形式把output.vmdk作为系统引导盘,添加即可
ehci:0.present = "TRUE"
ehci:0.deviceType = "disk"
ehci:0.fileName = "output.vmdk"
ehci:0.readonly = "FALSE"
firmware = "efi"
这样做的好处就在:
-
不用u盘,不用担心稳定性
-
不用授权,直接用的就是pro.key
发现没root密码,这里有两种方式能看
一种在smbpasswd里,其中的密码专供 Windows 文件共享登录。但是MD5解出来刚好也是对的
还有就是传统的在/etc/shadow里,用hashcat或者john爆破
然后配网(要根据network.cfg来配置,不再赘述)连webui
数据盘的keyfile在pc里,要用xways爆搜才能找到
emZz5Yqg5a+GcG9vbOWvhumSpeaWh+S7tg==
磁盘阵列启动+数据盘解密成功
然后把web和sql的docker开了就能开始重构网站了
方法二(要u盘,软件仿真,自己尝试并做成的方法)
事实上,直接从unraid官方下载启动的镜像可以做
注意版本7.0.1,前面登录的时候有提示版本
要进u盘执行以下make_bootable.bat,然后把u盘连到虚拟机
直接用弘连再仿server1,server2
ip改不改成原来的56网段都行,毕竟在u盘导入系统那里我选的是dhcp(后面我的ip变了是因为我换了一张网卡,无伤大雅)
这里有点问题,见后文
ssh开一下
比赛的时候我是自己去unraid的官网弄了一个然后发现里头没有给server2的解密密钥,而且当时直接mount他也会提示你被加密且没有密钥文件来解密。当时就觉得很奇怪,因为把server1挂载到火眼里,就是没有keyfile的,就此陷入了死局
“转机”是当时在pc找到了unraid一个压缩包,但是里头也没有keyfile,这下彻底死局了
后面看别的师傅的wp才知道用xways爆搜能搜到。。
弘连全局搜索是没有的
总之现在写进去
想要解server2,一定要启动磁盘阵列,就要usb有授权,把原来的pro.key复制进去
但是不行,因为和原来的不是同一个u盘,unraid的授权是绑定u盘的guid的,所以要申请一个
如果像上面没有可以申请的界面
先插拔一次u盘,然后重新把u盘(比如我是sdd)挂载到/boot,然后刷新网页
sudo mount /dev/sdd1 /boot
如果报错可能要先同步时间
ntpdate pool.ntp.org
以下几步为我的部分做题记录,有问题,请不要照抄
好像上面写的密钥文件没被识别到,手动输入,开始磁盘阵列
终于成功了
进到挂载点,docker镜像也有了,www目录也有了
webui里设置docker路径,最上面改成yes
这样docker也有了
按着上面的步骤做,发现两个docker的映射目录在/mnt/disk1,而不是现在数据盘挂载的目录/mnt/cache
我尝试重新启动了两个docker并修改了映射的目录(web和database),但是最后在进网站后台的时候连接不到数据库(即使我修改了config.php,把db_host修改到了新的docker)最最要命的是,后台网站的源文件被混淆了,不知道它的连接数据库的配置是什么(这里试错又花了两三个小时)
所以这一次我尝试直接通过zfs pool挂载到disk1
先把数据盘解密
cryptsetup luksOpen /dev/sdc1 sdc1_crypt
输入前面得到的base64字符串emZz5Yqg5a+GcG9vbOWvhumSpeaWh+S7tg==
这样就算解密成功了
zfs list
发现no datasets available
zpool import
发现有了pool: disk1
导入disk1
zpool import disk1
这时候再看就发现在/mnt/disk1下好了
如果zfs import是cache
zpool export cache
zpool import cache disk1
但是不磁盘阵列没有docker,还是要开磁盘阵列(在main里点下方的start,因为我们注册了试用30天,可以开启磁盘阵列)
然后前面的docker的配置改回来
最后把web和database的docker开一下
docker start feec
docker start 182
重构网站
找后台看源码,template下有个单独的网站
先随便试一个
搜一下,发现好像没有
找到前端的登陆页面,点一下action,发现跳转失败,应该是源文件写了混淆
有点抽象,真的不会解
navicat连一下数据库,密码在config.php里
看着像md5,但又没办法直接md5(123456),毕竟源文件看不到,不知道有没有什么嵌套的加密或者加了盐值
还真给我解出来了,那应该就是md5(password),密码:www.dkewl.com
但是事实上还是投机取巧了,因为不解混淆实际上是不知道加密方式的,刚好这个md5能解而已,但凡加盐或者嵌套别的加密方式都不行
本人实力实在有限,所以需要各位大佬集思广益,拿下源代码(我真的做不动了QAQ)
重构完成开始做题!
1.分析服务器检材,找出服务器系统启动盘的GUID?
2.找出服务器网关IP?
3.找出服务器数据盘的文件系统格式?
4.找出服务器数据盘的解密密钥文件名?
5.找出服务器密码?
前文提过,hashcat直接爆shadow
6.找出服务器版本号?
7.找出服务器内Docker虚拟硬盘位置?
8.找出服务器启动盘的启动标识?
这个看别的师傅wp写的,多少有点抽象了
9.找出服务器内共有多少个容器镜像?
10.找出服务器内网站服务器所用数据库运行的容器名?
11.找出服务器内虚拟币容器对外暴露的端口号?
12.找出投资理财网站的域名?
13.找出投资理财网站内连接数据库的密码?
映射到disk1的www目录
thinkphp框架,无非就是database.php或者config.php
14.找出投资理财网站后台访问地址?
template目录下有个单独的网站
15.找出投资理财网站会员等级设置存放在那个数据库表内?
感觉应该是这个
也和描述对的上
16.找出投资理财网站提现成功的金额?
没有体现成功的相关数据,docker映射了两个sql文件,再导入一下
新建查询
SELECT SUM(money) FROM cash WHERE status = 1;
17.找出投资理财网站内用户王欣的银行卡号?
18.找出投资理财网站用户的最低提现金额?
19.给出存放投资理财用户表内clock为0表示用户处于那种状态?
20.找出投资理财网站内通过支付宝支付充值状态为未支付的金额?
SELECT SUM(money) FROM recharge WHERE type = "支付宝扫码" AND status = 0;