CTF新生赛之Writeup

CTF新生赛之Writeup

作为零基础的新生,也是在开学后才了解了CTF,感觉本次新生赛中颇有收获,也是应赛制要求,故写下这份WP,以纪念本人的第一次CTF竞赛。

回顾和感想

回顾本次的新生赛,难度合适,自己从对CTF一无所知到入门再到学习相关知识,确实有很大的进步;从做题的过程中来看,期间有欣喜也有挫败:欣喜的是通过自己的努力将一道初看起来没思路的题慢慢解答出来,在提交flag的那一刻确实很激动;但意识到自己能做了好几道题却还只有那么点分,或者看着在自己刚出来还有几百分的题慢慢下降直到50分,也让我十分泄气,感到自己的无知与弱小。但总的来说是喜悦大于气馁,我还是在这次比赛中感受到了CTF的乐趣,并且决定继续在这条路走下去。

关于组队

在面试那天我偶遇了自己的同学LZM(也就是本次比赛的队友),那时候我还对CTF并不是很了解,也不知道该如何入门。面试后我们在路上聊了会,他说他会做一点pwn,于是我就咨询他怎么入门,并表明自己很喜欢数学,于是他给了我做密码学等等建议。之后趁着双十一买了本从零到一开始看书学习,又借着群里的资源看了CTF特训营电子版,稍微了解了一些Web和Crypto的知识。
后来新生赛要开始了,我的同学中没有想认真参加的(有些参加拿学时的),于是我问了LZM,知道他也没有队友后我们就组成了一队,然后我取队名叫马猴烧酒hhhhhhhhhhhhhhhhh。

比赛

其实本来我觉得我队友很厉害,但是没想到他这么厉害,开始后三天内就把pwn杀穿了,群里也开始对马猴烧酒有些呼声。但我才300分,也就是做了签到题和几道简单web,那时候心里真的很不是滋味,明明自己没有什么作用,但却在这个队伍里。
一段低迷后,开始重点做Crypto的题,对照书上的内容,再阅读大量网上的资料,很快就理解了RSA的概要。再观察题目的特点,马上跑出来了前几道。但是到了后面几道,题目就是阅读python,这对我来说十分不友好,因为我看不懂Python。但这时候我的队友也把PWN几乎做完了,而他也是专攻一个方向,没有了解过密码学,于是我们开展团队合作:他帮我认代码,我告诉他题目的解法,于是RSA1、2以及Math 1就被这么做出来了。我自己也比较开心,因为我对团队也做出了贡献。

而最大的感触也是我们两个互补共同解答一道题,我研究理论而我的队友负责操作,感受到了团队的氛围。针不戳!!
遗憾的话就是没有去了解PWN和RE的相关内容,因为队友全部做了hhh,之后还是要广泛学习一下的!

最后再夸一波我的队友,他超强的!!人也好,在我做出来超简单的题目后也会鼓励我,55555

Misc

[签到题]关注微信公众号

这里我只做了两道签到题,不放图了吧0.0
哈哈哈送分来了
过程是关注微信公众号SCUCTF,发送SCUx401CTF即可获得flag

问卷

填写问卷,获得flag

excalibur

下载文件包后没有目的的找,突然就找到了
在这里插入图片描述
scuctf{y0u_134rn_f0r93_v3ry_w311}

Web

因为是从Web入的门,所以先做的Web。这次新生赛做了六道题,都是非常简单的。但是因为看不懂PHP语言所以无法继续向前走了555,easyweb我感觉差点可以做出来,得到了hgg.com后就不会做了0.0。

真是签到题

页面一直在跳动,隐约可以看到跳动的是字符,于是想先把它停下来。登录QQ,Ctrl+Alt+A截图,便看到了flag。

情感日记

点开后是很多文字,部分文字含有黄色下划线,猜测含有下划线的文字可能有线索,于是先点几次舌头,突然看到了一半的flag在这里插入图片描述
于是一直点,将剩下的一半也找出来在这里插入图片描述
合并在一起得到flag。

easyhtml

既然和html有关,那么按F12看源码。根据页面提示“前端要写好注释”,去查看Elements,果然在body里找到了flag在这里插入图片描述
(语气好温柔啊www)

我爬我爬

点开题目看到了提示“简单的robots”,于是进入网站后在后面加“/robots.txt",进入新页面在这里插入图片描述
看到了个disallow的后缀,代表目前还不能访问的,于是再重新加入后缀,又进入一个新页面在这里插入图片描述
有数字有大小写字母,base64冲冲冲,然后得到flag
在这里插入图片描述

easyheehee

点开发现是贪吃蛇游戏,然后看介绍游戏被破坏了,但是我还是要玩的,然后吃到第三个豆就不让吃了。我一开始想的是要修改游戏设置,让我可以吃到后续的豆,然后在Elements开始修改,一番胡乱改动之后确实可以吃后续的豆了,但是分数上不去,然后尝试修改吃一个豆的得分,然后失败了。之后去看Network,有一个很明显的cookie头在这里插入图片描述
lookme都出来了,那肯定是答案了。但等号后面明显不是flag格式,猜测是加密过的,于是拿去base64翻译在这里插入图片描述
解码后面又带俩等号,那肯定又是base64加密后的了,于是再解码一编,得到一个php后缀在这里插入图片描述
那么把后缀加进去,就得到了flag
在这里插入图片描述

(新生系列6)看我后面

