[GFCTF 2021] 菜鸡的 Writeup

GFCTF 2021

Misc 部分

重生之我在A国当间谍

By WDLJT

解压打开 secret 文件

04910180F6010005910180F70008 46800153CBFF0C62114EEC7684603B7EDF65E576CA5E748FC8FF0C004156FD7684638C63A767439700898166F44F1879C076844EBA63E17740FF0C62114EEC970089814F603002 04910180F6010005910180F80008 5662114E0D613F518D53C252A08FD9573A7EB74E89FF0C621166F46E34671B5E737A335E78798F7684751F6D3BFF0C5982679C56FD5BB659275371FF0C5C314F7F752890A34E2A538B7BB15E9576845E95724C54273002 04910180F6010005910180F70008 364F6077E590537684FF0C593179814E8B4EF6FF0C4ED65DF27ECF8BB04E0D5F974E8BFF0C5FD88BB04E865BC678014E86300230023002 04910180F6010005910180F80008 5A771F8BA94EBA65E08BED30026211628A5BC67801544A8BC94F60FF0C8BB04F4FFF0C8FD94E2A5BC678014E0D8981544A8BC94EFB4F554EBA30020057007A0046006C004E0048004A0073004D004600770076005A0051003D003D 04910180F6010005910180F70008 3E653E5FC35427FF0C62114EEC76844FDD5BC65DE54F5C4F1A505A5F975F88597DFF0C7EDD5BF96CA167094EBA80FD518D77E590538FD94E2A5BC678013002

原本以为是之前通讯分析,第一次丢进ASCII码看的时候啥都没看见。然后我把相同部分去掉再丢进去看一眼,视野一下就清晰了.jpg

misc1-1

发现了疑似base64 WzFlNHJsMFwvZQ==,然后果不其然就是base64

misc1-2

