前言
经过了5个月又15天的漫长等待,数信杯终于迎来了半决赛……
要不是收到了半决赛的邮件提醒,我都快忘了还有这个比赛……
简单和大家分享一下我的WriteUp,望各位师傅轻喷。
注:本篇文章由Markdown转换,布局上可能没那么美观。
数据安全
【信息收集表】
题目内容:请下载附件,并规范填写,发送到文档中所提及的邮箱,获取flag,谢谢。(flag不包含flag{}格式)
解题思路:
真签到题,送分,根据附件要求,撰写好邮件,等待主办方回复flag即可。
签到寄语
题目内容:留下你的寄语~
解题思路:
打开网页随便写点东西,页面返回一个很奇怪的二维码。
这个二维码在前两周很火,刚好有所研究,是一个开源项目,叫libcimbar [https://github.com/sz3/libcimbar],利用二维码可以实现离线传输文件。(出题人有心了~)
利用项目提供的cfc APP(CameraFileCopy [https://github.com/sz3/cfc] )扫码即可得到一个文件,文件内容就是寄语+Flag。
Ezsql
题目内容:realezsql(flag在whatisthis的表里)
解题思路:
用burp sql fuzz:
推测为单引号注入
闭合无果:
加了一个括号成功闭合:
Order by和group by都不能用,直接尝试Union3列:
题目说了flag在whatisthis表里,直接select出来:
ez_sign
题目内容:小明将flag切割为三部分藏在附件当中,运用所学知识将flag找出来,flag格式为flag{uuid}
解题思路:
打开压缩包里面还一个压缩包并且需要密码,使用ARCHPR破解得到密码:123456
解压后有三个文件对应着题目所说的123部分。
Part1的图片打开就有Flag的字符串
Part2是一个数据包,在http的第二个响应包中可以看到Flag的第二部分。
Part3是一个压缩包,但直接打开会无法正常打开,用010Editor查看发现文件头不对,将所有字节与FF异或即可得到正常压缩包,解压后得到Flag的第三部分。
最后将Flag三部分组合起来就是完整的Flag。
数据分析
secret_1
题目内容:小强离开电脑的时候,某人把小强的秘密给偷走了,还把文件修改覆盖了,作案脚本也删了。请帮助小强找到丢失的相关数据。
1.提交加密算法工具当中的flag值。(提交示例:flag{*})
解题思路:
利用Volatility查看cmd历史命令
vol.py -f data.raw --profile=Win7SP1x64 cmdscan
发现有个encode.py的脚本操作了flaggg.png
利用LovelyMem找到这个png,在该文件夹中找到了pyc文件,该题的flag就在其中。
secret_2
题目内容:2.恢复图片中的flag值。(提交示例:flag{*})

解题思路:
在前一题中得到了一个pyc文件,将其逆向后得到了
def encode(png): flag = 'flag{eba771fd-2b03-418f-b11a-60f1141c99ee}' lens = len(flag) with open(png, 'rb') as f: pic_bytes = f.read() print(len(pic_bytes)) output_bytes = bytearray() for i in range(0, len(pic_bytes)): output_bytes.append(pic_bytes[i] ^ ord(flag[i * 2 % lens])) with open(png, 'wb') as f: f.write(output_bytes)根据encode函数写一个decode函数进行解密
def decode(png):flag = 'flag{eba771fd-2b03-418f-b11a-60f1141c99ee}'lens = len(flag)with open(png, 'rb') as f:pic_bytes = f.read()output_bytes = bytearray()for i in range(0, len(pic_bytes)):output_bytes.append(pic_bytes[i] ^ ord(flag[i * 2 % lens]))with open(png, 'wb') as f:f.write(output_bytes)
利用Volatility导出被加密的flaggg.png文件
vol.py -f data.raw --profile=Win7SP1x64 filescan | grep 'flaggg.png'
vol.py -f data.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000007f3f17b0 -D ./
利用Python脚本解密就得到了原始图片。
secret_3
题目内容:3.提交压缩包当中的flag值。(提交示例:flag{*})
解题思路:
在前一题中得到的图片尾部藏有一个压缩包,提取出来后发现有密码。
使用Volatility获取剪切板数据即可拿到压缩包的密码:finallyfindyou
vol.py -f data.raw --profile=Win7SP1x64 clipboard -v
Ps:此处获取剪切板的命令一定要加-v使用,否则获取不到有用信息。[-v参数会显示详细的调试信息]
history_1
题目内容:浏览器历史数据查找。
1.提交flag中uuid值32位小写md5加密第一位为4的uuid(提交示例:9c26d7a6-ea44-4beb-96a8-bc9c75866fef
解题思路:
结合题目,利用Volatility查看浏览器历史记录
vol.py -f data.raw --profile=Win7SP1x64 iehistory
发现浏览器打开过两个ipynb文件。
利用Volatility导出第一个ipynb文件,发现其中的flag1对应的uuid的MD5值就是题目所要求的第一位为4,即正确Flag。
history_2
题目内容:
2.提交flag中uuid值32位小写md5加密第一位为a的uuid(提交示例:9c26d7a6-ea44-4beb-96a8-bc9c75866fef)(提交示例:9c26d7a6-ea44-4beb-96a8-bc9c75866fef)
解题思路:
利用Volatility导出第二个ipynb文件,发现其中的flag1对应的uuid的MD5值就是题目所要求的第一位为a,即正确Flag。
数据算法
水印攻击_南区
题目内容:
(本题满分为1000分,题干较长,见于附件,请详细阅读,注意本题提交的zip压缩包里得包含result.png和代码文件)
解题思路:
本题是要对带有隐水印的图片进行攻击,使得隐水印无法被正常提取。根据题干可知可以对图片进行裁剪、压缩、改变亮度、加掩码块、加噪音……,但一一尝试过后发现效果均不佳,最后想到可以在原先的水印上叠加水印,只要叠加够多就可以使得原水印无法被提取。
Payload.py
from blind_watermark import WaterMark # pip install blind-watermark# Blind WaterMark,图片盲水印,https://github.com/guofei9987/blind_watermarkbwm1 = WaterMark(password_img=1, password_wm=1)bwm1.read_img('../input.png')wm = '这是一串没有意义的字符!!!这是一串没有意义的字符!!!这是一串没有意义的字符!!!这是一串没有意义的字符!!!这是一串没有意义的字符!!!这是一串没有意义的字符!!!这是一串没有意义的字符!!!这是一串没有意义的字符!!!这是一串没有意义的字符!!!这是一串没有意义的字符!!!'bwm1.read_wm(wm, mode='str')bwm1.embed('../result.png')最后结果
原图
攻击后图片
得分