2024年数证杯决赛——个人赛
容器链接:https://mp.weixin.qq.com/s/ldaZksyLYT2cgCoXYMLEgQ
(还是放在公众号啦,拜托师傅们点点关注!感恩!为了方便师傅们复盘,纯题目版也在其中哒。)容器密码:
4zL!$WpRkmANv@XFQ#7HdEyU&GpoTb56YZ^Jq83!Wr(tqA%XsPB7f@CY1xRmKH9#Le*WVG9NuvT$kJ2@7b64Tp(FLM#zqRY8Hv%!KU^9C&YXL*powq87Hr
计算机取证
1.计算机中曾挂载的Bitlocker加密分区的恢复密钥后6位为?(答案格式:6位数字) (1.0分)
仿真后,直接查看最近访问,直接就可以发现BitLocker的密钥文件。
012507-559669-054527-667557-173448-699171-415833-700755
2.请写出曾远程连接过该计算机的IP;(答案格式:6.6.6.6) (1.0分)
192.168.50.227
3.计算机中曾挂载的vhd非加密分区驱动器号为?(答案格式:大写,如D) (1.0分)
曾经挂载的目录,最方便的方式就是直接仿真后,挂载VHD,windows会默认挂载到上次挂载的目录上去。
在计算机中,会发现2个vhd文件。
都挂载后,发现338899.vhd为BitLocker加密,与题目不符。
996600.vhd的盘符为M。
M
4.接上题,分区中最后修改时间的文件MD5值为?(答案格式:全大写) (1.0分)
算一下MD5
0A7152C5AA002A3D65DC5C5C5FAAB868
5.请找到计算机中的Veracrypt加密容器,并写出其解密密码?(答案格式:字母大小写与实际需一致) (6.0分)
这个容器还是很好找的,没有后缀名,而且名称没有规律。
但是容器密码不知道在哪儿。后面看了一下文件,发现有模拟器,而且还有个备份文件,就肯定有东西,得进去看看。
要打开模拟器,需要开启cpu的虚拟化。
开启模拟器,并将备份导入其中即可打开。
在其中微信聊天记录中发现了VC密码。
对容器进行加载,成功。
1P2P3$$pian5p6p78pian
6.请写出IP为202.113.81.243的发件人向机主发送的邮件附件MD5值;(答案格式:全大写) (1.0分)
直接对邮件IP进行过滤,可以发现有三个,然后公告里面好像是说的最后一封。
导出计算MD5。
6CF25FFF7D2882DBF5722B3B9E382B5F
7.计算机中Will Wight - Cradle Series (Books 1-12)- MOBI.torrent文件的下载地址为?(答案格式:http://…) (1.0分)
直接在tor浏览器中可以发现。
http://suprbaydvdcaynfo4dgdzgxb4zuso7rftlil5yg5kqjefnw4wq4ulcad.onion/attachment.php?aid=4130
8.计算机中lqrazqq016j41.jpg文件的删除时间为?(UTC+0800)(答案格式:1990-01-01 01:01:01) (1.0分)
2024-11-09 21:59:48
9.Fikret Ceker曾经向机主发送过一张照片,请找到该图片写出其拍摄的GPS坐标;(答案格式:保留小数点后4位,如33.3333N,33.3333E) (3.0分)
在邮件中找到的
导出查看文件属性。
40.0112N,112.7001E
10.计算机中用户“李四”在最后一次成功登录之前登录失败了多少次? (答案格式:纯数字) (3.0分)
6
手机取证
请根据手机检材,回答以下问题(备份密码6666)
1.分析手机检材,写出苹果手机的序列号是多少?(答案格式:大小写与实际需一致) (1.0分)
FK3XDN2UKPJ5
2.分析手机检材,写出嫌疑人facebook账号的密码是多少?(答案格式:大小写与实际需一致) (1.0分)
1234qwer
3.分析手机检材,下列哪些地址是嫌疑人曾经去过的? (2.0分)
A.南宁市清秀区 B.南宁市江南区 C.济南市历城区 D.上海市松江区 E.上海市宝山区
AB:
C:
DE:
得上图呀,这东西就很抽象。强烈建议火眼加入离线地图。
ACE
4.分析手机检材,嫌疑人安装了用于记账的APP,请问该APP的包名是什么?(答案格式:com.abc.abc) (1.0分)
什么拼音命名法。
com.maicai.freejizhang
5.分析手机检材,嫌疑人记账APP中记录的使用支付宝支付的用于礼金红包的金额一共是多少?(答案格式:请写整数金额,如1230元) (5.0分)
找一下软件的数据库文件。
礼金红吧支出的ID和UUID都知道了。在支出表中筛选。
然后再寻找支付宝的ID属性。
再次再记录表中筛选。
求和。
然后查看了一下消费,发现海底捞等消费不符合寻常逻辑,应该是对钱的数值进行处理的。大概率是去除了小数点。所以需要将消费除以100才是真正的数值。
170000
6.分析手机检材,嫌疑人家里路由器密码是多少?(答案格式:大小写与实际需一致) (3.0分)
到处都找遍了,都没有找到,那只能继续看小众软件了。
发现两个笔记软件,都看看吧。
直接在第一个锤子便签中找到了。
201808188
7.分析手机检材,写出嫌疑人最新家庭地址;(答案格式:XX市XX区XX路XX弄 (1.0分)
高德地图中可以直接找到家庭地址。
上海市浦东新区张杨北路2899弄
8.分析手机检材,嫌疑人团伙走私的“大麻”的单价是每克多少元?(答案格式:XX元/克) (5.0分)
在微信聊天中发现了货物价格的敏感词,怀疑是聊天记录中的。对方发了一个图片,还撤回了一条消息。先研究一下这个图片吧。
是一个PNG图片,搜索一下十六进制文件尾49454E44AE426082
果然有藏东西。分离出来。这是个xls文件,后缀改为xls即可。
发现进行了加密。
不过聊天记录直接给了。
解开即可。
344
服务器取证
1. 重建完整的系统后,redis对外暴露的端口号是多少?(答案格式:数字) (3.0分)
直接查看端口会发现没有redis服务,但是有docker,大概率在里面。
16379
2. 请找出加密mysql数据库连接密码所用的加密密钥(盐值)?(答案格式:注意大小写) (3.0分)
看一下环境,大致可以知道,后台是java的站,nginx可能是前端,也可能是反代,数据库为mysql和redis。
连接密码应该要从后端看,所以看看jdk这个容器。
通过命令运行了jar包外的yml配置文件。
看看文件
找到了jar文件,反编译看看。还要看看配置文件。
确实密码被加密了。这个加密方式要百度一下,或者需要有开发经验的才知道。用的是jasypt,所以在代码中搜索一下。
有点多,但是筛选也很简单,如果类名有的大概率是jasypt包中自带的,我们只需要看类名路径中不包含jasypt但是代码中调用过的。
这个类是在自编代码中的,所以大概率是在其中。
进去后就发现,有setPassword的调用,所以密码就知道了。
可以解密试试了。直接调用jar包进行解密操作。记得从jar包里面提取jasypt-1.9.3.jar。
java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringDecryptionCLI input="ij+NuXpx6CZwYB1oGHA2M2E2na0G8Tux" password="F*DZ-kZMs5qt"
再登录mysql
F*DZ-kZMs5qt
3. 请分析得出相亲网站的后台数据库中哪张表存放了会员相关信息,写出表名? (6.0分)
在mysql中看了一下,发现好像没有。想起来配置中还有个数据库,连上试试。
还是需要先解密密码。
确实在这个数据库中。
a_member_st
4. 已知用户在系统中的所有操作都会被记录,请找出用户在“查询角色”时,其请求的后端路径地址为?(格式:/api/query/…) (3.0分)
在a_log日志中有。
/zwz/role/getAllByPage
5. 请分析得出数据库用户表中status为-1状态值的含义为?(格式:学生) (1.0分)
这个要看后台显示了,所以先登录后台看看。
密码一眼bcrypt,生成一个替换。
可能是我虚拟机的问题,直接登录会报相应超时。
但是看日志是正常相应的,所以应该是相应延迟了。那就把超时时间设置长点吧。
再次登录。
进去了。
刚才数据库中3个0,一个-1,正好这里状态里面也是。
禁用
6.请统计平均月均收入第二高的省份(省份包含三大类:省、直辖市、自治区)(答案格式:请写出完整的省份名(或直辖市名、自治区名),如江西省、天津市、西藏自治区) (3.0分)
SELECT
SUBSTRING( address, 1, 2 ) AS `省份`,
SUM( income ) AS `收入`,
COUNT( income ) AS `人数`,
SUM( income )/ COUNT( income ) AS `平均收入`
FROM
a_member_st
GROUP BY
`省份`
ORDER BY
`平均收入` DESC
内蒙古自治区
程序功能分析
请根据APK检材,回答以下问题:
1.分析APK检材,请问程序申请了几项系统权限?(答案格式:6) (2.0分)
5
2.分析APK检材,请写出程序的入口邀请码;(答案格式:与实际大小写保持一致) (6.0分)
发现了邀请码的判断代码,然后这个函数是通过native声明的,说明实现so文件中,需要进一步逆向。
导出后,先看看导出表,是否有对应函数。然后直接看看反汇编代码。
可以发现一个字符串判断的代码,按照顺序进行排列。注意其中B的偏移为2,C的偏移为1,所以应该是ACBDEF
然后需要在程序中验证一下,但是打不开,应该是模拟器版本不支持。就很坑的题,离线比赛,我在哪儿去找个高版本模拟器嘛。最后只能尝试利用frida进行hook。
Java.perform(function () {
let m = Java.use("com.example.gallery.MainActivity").$new();
let result = m.isString("ACBDEF");
if (result){
console.log("验证码正确");
}else{
console.log("验证码错误");
}
})
可以看到确实是这个。(由于采用的-W,需要手动启动软件,报错是软件自身问题,不影响验证)
ACBDEF
3.分析APK检材,该程序进行恶意行为时保存的文件使用的加密算法及加密模式是?(答案格式:大写,如XXX-XXX) (1.0分)
加密算法的话,这种加密后需要解密,为了保障速度,一般采用对称加密,也就是DES或者AES,看一下是否有对应调用关键词。
AES-GCM
4.分析APK检材,该程序进行恶意行为时保存的文件使用的加密密钥是?(答案格式:与实际大小写保持一致) (3.0分)
查看代码,这个bArr2可以跟踪到上面的stringFromJNI,又是在so库中。
so库这个函数会返回0123456789abcdef0123456789abcdef,然后再看看后面经过了什么变化。
ArrayList arrayList = new ArrayList((length / 2) + (length % 2 == 0 ? 0 : 1)); int i3 = 0;
while (i3 >= 0 && i3 < length) {
int i4 = i3 + 2;
CharSequence subSequence = stringFromJNI.subSequence(i3, (i4 < 0 || i4 > length) ? length : i4);
r1.c.e(subSequence, "it");
arrayList.add(subSequence.toString());
i3 = i4;
}
用来拆分返回值为2个一组的列表,然后后面的代码又是将数组转化为16进制,然后生成数组,设置为解密密钥。所以密钥的字符串就是0123456789abcdef0123456789abcdef。
0123456789abcdef0123456789abcdef
5.分析APK检材,该程序上传文件的服务器通信URL是多少?(答案格式:https://xxxx/xx/xx) (1.0分)
就这这个类中就可以发现。
https://biwuzhuanyongurl.com/upload
6.分析APK检材,以下哪个是该程序存在的恶意行为? (1.0分)
A. 偷偷调用前置摄像头拍照并上传图片至服务器
B. 偷偷调用后置摄像头拍照并上传图片至服务器
C. 后台偷偷录音并上传音频至服务器
D. 偷偷获取通讯录信息并上传服务器
E. 偷偷获取短信信息并上传服务器
在代码中可以发现调用了前置摄像头。
在上传方法中,可以发现上传文件为图片。
A
网络流量分析
请根据网络流量包检材,回答以下问题:
1.分析网络流量包,请问目录遍历攻击开始时间是什么时候?(答案格式:1990-01-01 01:01:01) (1.0分)
目录遍历的话,肯定是走的http或者https,筛选一下。
很明显,这段流量包中,从一开始就在进行目录爆破。
感谢评论区大佬指出错误,复盘时没有看时区。
需要在wireshark中点击视图->时间格式显示->日期和时间,这样显示的就是当地时区时间。在复盘时没有注意,选择了下方的UTC时间。
2024-10-24 17:26:12
2.分析网络流量包,可以发现哪种攻击行为? (1.0分)
A. 网络钓鱼
B. SQL注入
C. 拒绝服务攻击
D. 恶意软件传播
E. 中间人攻击
在爆破完成后,可以发现有大量的sql语句的包,所以应该是sql注入。
B
3.分析网络流量包,黑客获取到的数据库名称是?(答案格式:小写) (3.0分)
分析一下payload,这个已经开始注入获取字段名了,所以后面条件一定会涉及到数据库名和表名,也就是table_schema和table_name。
secret
4.分析网络流量包,黑客通过时间盲注获取到的数据是什么?(答案格式:与实际大小写保持一致) (6.0分)
时间盲注涉及到的就是sleep这个函数,搜一下就可以找到地方。
把payload进行url解码后会好看一些。理解一下就可以知道,在通过时间来进行猜字符,如果字符是>79的就会延迟3秒返回数据,一般这种3秒就会造成响应超时,就没有返回包。而如果不满足>79,则不会延迟,就会有返回包,图中是猜的第一个字符。
那就把第一个字符一起来分析。
- 字符对应ascii码>79
- 字符对应ascii码<=103
- 字符对应ascii码<=91
- 字符对应ascii码<=85
- 字符对应ascii码>82
- 字符对应ascii码<=84
- 字符对应ascii码>83
所以83<第一个字符<=84,就是也就是84,转化为字符就是T
同理,就可以推出所有的字符。
就得出答案了。但是有点坑的就是最后一个字符是空格,用脚本跑的话,就容易忽略掉。
Th!s_1s_5ecret!
5.分析网络流量包,黑客使用什么webshell管理工具控制服务器?(答案格式:请写中文名,无需填写版本号) (3.0分)
这个流量一眼冰蝎。
冰蝎
6. 分析网络流量包,黑客通过后门执行的最后一条命令是什么?(答案格式:与实际大小写保持一致) (5.0分)
获取密钥。
然后对最后的流量包进行解密。
type login.php
数据分析
1. 分析数据库检材,该数据库中会员姓名包含“强”字的会员数量为多少?(答案格式:纯数字) (1.0分)
SELECT * FROM member WHERE userName LIKE '%强%'
导入数据库,写一下sql就可以了。
2945
2. 属于会员id“89378”的直接下级用户数为多少?(答案格式:纯数字) (1.0分)
SELECT COUNT(*) FROM member WHERE parentId = 89378
11
3. 请计算每名会员的总返佣金额,写出总返佣金额最大的会员id;(答案格式:纯数字) (3.0分)
SELECT userId,SUM(newBlance-oldBlance) as `佣金` FROM salary GROUP BY userId ORDER BY `佣金` DESC
87314
4.计算在2023年5月1日到2024年5月30日之间(包含5月1日和5月30日),总提现金额大于1000的用户数量;(答案格式:纯数字) (5.0分)
SELECT
userId, SUM(withdrawAmount)
FROM
withdraw
WHERE
FROM_UNIXTIME( creationTime / 1000, '%Y-%m-%d' )>= '2023-05-01'
AND FROM_UNIXTIME( creationTime / 1000, '%Y-%m-%d' )<= '2024-05-30'
GROUP BY
userId
HAVING
SUM( withdrawAmount ) > 1000
11756