2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解

BSidesSF 2019 CTF_Web

为了更好地学习CTF方面的相关知识,本着以赛促学的目的,决定自己报名参加一些2019年的CTF比赛,在比赛中去学其他的知识,帮助自己更好的学习Web方面的知识。限于个人能力有限,而且在时间上的限制,比赛中仅对自己当时看到的题目和解出的题目进行了解答。本人能力、知识有限,如有错误不足之处,还请谅解!
(趁着题目环境还在赶紧写一些。)
比赛时间:2019年3月4日至2019年3月5日
部分题目重解时间:2019年3月6日至2019年3月7日
一、futurella(writeup):
题目描述如下:
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第1张图片
打开链接:

看完后一脸懵逼,但是有一点还是比较清楚的,最后一行一定是flag而且按照比赛规则,这道题里给出的符号一定与英文字母相对应。因为是Chrome,直接翻译了一下,还真出来东西了:

忽然就明白是怎么回事了,考的是英语,(/‵Д′)/~ ╧╧
按照翻译出来的中文翻译成英文,与符号相对应,很自然的就找到了对应关系,而且还根据符号的大小区分了大小写,最后拼接直接得到flag。
后来我才知道NM直接查看源码就行,我勒个擦(/‵Д′)/~ ╧╧
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第2张图片

二、kookie(writeup):
这道题误打误撞的得到了flag,没有特别特别清晰的思路。描述如下:
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第3张图片
界面如下:
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第4张图片
在左上角给出了两行提示,第二行给出了一组cookie/monster,一开始我以为只是纯登陆题,还在尝试"username=admin and 1 = 1",但是还真的登陆进去了,但是接下来我就不知道怎么搞了,我觉得可能不对,就放弃了这个思路,直到后来抓了个包,发现了点东西:
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第5张图片
cookie这里的username是空的,当时想都没想顺手填了个admin发包过去,直接得到了flag, .。(๑・∀・๑)*.。:
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第6张图片
后来比赛结束又看看了大师傅们的writeup,我才知道只要登陆进去改个cookie成admin就行,╮(﹀_﹀”)╭
三、Pick-tac-toe(重解):
题目描述如下:
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第7张图片
打开界面如下:
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第8张图片
这意思是让我跟计算机画ox下棋,我懵逼了半天,打开源码后就知道了九个方格的名称,其他的什么也不知道。不知道怎么跟它下,后来比赛完看了看师傅们的writeup:
直接跟它下,跟它拼速度,因为当我们输入"move=“其中的一个表格地址时,服务器是有反应时间的,所以卡它的反应时间,连续提交三次不同的位置,即可获得最后的flag:
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第9张图片
还有一种方法是在控制台中输入一段代码,有一个writeup里是这么说的:“The thing stopping us from clicking on an already submitted square is simply that the form does not exist.”,“We can try resubmitting a already filled square (the center square above) to get three in a row.”
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第10张图片
四、Mixer(重解):
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第11张图片
打开后又是一个登陆界面:
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第12张图片
随意输入一个admin看一下能返回什么:
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第13张图片
唔,不行,必须使is_admin=1,既然这样一开始的想法就是在源代码里做一下修改,把0改成1,再登陆一次,然而并没有什么卵用。那只能抓包看一下了,正好题目提示说注意一下cookie中的user。
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第14张图片
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第15张图片
然后我就不知道怎么做了,虽然说注意user的cookie,我确实注意了,考虑过加密方式但是没找到,包括后面再尝试其他的用户名密码时,也没搞明白。后来看了看别人的writeup,大佬的说法是:“So, my guess is: the cookie is encrypted with AES ECB mode, and if it is that’s BAD!!! “,我仍是一脸懵逼,(⊙﹏⊙)
他的做法是:“Let’s start modify user cookie at random position by just flipping one byte, in order to verify if the assumption is correct.”,通过改变user的cookie个别值,来找回显的页面内容,就像下面的图示,我把"04"改成"05”:
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第16张图片
接下来神操作,我们知道想得到flag,必须是:{“first_name”:“admin”,“last_name”:“admin”,“is_admin”:1},大佬的做法是去匹配这个"1”,“So i start thinking a little bit ddeper on this and it comes in my mind that if i can control an entire block of the encoded cookie with something that will be equivalent to 1, then i can reply the entire block between the is_admin and 0”,所以转换到操作中我们用"1.00000000000000"来辅助构造payload(这是16字节;至于为什么是这个1.00000000000000看底下的writeup吧,我现在没有这方面的知识还不懂):{“first_name”:“A1.00000000000000”,“last_name”:“admin”,“is_admin”:1.00000000000000}
紧接着我们要找到"1.00000000000000"在cookie中的编码,通过观察发现 {“first_name”:“A 这个东西也是16字节的,什么意思呢,它将对应cookie中的第一个16字节部分也就是数32位, 那么下一个16字节部分就是"1.00000000000000” 对应编码,找到后复制粘贴到我们想要的位置(简单地说就是在cookie里的最后32位前),同时注意的是我们要复制的编码在回显以后页面的那一部分里:
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第17张图片
这道题具体的writeup请看这里:https://github.com/beerpwn/ctf/tree/master/2019/BSidesSF_CTF/web/mixer
五、Sequel(重解):
又是个登陆题:
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第18张图片
这道题的“精髓”在于下一个登陆界面是试出来的(至少我看的writeup)里是这么写的,可能也不是这样。先不管,两个都是"guest"进入下一个界面:
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第19张图片
抓包,cookie又有问题,base64走一下:
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第20张图片
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第21张图片
然后构造一个新的{“username”:“guest” or “A”=“A”,“password”:“guest”},将其转化为base64编码并发包,发现成功登陆,只是会提示"No note for guest or A = A”,然后就开始技术性操作了,大佬写了一个python脚本(利用Blind SQL Injection提取)最后运行程序,爆出表名是userinfo,用户名是sequeladmin,密码是f5ec3af19f0d3679e7d5a148f4ac323d
2019年CTF3月比赛记录(一):BSidesSF 2019 CTF_Web部分题目writeup与重解_第22张图片
脚本在这里:https://graneed.hatenablog.com/entry/2019/03/05/204738
还有另一个:https://github.com/beerpwn/ctf/tree/master/2019/BSidesSF_CTF/web/sequel

小结:

1.这次比赛限于个人时间和个人能力,只能做(重解)这些题目,还有很多题目,还是比较好的吧有兴趣的可以去看一看,在接下来的时间如果服务器不关闭,我还会继续做完的。
2.从这次比赛也不难看出自己只会做点送分题,差距还是很大的,要学的东西还是很多的,总的来说也是涨了点知识的。感谢大佬们无私提供的writeup,无论是在ctftime上的,还是在github上的,本人在这里一并感谢。
所有writeup,有兴趣的可以看一看:
(1)https://github.com/beerpwn/ctf/tree/master/2019/BSidesSF_CTF/
(2)https://github.com/quintuplecs/BSidesSF2019
(3)https://github.com/KevinLuo2000/BSidesSF_2019_CTF_WriteUp
3.这个比赛的题目就先到这里了,下一个比赛UTCTF,3月9日再见

你可能感兴趣的:(2019年CTF比赛—3月赛,CTF_web)