MISC
0x01 简单MISC
托入winhex发现zip,提出来,爆破,解压,base64解密,flag{Th1s_is_FlaG_you_aRE_rigHT}
0x02 武汉加油
解法一:
在kali用steghide发掘隐藏文件,steghide extract -sf 1.jpg
需要密码,爆破得到密码:ctf,提取出flag.txt
(爆破教程移步:https://www.jianshu.com/p/0629b5069431)
程序中输入 ' 武 汉 加 油 ! 就得到了flag : {zhong_guo_jia_you}
解法二:
托入winhex发现是zip文件头,改后缀名,解压是exe,查壳,vmp壳
运行exe,打开CE,找到关键代码,我们输入的字符存入了edx
来到对应汇编代码,比较edx和eax,若相等则返回flag
在内存里看eax存了啥,中间有4个宽字符,在线转换unicode发现不对
CEE4,BABA,BCD3,D3CD转十进制,再GBK转字符得到 武汉加油 4个字符
程序中输入 ' 武 汉 加 油 ! 就得到了flag : {zhong_guo_jia_you}
0x03 隐藏的信息
一张二维码.jpg,一个纯数字.zip,二维码补全扫描不是flag,压缩包伪加密解压,音频文件拖入audacity,最后有拨号音,猜测拨号音隐写,运行dtmf解密脚本得到:187485618521
再根据jpg里的提示“USEBASE64...TOGETYOURFLAG”,base64加密得到flag{MTg3NDg1NjE4NTIx}
0x04 ez_mem&usb
captured.pcap,用foremost分解得到zip,用7zip解压得到data.vmem
(因为博主各种原因用不了volatility这个工具,以下为复现内容)
volatility -f data.vmem imageinfo,查看系统版本,是WinXPSP2x86的系统
volatility -f data.vmem --profile=WinXPSP2x86 filescan | grep flag,搜索字符串,发现flag.img
volatility -f data.img --profifile=WinXPSP2x86 dumpfifiles -Q 0x0000000001155f90 --dump
dir=./,将文件dump出来,打开目录发现usbdata.zip加密文件
volatility -f data.img --profifile=WinXPSP2x86 cmdscan,发现“passwd:weak_auth_top100”
解压得到usbdata.txt,键盘数据包,运行转换脚本
得到FLAG{69200835784EC3ED8D2A64E73FE913C0}
RE
0x01 fxck!
拖入ida进入main函数,看到D48和A7A两个处理函数
进入D48,发现为base58加密
再由下面for循环的异或运算,得到码表:
ABCDEFGHJKLMNPQRSTUVWXYZ123456789abcdefghijkmnopqrstuvwxyz
进入A7A,发现为brainfuck解释器,对应下表:
0xa8 <
0xa9 >
0xc4 +
0xc5 -
0x01 .
0xdd [
0xfd ]
被比较的数组如下,把brainfuck指令提取,还原得到
-[--->+<]>--.+[--->++<]>-.-[->++<]>-.----------.+[->++++++<]>..+++++++.[----->+++<]>.++++++++++.+[-
>+++<]>..--[----->+++<]>.[--->+<]>-----..--------.>-[--->+<]>---.+.-[-->+++<]>-.---[->+++<]>+.++[----->+<]>.-
[--->+<]>+.-----.>+[--->++<]>.++++++++++++.[--->+<]>++..[++>---<]>--.+[--->++++
<]>.++++++++++++.++[------>+<]>.++++++.+++++++++++.--.[->+++<]>+.+[----->+<]>+.---[->+++
<]>-.++++++++++++++.--[->+++<]>-.[-->+++<]>--.+[----->+<]>.++[->+++++<]>.[->+++<]>.[--->+<]>-----.--
----------.+[--->+<]>++.-[->+++++<]>.[--->+<]>+.+++++.---------.---[->+++<]>.----------.-----.-.+++++[->++
<]>+.-[-->+<]>--.-.>-[--->+<]>--.-.++++++++.
利用反编译脚本得到逻辑,逆写算法得到S7kaLLSeoPPbqqiRSzfHniVbxx2DPcitrWyaoFgHrVmaxSrwnA721m43SRZ
再经base58解码后得到:flag{63510cf7-2b80-45e1-a186-21234897e5cd}
MOBILE
GetFlag
应该是个正常的apk
安装到手机,有一个按钮,不知道干嘛的
扔到JEB里分析,发现提示存在远程的APK
那么这APK应该是会有一个监听端口的功能,远程IP在哪呢?翻到assert文件夹下可以看到secret.txt,内容是一段base64,解码后:The IP of the remote phone is 212.64.66.177
nmap扫一下这个IP的端口:nmap 212.64.66.177 ,发现8080这个端口是开着的
连上:nc 212.64.66.177 8080 ,返回一个数,每次都变,不知道干什么的
继续分析代码,在onCreate函数中可以看到利用了openFileOutput这个API新建了一个文件,这个文件会保存在应用的私有目录:/data/data/com.xuanxuan.getflag/files/flag
然后分析点击事件,进而分析ServerSocket_thread线程,发现是监听的本地的8080端口
继续分析Receive_Thread线程,知道连接到这个端口发送的是一个随机数
继续分析,发现最多能读取接收的500个字节,然后收到数据和刚才生成的随机数会被送到
Checkpayload函数里
跟进,数据转成JSON对象,对象里有两个字段,分别为message和check,然后会用传进来的随机数作为HMAC的key,算出message的校验码和check进行比较,如果通过,则过滤一些message的参数,利用JAVA的Runtime类执行wget拼接后面提交message
然后根据开始的随机数计算校验码
然后在服务器上监听相应端口,得到XCTF{this_wget_is_from_termux_and_I_move_some_dynamic_lib_to_systemlib_to_run_it }
网友评论