标签:
上周参加了CCTF,也算是练了一段时间以来第一次正式打比赛并打完了全程的,最后结果拿了个11名,还算满意,毕竟是第一次。但这次比赛强队确实不多,而且我们队和别人的差距也是很大了,毕竟也还不到半年时间,还有太多东西要学,慢慢来吧,正确明年之前能够凭实力打进一次线下赛。
先贴一下大神的wp:http://bobao.360.cn/ctf/detail/159.html
在贴贴我们自己的wp把。
给了一个静态的页面,扫了扫也没发现什么东西,
然后后来给了一个hint,说是找博客,好吧,疯狂寻找群里管理员们的博客,最后在github
上找到了Pocky Nya
,然后在repositories
找到了目标网址
然后先把源码也下载下来,简单读了之后,大部分地方都有身份验证,而且获取参数地方也就两个,都没法XSS,后来意外中发现了源代码的background.py
的’/kamisama/posts/add’这里是没有身份验证的,如下:
class AddPostHandler(BaseHandler):
@tornado.web.authenticated
def get(self):
self.background_render(‘add_post.html‘, post=None)
def post(self):
title = self.get_argument(‘title‘, None)
content = self.get_argument(‘content‘, None)
tags = self.get_argument(‘tags‘, ‘‘).strip().split(‘,‘)
if not title or not content:
return self.redirect(‘/kamisama/posts/add‘)
post = self.orm.query(Post.title).filter(Post.title == title).all()
if post:
return self.write(‘<script>alert("Title has already existed");window.history.go(-1);</script>‘)
self.orm.add(Post(title=title, content=content, created_time=date.today()))
self.orm.commit()
return self.redirect(‘/kamisama/posts‘)
所以就可以伪造添加文章的数据包,然后设置存储型XSS获取管理员的cookie。如下所示:
因为考虑到万一设在content里面管理员看不到就不好了,所以我把XSS设置在了title上面,虽然有点毒瘤,不过这样子就能百分百的获取到管理员的Cookie了,很快就有人登录了,结果第一次获取到的不是管理员的,是其他人获取之后登录的,虽然确实拿到cookie了,但是里面并没有flag,结果花费了N久又把各种代码重读了一遍,发现在background.py
里面的SignInHandler
中确实是把flag写进了cookie的,所以我又提交了一次上面的payload,这一次成功获取到了正确的cookie,如下:
username=2|1:0|10:1461405568|8:username|12:cG9ja3lueWE=|2821528813698c6ee9c1650c8420cfb4da968ec97ae080e65c07542f0d249df0;flag=434354467b434f44455f41554449545f425553544552537d
然后按照ascii码转一下就出flag
了CCTF{CODE_AUDIT_BUSTERS}
用之前获取到的cookie登录之后,访问pocky.loli.club:41293/diaries
目录,能够看到新的提示说是telegram上布置了一个机器人,同时给出了机器人的lua代码,然后我们就去telegram
社工一下pockynya就搜到了这个账户
然后根据它博客里面给出的给的lua代码如下:
do
local function run(msg, matches)
if matches[1] ~= ‘!minecraft‘ then
operation = matches[1]
else
return "!minecraft start|stop|restart"
end
if string.find(operation, ‘&‘) or string.find(operation, ‘|‘) or string.find(operation, ‘`‘) then
return "Invalid operation " .. operation
end
local t = io.popen(‘cd /home/telegram && ./mc ‘ .. operation)
local a = t:read("*all")
return a
end
return {
description = "loli.club minecraft bot!",
usage = "!minecraft start|stop|restart",
patterns = {
"^!minecraft$",
"^!minecraft (.*)$"
},
run = run
}
end
所以我们可以用;
断开前面的命令,然后就能执行我们的命令了,如下:
!minecraft ;xxx
后面的xxx
处就可以插入我们的命令行代码,最后的flag就在../wwwroot/flag
里面
如图:
所以flag就是CCTF{TELEGRAM_BOT_AND_Lf}
。
给了一个图片,在图片最后的32位有很连续的一堆字母,如下
base64解码一下得到flag,ctf{we1c0me t0 anmactf!}
这里,在第5560的内容里面发现这样的东西
type s4cr4t.txt
所以接下来这就是我们需要的文件内容,是个Base64编码的东西,解码之后是这个,CCTF{do_you_like_sniffer}
,根据它的格式,他还需要的是MS打头的漏洞编码,根据随便谷歌MS SMB 漏洞 溢出
了一下,试了几个之后就试出来了最后确切的漏洞编号就是MS08067,所以最后答案就是MS08067CCTF{do_you_like_sniffer}
IDA反编译后查看,发现运行要求包含三个参数,且在其中随机选一个进行测试,这里注意md5_custom函数没有用处….
经过check函数测试
取内存中找下:发现字串f2332291a6e1e6154f3cf4ad8b7504d8
尝试提交,成功
flag:CCTF{f2332291a6e1e6154f3cf4ad8b7504d8}
一个.net程序,使用Reflector反编译,得到代码
发现这就是个和本地端口通信的程序,于是先去关闭了防火墙,在通过RAWPCAP本地回环抓包即可
得到flag::CCTF{7eb67b0bb4427e0b43b40b6042670b55}
一个简单的反汇编
发现就是两个字符串的比较
尝试将上面那个字符串提交,发现正确.
flag:CCTF{789101112131415123456}
两个linux程序,通过IDA反汇编,发现两个程序开始时都会调用system两次,通过ascll码知道了false会将自己覆盖到true上,true会将自己删除.
然后在false里发现了print_f函数,反汇编+凯撒加密就得到了结果的flag
PPGS{yvahk-enva-ova}
\\\\\\\\\\
CCTF{linux-rain-bin}
通过IDA观察反编译出的C语言.
总共有3000个函数,3个函数为一周期。但是其中有一些周期中的,第二个函数是直接提取数据,第三个函数移位存在微小差异。通过把汇编代码提取出来生成txt文件,然后用python读取文件模拟生成c程序,即把这3*1000个函数中的第二个函数都扒取出来,生成second.c文件
程序最后会将这3000个函数加密后的40字节与现有的40字节相比较,于是我们在IDA中把这40个字节抓取出来
0x83 0xec 0x5f 0xa2 0x93 0xce 0xa3 0xfb
0x5a 0x17 0x06 0xff 0x13 0x2d 0xd7 0xc4
0xbe 0xce 0x8d 0x6a 0xb8 0x15 0x26 0xfc
0x84 0x01 0x94 0x44 0xf8 0xd7 0x23 0x1c
0x4b 0xc2 0x31 0x04 0xa6 0x33 0x08 0x57
每一个字符的加密是独立运行的,也就意味着我们可以针对每一个字符进行单独的爆破,看看加密后的数据是否相同,通过简单爆破,最终得到flag:
CCTF{1f_Y0u_W4nNa_R3vEn93_____purpleroc}
拿到forensic.7z后解压得到level1与mem.vmem两个文件,观察文件开头,经过百度后得出level1为硬盘文件,mem为内存文件
恰巧本人有一个空硬盘,于是将硬盘格式化,用bootice将level1写入了硬盘,如图所示
发现硬盘被Bitlocker加密,由于存在忘记密码的可能,Bitlocker提供了文件恢复密码机制,密码为48位纯数字
考虑了恢复密码在内存中的可能性后,用winhex打开mem,在其中搜索Bitlocker没有找到,想起了恢复密码id提示为F2298561,搜索后找到有关内容
发现内存中的数据很多情况用00隔开,于是搜索F2298561的16进制数,每两个数用00隔开,最后找到了48位数字密码
为046409-191059-605495-680889-626109-111617-371668-451517
解锁成功!拿到flag CCTF{U_m4st_G00d_4t_F0nr4n51c}
拿到名为reverze.zip的压缩包,用winhex看了一下,很容易想到是zip伪加密
将pk 01 02 后的第5个字节改为00,发现可以解压,得到reverse
打开看了一下,发现是摩丝电码,解密后得到0,9字符串,程序跑了一下算上空格一共2048个字符,由于题目提示结果是个图片,于是尝试不同的像素来观察,最终得到如图所示结果
虽然不是很清楚,但是颠倒一下很容易看出flag: ctf{pixelnice}
很简单的流量分析,打开以后尝试搜索ctf直接得到结果
flag为ctf{anma_qwe3_as34_gty6}
标签:
原文地址:http://blog.csdn.net/qq_19876131/article/details/51250495