CTF 安全

BCTF 2017 线上赛 WriteUp

Checkin (Misc64)

题目:Check your token and enjoy it. nc 202.112.51.247 6666

把token提交过去,就能拿flag

foolme (Misc289)

题目:Can you fool me? nc 202.112.51.176 9999 (FLAG format: BCTF{})

解压后得到1张jpg图和1个py文件,直接看了一下py文件,大概先提交验证MD5(估计是拖一下时间,此处爆破即可),然后提交BASE64图片对比,图片格式和尺寸相等,RGB颜色差均值<=2,然后调用inception的classify获取classname对比,不一致才给flag。

pip install inception是不正确的,google一下,找到inception.py,它一个基于TensorFlow开发的图像识别脚本。

那么就改一下这张jpg图,前面相似性检测能通过,后面图像识别不一致。尝试了半个小时,发现这样可以了。

monkey (Pwn303)

题目:nc 202.112.51.248 2333 http://ftp.mozilla.org/pub/firefox/nightly/2016/07/2016-07-31-03-02-03-mozilla-central/jsshell-linux-x86_64.zip

jsshell是mozilla开发的类似python命令行的js shell

源码应该没有用,只是一个提示。直接help()看命令,dumpHeap()输出堆,没看出什么。看到os.file,觉得flag可能放在文件中,可是没有列目录命令。

看到os.system,试了一下可以执行shell命令,那么很容易拿到flag。

admin only (Web444)

题目:github is important http://web.bctf.xctf.org.cn/

环境关了,凭印象写写。大致思路是提交Forget Email后,在源代码里发现一个md5,解一下得到admin的密码:58743495。

登录进去查header发现Set-Cookies有三条,JsessionId出现在php确实有点奇怪,但是这是php环境,就觉得应该没用。认真地学习BigipServerPool一番,最后发现没卵用。

剩下Identity,是md5,解出是user。修改Identity为admin的md5值,刷新页面,多了一行字。

想起提示github,找到这个人insweb17,下载insweb17/share里的##

看了下,是apk,反编译,得到源码,是aes解密。

PS: 有5个commit,可以看到作者改过apk里的源码^_^

找个解密网站解密,get flag

pingpong (Reverse555)

题目:Like playing pingpong? Let's play many many times. ps. I am a sloth. (FLAG format: BCTF{})

反编译apk,得到源码,大致意思是要来回按Button,调用ping和pong函数总共1000000次,出flag。

ping和pong函数都在so库中,应该可以直接反编译so库,分析算法,得到flag。

这里我打算移植so库,改源码,加循环1000000次,让它算出flag。

发现so库有坑,每次调用加1s sleep延迟,(以ping函数为例)

MOVS R6, #1改成MOVS R6, #0,重新跑,拿到错误的flag。

再仔细看后面,发现MVNS R2, R6用到R6,所以R6不能改为#0

所以,只需把MOV R0, R6改为MOVS R0, #0(ping和pong函数都要改),重新跑,就能拿到flag。

Paint (Web625)

题目:Draw a picture! http://paint.bctf.xctf.org.cn/

这道题有bgm,略有洗脑之嫌,故浏览器选择静音。

网页源代码可以发现hint\:flag.php,打开提示Yeah, flag is here. But flag is so secret that only local users could access it.

页面主要有三个功能,insert image里可以上传文件和输入URL来插入图片,save image可以提交base64图片来下载图片(该功能后来被移除,故推测不是关键点)。

上传文件可以上传任意文件,只要满足文件后缀(.jpg/.png/.gif),并返回路径和大小

插入URL,服务器会下载文件,判断文件是否为图片,是图片就转码,保存,并返回路径和大小(无论是否成功,都会返回目标URL文件的大小)

先插入自己服务器的地址,让它访问,查到是php调用curl。然后再插入http://127.0.0.45/flag.php返回得到flag.php的文件大小374 bytes

此时把一张gif图片拆分为两个文件,中间挖空374 bytes,然后上传文件,得到路径。

再以http://127.0.0.45/uploads/{xxx01.gif,../flag.php,xxx02.gif}形式插入URL,把flag藏在gif数据中,服务器认为是正常图片,转码,保存,返回路径。把文件下载下来,查看文件即可得到flag。

PS: 插入到备注是不可行的,转码会丢弃图片备注信息。尝试插入到jpg数据中,转码后会丢失。尝试png,会返回500,损坏文件无法转码。只有gif可以。


标签: CTF 安全

Comments