本次长安杯赛题背景为时下热门”裸聊诈骗“案例,主要涉及 apk 分析、服务器取证、PC取证、手机取证 四个大方向,其中 apk 分析与服务器取证为本次比赛的重点和难点。
2021年4月25日,上午8点左右,警方接到被害人金某报案,声称自己被敲诈数万元;经询问,昨日金某被嫌疑人诱导裸聊, 下载了某“裸聊”软件,导致自己的通讯录和裸聊视频被嫌疑人获取,对其进行敲诈,最终金某不堪重负,选择了报警;警 方从金某提供的本人手机中,定向采集到了该“裸聊”软件的安装包--zhibo.apk(检材一),请各位回答下列问题:(题目 中需要通过分析出来的答案对检材二三四五解压,解压密码为IP的情况,需要在密码后增加-CAB2021,例: 192.168.100.100-CAB2021)
上题图中,或在源码的 AndroidManifest.xml
文件中也能找到
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="16" android:versionName="2.1.2" android:compileSdkVersion="29" android:compileSdkVersionCodename="10" package="plus.H5B8E45D3" platformBuildVersionCode="16" platformBuildVersionName="2.1.2">
唯一应用标识就是给apk打包的专业厂商对应的调证值,方便公安取证时溯源找到对应厂商,每个厂商对应唯一
见36题:手机通讯录、手机号码、验证码、GPS定位信息
第6、7题都可以用抓包的方式解决,此处采用Fiddler,方法可参考该文章
注:这里我用的是【逍遥模拟器】,用别的模拟器可能会有抓不到包的问题
抓包也可以直接用弘联的雷电APP智能分析,内置了抓包功能
见第6题图
第8题和第9题都需要分析源码,涉及到apk逆向分析
本次比赛中涉及的apk为框架编写,源码相关内容都在资源文件中
index.html
文件中写了apk首页的源码,在最下面有一段script脚本,由 sojson.v4 进行加密,在线网站解密即可得到明文源码,在源码中就可以找到本题答案
源码中也有一段代码涉及到手机权限,其中就有提到需要开启定位权限,照应了第5题答案
第8题得到的源码中开头有提到
www.honglian7001.com/api/uploads/apisms
此处使用的 ajax
方法就是一种用来与服务器交互进行部分数据更新的方法,对于指定发送请求的地址除了可以使用 url
名称来设置外,还可以像上述图片中使用的方法设置,即
xxx.ajax([url], {xxx})
xxx.ajax({url: 'aaa.bb.ccc'})
第10题和第11题涉及到apk分析中的hook方法,技术性难度较大,当然在解题过程中我们使用雷电APP智能分析,其中内置了Frida和相应功能的hook脚本
见上题图
题外话,10和11这两个题也算是面向工具推广出的题了,大家做个乐呵就好了(
经过掌握的APK程序后台服务器回连地址,警方成功调取该服务器的镜像,请使用第7题的答案对检材二进行解压进行分析,并回答下列问题:
需要注意的是,对于原始硬盘的hash值计算,我们直接计算得到的e01镜像,裸的e01镜像和zip类似,是对原始文件进行压缩处理打包后的结果,我们需要先将其使用取证软件挂载,再进行计算
其实我们也能够发现,对e01镜像挂载前后的大小是不一样的,上图我们可以看到设备实际大小是20G,但如果我们直接查看e01文件的属性信息,发现它只有3.44G,所以自然hash计算结果不同
仿真后利用 last
命令查询,题目背景中写到被害人2021年4月25日上午8点左右进行报案,那案发时间就要在25之前
last命令用于显示用户最近登录信息。 单独执行last命令,它会读取 /var/log/wtmp 的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来。
在做后续题的时候可以发现这个服务器其实起到的作用就是把一些请求根据一定的条件转发到其他的服务器上,而在服务器集群中这种功能用专业的语言来描述就是负载均衡
什么是负载均衡? 负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
我们在仿真后可以登录root用户查看历史命令,也可以直接用取证工具分析镜像,也能看到历史命令,在历史命令中可以看到这样一条
仿真后在虚拟机里可以直接访问到这个目录,在 /opt/honglianjingsai
下有个 README.txt
修改服务器端口在目录chronusNode/const.js下修改参数server_config/port,默认为8800,即访问路径http://localhost:8800即可
修改反向代理目标地址在目录chronusNode/controller/ADProxy.js下修改函数service即可
里面提到了和端口有关的信息,打开查看可以发现端口改成了80
/* 服务器基本配置 */
server_config : {
host : '0.0.0.0',
port : 80,
safe_port : 8443,
static_path : 'static',
static_host : '127.0.0.1'
},
这个题在历史命令里也能找到
看一下 app.js 这个文件也可以发现里面涉及到了开启服务、关闭服务、运行服务的代码
在 ADProxy.js 这个文件中有提到
定义了三个服务器的代理,同时也就是第19题的答案
这里可以看到它在处理的时候把ip地址根据 .
来分割,得到的结果长度为4就是正常的ip地址,类似python的列表,列表中的第2位就是实际的第3段
上题图中有,小于50时对应 _proxy50
,即 192.168.110.111
见17题
第20题和第21题主要考察对于日志的审计,在 /opt/honglianjingsai/chronusNode/logs
这个路径下保存了了服务器的日志,根据对于案发时间的判断,我们可以确定是在4.24这一天发生的(这里具体案发时间可以等后续查看手机,在手机取证时一些聊天软件的聊天记录中会有很准确的时间信息)
在这个日志文件里出现次数最多的几个ip地址分别是
192.168.110.203
192.168.110.252
192.168.110.113
其实通过排除法也能很快得到本题的答案,203是登录服务器的ip地址,113是请求转发的目标地址,那252就是本题的答案
如果不想通过排除法来做出此题,那更准确的时间判断就可以参考手机的聊天记录,再和日志中的时间相对照,也可以得到答案
具体分析见上一题
通过对检材二的分析,警方进一步掌握并落地到了目标服务器地址,通过对服务器进行证据固定,得到服务器镜像--检材三,请使用第21题答案对检材三进行解密并分析,回答下列问题:
对于此部分题目,我们在解密容器后可以得到三个web服务器的镜像(也验证了第19题),但是需要注意此部分题目的要求,需要我们分析目标服务器,也就意味着我们需要先判断出这三个服务器到底哪一个对应着 192.168.110.113,在找到后才能进一步解题
对于每台服务器对应ip的判断,我们通过仿真或者取证分析,查看历史命令可以发现
实际上这个文件就是 CentOS 7 的网卡配置文件,其中 IPADDR
就是我们要找的ip地址,查看发现 web3 对应着目标服务器
这道题并不能直接通过检材三得到答案,需要依靠检材四的PC镜像,在仿真后可以看到桌面有xshell,可以直接通过一些工具查看xshell保存的密码,或者用取证软件也能解析出来
24题开始有几道题是涉及到宝塔面板相关知识和一些宝塔源码分析的题,在web3仿真起来后其实可以直接在虚拟机里看,但是由于他本身汉字编码的一些关系,会导致大量的乱码,看起来也很不舒服,所以我采用xshell连接的方式来进行
我们先讲一下如何用xshell连接到web3服务器的虚拟机,由于本身web3的网络配置是静态配置,并且题目架设的ip地址与实际我们做题环境不符,所以我们需要先修改web3的网络配置(web3我已经配好了,所以下面我拿web1演示)
首先我们需要知道服务器的网卡配置文件在哪,也就是我们part2一开始提到的
/etc/sysconfig/network-scripts/ifcfg-ens33
在VMware的虚拟网络编辑器中开启DHCP,我们先修改设置使得我们主机分配给虚拟机的C段符合题目背景,然后关闭DHCP
在虚拟机中执行 ifconfig
命令,我们可以发现默认网卡名称为 ens-160,但我们实际在 network-script 目录下并不能发现这个网卡配置文件,所以我们需要修改配置文件(如果你的网卡配置不是160,那就根据自己的实际情况进行修改)
首先查看当前网卡的UUID:uuidgen ens-160
先记住这个uuid,然后我们修改原配置文件的名称:mv ifcfg-ens33 ifcfg-ens160
改好名后对其中的配置进行编辑:vi ./ifcfg-ens160
上图中框起来的部分是需要我们注意的,NAME 和 DEVICE 两个参数改成 ens160
,UUID 改成我们刚刚获取的那个,IPADDR 不要改
改好后保存退出,重启网络服务:service network restart
这种情况下就已经配置好了,接下来就可以使用xshell连接我们的虚拟机了
回到题目,本题问宝塔面板的登录用户名,使用 bt default
命令即可查看
接下来的四道题都涉及代码审计,宝塔的主要功能都在 /www/server/panel/tools.py
文件中,我们用xftp连上服务器后可以把这个文件拖出来
在这里我们可以看到我们在终端执行 bt
命令得到的反馈信息,其中就涉及到修改面板密码这个给选项,对应选项5
当输入等于5时,可以看到最终执行了 set_panel_pwd
这个函数,就是本题的答案
继续看上一题我们得到的源码
找到重设密码调用函数的定义,我们可以看到它将我们的输入用 public.md5()
这个函数进行了处理,所以本题答案就是 md5
接上题,我们可以看到当我们重置密码时,我们传入的密码经过了 public.md5
处理后,和 uid=1
这个参数又一起传进了 public.password_salt
这个函数,此时 uid=1
就是指当前用户(我们在重置密码无法选择修改其他用户的密码),在 tools.py 这个文件最开头的 import 部分,我们能够看到 public
的引用在目录 /www/server/panel/class/
下
把 public.py 文件也拖出来进行分析,在其中就可以找到 password_salt
这个函数
可以看到在这个函数的最后返回值时,对 password 添加后缀后进行了一次 md5,在加盐后又进行了一次 md5,再算上26题图中的 public.md5
处理,一共进行了 3次 md5
还是要看 tools.py 中这个关于重设密码的函数,可以看到他在这里面执行了 import db
db.py 这个文件也在 /www/server/panel/class/
目录下
可以看到在这里赋值了一个数据库文件的变量,我们可以在 /www/server/panel/data
下找到这个文件,把他拖下来,可以用数据库查看工具打开,里面的用户表内就有本题的答案
我们在服务器中执行 bt default
命令,可以得到宝塔后台的登录入口
密码需要我们通过 bt
命令进行修改,在修改后我们就可以在本机浏览器直接登录宝塔后台,在后台里我们可以找到网站的源码和对应路径
接着上一题,在宝塔的后台网站里,我们可以看到它管理的网站的整套源码,源码所在目录就是上一题的答案,我们在 /app
路径下可以找到有关数据库配置的源码,源码中就有此题的答案
接上一题
我们通过查看PC取证结果中的浏览器历史记录,可以判断网站管理的登录入口在 /admin
下
通过上一题,我们已经找到网站后台管理界面的登录入口是 /admin
,在源码目录中可以看到有 admin 这个文件夹,其中 common.php 中有写到管理员密码的加密方式
我们可以看到在加密过程中,在原密码md5后又拼接了 password_code
的md5,参与拼接的字符串就是salt值
34、36、37和38这几道题都涉及到重构网站并进入网站后台,所以我们先讲一下如何重构这个网站:
我们通过前几道题目,已知网站后台的登录入口为 192.168.110.113/admin,我们实际访问这个页面时会报错
报错的原因我们可以看到是因为没有连上网站的数据库,实际上我们在宝塔后台中也可以看到网站并没有配置数据库
网站的数据库是检材五,在挂载容器后我们可以看到检材五中给了三个raid,意味着我们需要进行raid重组,重组方法其实也比较简单,我们在此使用 R-Studio 这个工具来进行示范
检测结束后会告诉我们可能的重组方式
我们可以看到可能性最高的就是 123 RAID5 左同步,数据块大小为 64k,接下来我们打开取证大师,按照这个配置导入raid,分析结束后再将其重组好的制作成一个新的镜像文件并导出,这样我们就得到了一个可以用来进行仿真的服务器镜像
把数据库的镜像仿真起来,查看网络配置,如果是 192.168.110.115
正常的话,我们再尝试打开网站后台,就可以正常看到登录界面了
接下来我们讲一下这道题的答案是在哪找到的:
同样是在宝塔后台的网站源码里,我们能找到网站运行时的日志文件
对应案发时间,只有 202104 这个时间是比较符合的,在这个文件夹下只有两个日志,我们打开搜索 password
就可以找到只有两个密码,分别是 123456
和 security
,对应用户名都是 admin
,我们只需要在刚刚重构好的登录界面尝试哪个密码可以登录到后台,哪个密码就是本题的答案(security
)
见33题图,原密码md5拼接salt值的md5,拼接的结果再进行一次md5,一共3次
接下里的几道题都是只要进入到网站后台,就可以轻松找到答案,那如果我们没有找到网站后台的登录密码该怎么解出这几道题呢?下面我们换个思路换个方法进入网站后台(在去年长安杯中就用到了这个方法):
我们已知检材五是给网站提供数据库的服务器,也就是说在检材五上一定有和数据库相关的服务
我们通过31题已知登录数据库的用户名和密码
我们可以通过命令 mysql -uwww_honglian7001 -pwxrM5GtNXk5k5EPX
来连接数据库,但在第一次连接时会报错
解决方法也很简单,修改mysql的配置文件 vi /etc/my.cnf
加上一句 skip-grant-tables
跳过登录的权限检查,保存后重启mysql服务 service mysqld restart
即可
我们在连上数据库之后可以具体分析下为什么刚刚会报错,我们看下user目录
这是我们按照域名降序排序得到的结果,参考官方文档
可以看到mysql在连接用户时会先进行域名排序,然后匹配优先度最高的一个,但是我们需要注意的是 user为''(空)的用户可以匹配任意用户名,所以我们在尝试使用命令去连接时,会先被 Host 为 localhost.localdomain
User 为 ''(空) 的字段匹配到,因此导致报错
当我们把两个空用户名的用户删去后,注释掉我们绕过密码检测的语句,再重启服务尝试连接,就可以成功连接了
回到本题,通过Navicat连接数据库,能找到网站后台管理员登录密码的hash值
我们已知该网站对于登录用户的密码处理方式(33题)
那我们就可以自己构造密码进行处理,然后替换掉数据库中对应admin用户的密码,以 123456
为例
$password = '123456'
md5($password) = e10adc3949ba59abbe56e057f20f883e
md5($password_code) = 7f5918fe56f4a01d8b206f6a8aee40f2
md5(md5($password) . md5($password_code)) = 9eb2b9ad495a75f80f9cf67ed08bbaae
修改后就可以直接使用 admin 132456 登录网站后台
回到本题,在进入网站后台后,直接就能看到设备记录总条数
同时我们在这个界面也可以看到网站收集了用户的 手机号、邀请码(验证码)、定位信息和通讯录 这几个信息,也就是第5题的答案
见45题,18644099137
见45题,34条
通过对检材二和三进行分析,警方通过IP落地,警方掌成功抓获犯罪嫌疑人,现将嫌疑人的PC机和手机进行了取证,分别制作了镜像,请使用第13题的答案对检材四进行解密,并回答下列问题:
在我们加载取证时会提示检测到BitLocker加密,实际上在我们进行仿真时也可以看到相关提示,但是这并不影响取证进程,我们在正常加载取证后,直接在结果中搜索 Bitlocker
就可以找到恢复密钥,也就是此题的答案
BitLocker 驱动器加密恢复密钥
要验证这是否为正确的恢复密钥,请将以下标识符的开头与电脑上显示的标识符值进行比较。
标识符:
3BC73D1D-E5B0-4592-B9D6-42D0A306B625
如果以上标识符与电脑显示的标识符匹配,则使用以下密钥解锁你的驱动器。
恢复密钥:
511126-518936-161612-135234-698357-082929-144705-622578
如果以上标识符与电脑显示的标识符不匹配,则该密钥不是解锁你的驱动器的正确密钥。
请尝试其他恢复密钥,或参阅 https://go.microsoft.com/fwlink/?LinkID=260589 以获得其他帮助。
在仿真时输入上题得到的回复密钥后,火眼就会对镜像自动进行解析,提示我们账户登录密码的信息
看一下浏览器的历史记录就能判断
取证分析后也能直接找到
从本题到48题考察手机取证,题目比较简单,基本都是取证工具一把梭的题
双卡手机,又两个IMEI号,回答哪个都对
看聊天记录就可以确定是 伊对
同时,通过查看聊天记录,我们也能大概确定受害人是在 2021-04-24 14:39:26 这个时间左右成功进入app
在网站后台里可以找到最后登陆时间和这条消息时间相差最少的,就可以判定是受害人的登录信息,即37、38题答案
至于为什么最后登录IP地址都是 192.168.110.110,因为所有的请求都经过负载均衡服务器(检材二)进行了转发
也在伊对的聊天记录中
在微信的聊天记录里有
同样是聊天记录
从本题开始到结束,涉及到PC中另一个虚拟机的取证,我们通过43题可以知道一个名为 我的赚钱工具.zip 的压缩包,大小8.7G左右,很明显不正常,我们将其导出后解压(密码12306,即PC的开机密码,这个要猜一下)
我们在解压后可以看到得到的文件实际上是一个虚拟机目录,可以将其导入VMware(直接双击 vmx 文件即可),或者用仿真工具也可以直接导入
我们可以看到在文件夹中这个虚拟机是有快照的,我们直接打开导入的虚拟机可以发现里面并没有什么内容,所以想到要还原快照,开机密码用火眼可以直接检测到(money)
回到本题,我们用取证工具加载vmdk进行分析,可以看到在取证结果中有一个叫 小白鼠.txt 的疑似加密文件和一个 key.rar
仿真后我们也能看到在恢复快照后的虚拟机里有 Veracrypt 这个工具,所以我们可以尝试加载这个容器,使用 key.rar 为密钥文件
加载后可以看到里面是所有受害者的一些信息,所以这个容器文件就是这道题我们需要算的
在上题我们挂载的加密容器中有个郭先生的文件夹,文件夹里有个设备通讯录,文件名中的电话号就是对应郭先生设备的手机号
也是在加密容器中,一共五位
本题目标文件也在取证结果的分析中可以直接找到,导出后解压计算即可
手机里有三笔
伊对:1000元
微信:2000元
QQ:600元
其中QQ聊天记录中还提到了有另外两笔转账记录已经保存好了
有一笔记录在 52题 提到的那个加密压缩包里,解压后里面的文件就是一笔转账记录,2000元
最后一笔比较难找,在检材五的那个数据库里
我们把它导出成txt,可以发现是base64编码过的jpg图片,解码后保存为图片就能正常查看,有1000元
一共 1000 + 2000 + 600 + 2000 + 1000 = 6600 元
把整套题目整体复现下来,可以发现题目之间的关联性很强,很多题不能直接在做本题时找到答案,要等做到后面才能去核实,这次长安杯把入口点设在了APK上,并且涉及到了很多服务器取证的知识,延续了长安杯一贯的作风,网站重构也基本是年年都考,具体的重构方法还是要好好学习一下的,其中涉及到一些技巧和调试方法大家最好自己进行实际操作,还是蛮有意思的
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有