解码得到疑似压缩包密码[1e4rl0\/e

试了下确实是密码,打开压缩包得到二维码图片

misc1-3

然后试着拼了一下misc1-4

然后死活扫不出来…,然后就用手动拼二维码的方式,用在线拼图的方式(网站:https://merricx.github.io/qrazybox/)画出来了,但是在整理wp的时候已经找不到了。

意外的是我用微信扫我当时拼出来的二维码居然扫出来了(那我为什么要花15分钟画一个二维码….

misc1-5

得到flag:GFCTF{ctf_Ha0_NaN_aaAaaaAaaaaAaaaaaAaa}

双击开始冒险

By WDLJT

套套套套套,求求求求求了少套点娃(((

打开压缩包,给了一个hint和一个压缩包4位,用AARP爆破

misc2-1

打开压缩包又一个hint一个文件,文件内小作文,但是有极其显眼的QQ号1372173535

搜索QQ号得到base64后的疑似密码,但似乎后来因为找不到人太多了导致qq名也改成了base64,之前好像只有签名有,通过评论签名的地方复制出来:

misc2-2

解密后得到:You love me, I love you

解密后根据说明应该是USB流量分析,去百度了一圈参考了

https://github.com/WangYihang/UsbMiceDataHacker

https://www.cnblogs.com/liun1994/p/6142505.html

https://www.freebuf.com/articles/database/231809.html

https://blog.csdn.net/qq_45555226/article/details/102810474

https://blog.csdn.net/qq_43625917/article/details/107723635

然而按照博客内的脚本只得到了一串16位的流量数据

然后一直迷惑的是为什么我的流量为什么是16位,也没查到资料只能稍微尝试性的改一改,把前四位和后四位删掉发现好像不太行,

因为图片是:misc2-3

原本用那个github解析出来了.dat但是用不了还是16位经过穷举尝试加上感觉和加了冒号的结构差不多就尝试的魔改了下脚本,

参考:https://zhuanlan.zhihu.com/p/41960639,虽然我把这个翻出来了,但其实还是穷举一个Byte一个Byte的挪

nums = []
keys = open('usb.dat','r')
f = open('xy11.txt','w+')
posx = 0
posy = 0
for line in keys:
  x = int(line[4:6],16)
  y = int(line[8:10],16)
  if x > 127 :
      x -= 256
  if y > 127 :
      y -= 256
  posx += x
  posy += y
  btn_flag = int(line[0:2],16) # 1 for left , 2 for right , 0 for nothing
  if btn_flag == 2 : # 1 代表左键
      f.write(str(posx))
      f.write(' ')
      f.write(str(posy))
      f.write('\n')

f.close()

然后还是不行。把0:2和btn_flag尝试了几次之后,发现需要把btn_flag改为1才能得到争取数据

丢到gunplot尝试了下,获得正确(?)的点阵图

misc2-4

经过一次上下翻转+左右反转

misc2-5

根据图片压缩文件的密码为7724774CTF

解压后终于拿到flag了(?

misc2-6

nmd怎么又套娃,还好藏得不深在图片hex最下面

misc2-7

拿到flag:GFCTF{this_is_rea1_fllllll11ag}

pikapikapika

by WDLJT

打开压缩包拿到图片,图片本身感觉分辨率并不高,但大小离谱

于是尝试foremost分析

Foremost version 1.5.7 by Jesse Kornblum, Kris Kendall, and Nick Mikus

Audit File

Foremost started at Sun Nov 21 10:50:19 2021

Invocation: *:\*\CTF\Misc\foremost-master\binary\foremost.exe *:\*\CTF\tmp\misc_pikapikapika\flag.jpg 

Output directory: *:\*\CTF\tmp\misc_pikapikapika\output

Configuration file: *:\*\foremost\foremost.conf

File: *:\*\CTF\tmp\misc_pikapikapika\flag.jpg

Start: Sun Nov 21 10:50:19 2021

Length: 583 KB (29555353591553389 bytes)

Num	 Name (bs=512)	       Size	 File Offset	 Comment 


0:	00000000.jpg 	      58 KB 	          0 	 

1:	00000117.zip 	     524 KB 	      60094 	 

Finish: Sun Nov 21 10:50:19 2021

2 FILES EXTRACTED

jpg:= 1

zip:= 1

Foremost finished at Sun Nov 21 10:50:19 2021

分析出了压缩包,解压前发现压缩率又是离谱的高…,重复性很强,然后一听,耳机炸裂。用频率分析了一会儿没有找到有用的信息,后面用JPocketKnife打开音频才发现,重复性是哪来的了,以为是:是间隔,~是1,0u是0,把他当成摩斯密码解了半天结果,啥都没解出来指:

misc3-1

然后发现0/一直在一起,把他们合并了下,尝试了前几个字符串misc3-2

找队员LittleC写了份脚本(谁知道他用node.js写的啊)

const data = require('fs').readFileSync('./flag.wav').slice(44)

let result = ""
for (let i = 0; i < data.length / 2; i++) {
 let r = data.slice(i * 2, i * 2 + 2)
 if (r.toString('hex') === '3075') {
  result += '1'
 }else if(r.toString('hex') === '983a'){
  result += '0'
 }
}
function splitToBulks(arr, bulkSize = 20) {
 const bulks = [];
 for (let i = 0; i < Math.ceil(arr.length / bulkSize); i++) {
   bulks.push(arr.slice(i * bulkSize, (i + 1) * bulkSize));
 }
 return bulks;
}

console.log(data)
require('fs').writeFileSync('./a.png', Buffer.from(splitToBulks(result, 8).map(v => String.fromCharCode( parseInt(v, 2))).join(''), 'base64'))

然后发现他跑完发过来的文件是预览不了的:

misc3-3

那CRC一定出了问题,然后试了下改高度果然出了misc3-4

Web

easyweb

By LittleC

他嘱咐一定要把这个图放上来

web1-1

cgi-bin读一下Class.php.txt index.php.txt

然后是分析Temp的逻辑 date能从filename query获得。然后读getTempName 发现还有个admin的模板,进去看下能目录浏览,试了index.php不行,那admin模板就是./template/admin/index.html, filename写index.html就行,然后有个space参数,是从extract里面拿的,post一个进去就行

test action=function name=phpinfo phpinfo=2 force=0 function=fuck

然后比较复杂的 include的时候调用了listdata,经过分析下来,system变量里面一大堆key都是没用的,然后对输入的参数分割成key value,记录到system和param,先把action改成fuction, 然后输入name,本来还以为param0 param1..之类的有啥用,甚至想get shell,但是因为空格被堵了 ${IFS}之类的也用不上,在这卡了半天

然后测试出来system也被禁了,就没get shell

然后去试call_user_func的时候敲了个phpinfo

看env就行

Reverse

Wordy

By LittleC

ida打开,开remote gdk debugger,main开始的地方打个断点 硬跑 或者 到ida view里u+p改函数,把flag的字符拼起来

Signin

By WDLJT

signin

base64懒得解释(((

结语

个人misc有点nt(((,犯错犯太多了导致差点没做完,web和re今天拉闸了,希望下次再接再厉,难得拿个第二还是感觉不错(虽然是因为参赛人数稍微有点小少的缘故),这次比赛misc做完就能前几名233333。

发表评论