源码泄露——江苏省第四届数据安全技术应用职业技能竞赛初赛
缘起
什么叫屡战屡败? 就是这次又没进决赛……
什么叫屡败屡战? 就是下次还参加……
只要每次能学点东西。
咱号称程序员,源码泄露题应该最简单吧,今天先来个简单的。
题干
见下图,一共三问,第二问最简单 还是先来第二问吧:

先来看看附件:
附件解压后是2个压缩文件,一个zip,一个gz,那还是放在kali里面处理好了:
全部解压成2个文件夹:

解压后看看文件:
bash tar -xvf repo_server_snapshot.tar.gz -C repo
unzip leaked_repo_sample.zip
# 看看文件目录
tree -L 3

有个git仓库,进去看看,居然发现日志只有5条,现在知道为什么说他最简单了吧?因为每题可以提交10次答案,直接提交,第三次就对了:
code 2561d4af185e4e4d1dc1af4f6deedece003ffa6e

当然,这是投机取巧的做法,实际并不会每次都这样,正统的解法是这样的:
leaked_repo_sample.zip 是源码文件,应该从git中回复每个日志版本,然后比对文件,一样的那个日志就是答案:
bash mv citizen-service-api.git .git
git --work-tree=./ checkout -b r1 2561d4af185e4e4d1dc1af4f6deedece003ffa6e

第一问:

什么叫异常?没说,那就是长的和别人不一样叫异常,看看log文件吧:

只有一条是“interactive_fetch”,那就是他了,记住他的进程id:ssh_pid=1217
再去auth.log看看:

找到前缀:key_fp_prefix
那就再去ssh key文件里面看看,计算一下:

对比前缀,就找到答案了:
code SHA256:s1BnYrBJr15crIh48E/6UHuJKM2ZEARymspEhTjaQhU
用到的命令:
bash tail git-shell.log
cat auth.log
ssh-keygen -lf ./authorized_keys
第三问:

这题很明显解出来了,但是答案一直不对,不知道怎么回事,记录一下解题过程:
这个文件是个块备份文件:

是可以直接用binwalk分离的:

分离的文件也是正常的,可以解压:

一共就4个文件,都不用继续处理,都试一次好了:

都不对!奇了怪了!
用到的脚本:
bash file deleted_blocks/block_0017.bin
binwalk deleted_blocks/block_0017.bin
binwalk -e block_0017.bin --run-as=root
sha256sum 4BC
但是发现分离的文件都一样大,偷偷问了AI,说是binwalk和dd都是默认的贪婪模式:保守提取至文件尾,因为gz有校验,解压至文件结尾结束,所以正常解压不会报错,想要精确的得到文件,可以使用dd分离,并且控制大小:
bash ddif=./block_0017.bin of=gz_11.gz bs=1 skip=1212 count=$((3370-1212))

就是使用count来控制大小,大小从binwalk读出的分离计算。
但是,没办法去验证是否正确了。
小结
这题算是对我来说,最简单的了,可惜,第三问还是没得分……
夜雨聆风