SSCTF-2017部分Writeup
0x00
刚结束的SSCTF2017,自己只做了一点。
Pwn250
栈溢出,简单粗暴,但是程序是静态链接的,又有NX保护,直接ROP就好了。
思路就是,在.bss上构造参数,然后使用int 0x80起shell。
exp如下
1 | # -*- coding: utf-8 -*- |
apk1
程序会加密ctf1.xlsx
,加密是每隔0x100字符加密一次。
加密的大概逻辑是:
- 先调用验证函数
private boolean verify(String arg11, String arg12)
,会根据签名算出一个k1[40] - 根据输入的6位数字,和k1操作后得到新的k1
- 进入加密逻辑,使用新的k1与xlsx的每隔0x100的字符,循环亦或。
思路就是,反向先推一点,可以根据加密后的xlsx和正常的比对,能得到k1的前三个字节。
然后我把java代码复制出来新建一个java的工程,去爆破6位数字:
1 | 6位数字 ---> 和k1生成新的k1 ---> 然后比对前三字节 |
然后使用private boolean encode(Context arg12)
,把加密前后的文件名换一下,就可以直接解出来。
apk2 login
主要的函数在native层。把输入的12字节扩展为16字节,然后到java层去验证,正确的话经过AES解密弹出flag。
经过分析,只要使得输入的12字节经过变换后,等于 01635e6c5f2378255f27356c11663165
就好了。
主要的算法是,把输入的12字节分成4组,每组3个字节,每组的变化规律是
1 | L[flag[0] >> 2] = res[0] ^ 0x3F |
写脚本做还原操作就行了
1 | res = [0x01,0x63,0x5e,0x6c, |
安装apk到手机上,然后输入得到的字符串,得到flag
Music 300 你知道我在等你吗
拿到一个mp3,先binwalk看了一下:
zip啊,手动修改文件后缀为zip,然后直接解压得到如下:
二维码并没有什么卵用…coffee是加密的zip,把mp3丢进010 editor,发现后面多了一部分数据,strings之后得到一个有点奇怪的字符串:
尝试使用它解密zip…居然可以 :)
解开之后有个coffee.jpg
惯例使用binwalk扫一下:
并没有什么特别的地方。
在使用010 editor查看的时候,搜了下一些其他文件的文件头里的标志字符之类的,发现了:
前面的coffee也好奇怪,从coffee开始截取出来,找了个png头,尝试修复一下,然后打开:
得到一个二维码,扫一下,是让你去下载一个txt…其实这是个zip,但是后面拼接了一部分提示的字符串。
简直….丧心病狂。
猜了好多密码…什么coffee、seclover之类的,差点要爆破了。后面队友提示说要不要试试伪加密。
直接丢进010 editor 使用二进制模板解析后,修改标志位
然后尝试解压得到一个txt,里面是一串base64
1 | keyis%7Bsec1over%25_6ugscan_@coffee%7D |