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可以。
Comments