页面提示php的备份名,直接加入/index.php没有反应,于是一个个试“.git” 、“.svn”、“ .swp”“.~”、“.bak”,在输入/index.php.bak后得到一个压缩文件,直接打不开,那么就进入文件夹用记事本打开在这里插入图片描述
大概看懂了是要get一个值为5201314hgg的变量psw
在这里插入图片描述
提示只能是数字,那么把hgg去掉后就得到了flag
在这里插入图片描述

(新生系列9)渣男记录

点开网站观察动画后没什么有用的信息,然后看源码,也没看出什么(我是真的全部看了0.0),再猜是不是包含备份文件,在网站中加入后缀/index.php后没有报错,就猜测是文件包含,上网搜了一下CTF 备份文件
参考的是这篇文章
试了一下www.zip,发现真的有文件包下载,那么证明思路是对的。
将文件解压:
在这里插入图片描述
点开index.php观察了一下发现就是页面源码,应该没什么用;
flag.php里也没有正确的flag(我真的试了一下);
class.php里面是一些代码,看不懂,然后和队友交流了一下。他之后就做出来了,告诉我涉及了PHP的序列化和反序列化,于是现学了一点就做出来了。
团队力量大!耶!

后记:害其实easyweb就差后面一步了,burp suite抓包后用XFF代理ip得到了hgg.com,但是进去后就不会了;以及normalphp,感觉应该不难但是读不懂代码。其实自己的web学的很浅很浅,坐等wp。

Crypto

开局放图皮一下
在这里插入图片描述

classic_1

古典密码,含有括号,凯撒密码没跑了。找个在线工具一个个试,试到13就得到了flag在这里插入图片描述

classic_2

简单的多重编码,那么就是加密了多次。其实这个我一开始没做出来,因为书上的定义描述base16是数字和大写字母,但是这里是小写,所以我一开始没有想到去查base16,而base64解出来是很奇怪的东西,所以很疑惑。但后面都试过之后就没办法了,只有当作base码来解。
在这里插入图片描述
源文件里的密码只有数字和小写字母,根据书上的定义猜测是base16在这里插入图片描述
在这里插入图片描述
后面有等号,又有大小写,那么是base64
在这里插入图片描述
解出来发现是摩斯电码,当时做的时候我没找到能直接翻译的工具,于是我一个个抄下来对着摩斯表抄,抄的时候发现有两组含有6个点横,但表中没有,猜测这两个是括号,之后就解出来了。
这是当时的记录:在这里插入图片描述

RSA1

从RSA开始由于电脑环境以及个人水平的原因,我自己是解决不了了,于是我研究理论并且找脚本,然后让队友跑出来,这是我们做密码学之后的策略。
在这里插入图片描述

下载文件后看到信息在这里插入图片描述
先试着用yafu和在线网站分解n但是失败了,于是想到换个方法。因为e=3太明显了,,阅读资料后了解到这是低指数明文。如果m^e<n,
所以可以知道c=m3,直接将c开三次方,得到的不是整数,所以m^e>n,且没有大很多,那么存在k满足k*n<m3<(k+1)n,所以可以将k爆破出来,通过关系式kn-c=m3来爆破明文,于是有如下脚本
from Crypto.Util.number import long_to_bytes,bytes_to_long,getPrime,isPrime import primefac def modinv(a,n): return primefac.modinv(a,n) % n n=17076697689025821279984148703479525857912324396375097877800474725170566885465833732966897433803722770843910606215420934526050277173030062927090405120718833473629930226217051580832179577629652910778242159108718885516149768995851175071714817922775555170553827627677999093195969471873530031984433631909841287167351534954860426002075822101506835880510505034002629168205724869128357383388034971402180363910826536064357845040799329301895842061729319929568340334416516796267886218679042058969927331452548377324349084816441144473807565907927986545026739667157223640848553663532280797054758912745891410981282851031085852562257 e=3 c=892408374578063131162925795619920779766603018609992406621503024400320421262482556891045333045408815199768659578199823419716777827460090306221618906101139272423449131313434967763664295600593363990276765767066758967765012850672428517786210813209127040442832574380675662826137452780727264357 import gmpy2 i=0 while 1: if(gmpy2.iroot(c+i*n, 3)[1]==1): print long_to_bytes(gmpy2.iroot(c+i*n, 3)[0]) break i=i+1
交给我的队友直接跑出来了得到flag:
scuctf{8ef98504b1acb7c8c8976e60f53d9325}

RSA2

已知e、n、c,那就是RSA里最基础的题了。
用网站分解n,得到三个解在这里插入图片描述
然后使用如下代码:

from Crypto.Util.number import long_to_bytes,bytes_to_long,getPrime,isPrime
import primefac
def modinv(a,n):
 return primefac.modinv(a,n) % n
n=21280377217500047527333756734822477656202976970565771310208586426341167199342722337358334403397116963913950346969157
e=0x10001
c=7162732898109470668490761172640544970587920562229245172318483665877098759808623298921271357899945260719802967519239
p= 199045230832669039221046041578658179479
q= 319438022064098846441615805897528174851
r=334688613728124045578795340681788885633
d=modinv(e,(p-1)*(q-1)*(r-1)
m=pow(c,d,n)
print long_to_bytes(m)

将代码交给队友跑出来结果如下
在这里插入图片描述

Math1

这一题先由队友给我翻译代码的意思在这里插入图片描述
然后我想起来看到过和这个很像的一个定理叫中国剩余定理,看了一些后发现和这一题对应,于是告诉队友是这么个解法在这里插入图片描述
之后靠着队友强大的编程能力解了出来

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值