hctf2015 writeup
前言
周六的时候抽空做了四道题,傍晚去班级聚餐之后就没弄了。这次的ctf挺有意思的,开题还要拿金币去买,哈哈。
writeup
0x00 404
抓包
flag藏在一个302的响应包里
flag:hctf{w3lcome_t0_hc7f_f4f4f4}
0x01 送分要不要
在文件加上后缀zip,可以解压,里面有张jpg,但是没什么用。
用binwalk提取文件,关注A362.7z,用16进制编辑器打开查看,有一串字符串
|
|
base64解码:
GY4DMMZXGQ3DMN2CGZCTMRJTGE3TGNRTGVDDMQZXGM2UMNZTGMYDKRRTGMZTINZTG44TEMJXIQ======
接着再base32解码,base16解码,flag就出来了。python就可以base64/32/16解码
base32:
686374667B6E6E3173635F6C735F73305F33347379217D
base16:
hctf{nn1sc_ls_s0_34sy!}
flag:hctf{nn1sc_ls_s0_34sy!}
0x02 Andy
这题按思路下来虽然不影响解题,但是好坑…
apk反编译之后可以看到关键代码,MainActivity.java
于是去看Make.java,关键代码如下:
到这里就可以知道,进攻Reverse,Encrypt,Classical之后出来的密文串是”SRlhb70YZHKvlTrNrt08F=DX3cdD3txmg”,那么我们需要从Classical,Encrypt,Reverse逆回去。Encrypt是base64加密,所以逆回去是base64解密;Reverse是把字符串逆序;这两个过程都是比较简单的,关键是Classical
仔细看可以知道其实逻辑也是比较简单的,相当于把array1和array2按顺序一一映射(array1->array2),那么逆回来的话就是(array2->array1),但是array1不是普通的字符表,仔细看,发现’E’是有两个映射的,分别对应’x’和’m’,没有’N’字符,所以如果逆过来运算的话级要注意
SRlhb70YZHKvlTrNrt08F=DX3cdD3txmg
Classical:
错误:OHMxdWRoZDBpMnczcmRuYXk2bjhkbmEE=
正确:OHMxdWRoZDBpMnczcmRuYXk2bjhkbmE=(因为’E’对应’x’和’m’,所以实际只有一个’E’)
base64:
8s1udhd0i2w3rdnay6n8dna
reverse:
and8n6yandr3w2i0dhdu1s8
sub:
and8n6yandr3w2i0d
flag: hctf{and8n6yandr3w2i0d}
0x03 fuck===
sha1漏洞,类似strcmp,如果是传入数组,他们俩判断正确,但是sha1无法处理数组,所以返回false
flag:hctf{dd0g_fjdks4r3wrkq7jl}