CTF网络信息安全竞赛:记一次小比赛

1 篇文章 0 订阅
1 篇文章 0 订阅

在这里插入图片描述

Misc

1、签到题

在这里插入图片描述

Ctrl+c Ctrl+v 真·签到

2、加密的压缩包

下载附件解压里面是一个 py 和一个加密的压缩包一开始手抖双击了两下这个 e.py
在这里插入图片描述

直接弹出了一堆 data.txt 里面都是两个字母或者数字,感觉可能是 base 码,先不管。

打开内容 可以看到:
在这里插入图片描述

读了一遍程序可以看出,刚刚运行了一下产生的文件就是这个 flag 经过编码以后,被切块成两个字母一组,放到不同的文件里储存起来了。
点开压缩包看看:
在这里插入图片描述
也是一堆文本文件,从而得知,这些文件也是用那种方法得出来的,只要得到里面的内容,解码一下就可以得到 flag。

一开始考虑伪加密解密这个压缩文件,但是拖进 winhex 里观察发现,均为真加密。

作罢。

观察发现,里面的文本是很小的,只有 2 字节,而且在旁边可以看到 CRC32,可以考虑 CRC32 碰撞来绕过密码。
于是写了一个拙劣的脚本:
在这里插入图片描述

连起来就是喜闻乐见的 base64 了解 码 得 到 : xgctf{crc32_09ec43d30f}

3、内存取证

下载文件下来是一个.raw
其实本来以为是图片隐写什么的,但是因为题目都说是内存取证了,那就直接扔到 Linux
虚拟机里用终端调用 volatility 查看了
运行:volatility -f imageCopies.raw – profile=Win7SP1x64 cmdscan
又是喜闻乐见的 base64 了
解码得到:xgctlVoRatilitz1s_so_ea4R}
在这里插入图片描述

Revers

1、checkin

逆向嘛,拖进 IDA 就完事了,再找个主函数,再按下 F5 看伪代码
(F5 大法好啊)
在这里插入图片描述
看到有那么长一串变量。都是数字结尾,估计是没跑了。

选中数字按下 R 转 char。果然。
在这里插入图片描述
得到:xgctf{Rever5e_1s_s0_Ea5y!}

2、babyascii

和第一题一样,先拖 IDA+F5,看伪代码
在这里插入图片描述
读一遍,发现是用户输入字符串,和他自己的比较,一样就 ok。那么可想而知,flag 就在这个 s2 中。
在这里插入图片描述
追踪过去是这玩意儿。有点乱。。。那一定是经过了加密的。回去看代码,注意到刚刚有点奇怪的一个地方

对字符加减数字,这是在学 C 语言时候常见的操作,也就是说,正是这个奇怪的循环改变用户输入的字符串,使得和密文匹配。
逆向思维一下,编写脚本。
(既然是 C 的小知识,那就用 C 写吧!)
在这里插入图片描述
出现了一点小问题 hhh,少了个大括号,不过无所谓了。已经有 flag 了直接提交他不香吗?

crypto

1、bbcrypto

题目提示的意思其实已经告诉我们了就是凯撒位移,只是不是普通的凯撒的位移。
在这里插入图片描述
打开文件可以看到,又是一个加密的过程以代码的形式体现。
在这里插入图片描述
可以看到最后一行的注释,显然就是加密后的 flag,遇到{}和_不加密;
本来感觉正规方法应该是可以读程序,写出反加密的代码,运行一下,得出结果。
但是想偷懒耍,就先观察了一下规律,既然是凯撒位移,那就试试看观察 xgctf 与 huj6y 的位移,题干信息一定是有用的,既然说了不是那么简单的位移,直接考虑用 table 中的表, 不难发现,x 和 h,g 和 u 都是向左位移了 11 位,不多 bb,直接写个简单的位移直接过。
在这里插入图片描述

2、bbaes

下载一下两个文件
在这里插入图片描述
在加上.txt 后打开。乍一看好像是 base64
头铁试了一下发现不太行。。。再康康另一个 py 文件。
在这里插入图片描述
out 文件是输出的密文没毛病
再继续看上去:是用了 AES 加密,key 也给了,key = ‘xgctf{not_flag~}’
在这里插入图片描述
Mode 是 ECB 字符集是 utf-8
所以只要看完程序,就可以知道怎么去解了。解得:
xgctf{WOW_Y0u_s0lvE_The_bBa1s}

Pwn

1、签到题

nc 进去跟着提示做就行
在这里插入图片描述
在这里插入图片描述

2 、 babyshell

nc 进去以后可以看到,已经帮你登陆了 sh,
在这里插入图片描述
输入 ls 命令看一下有哪些文件
在这里插入图片描述
看到一个 flag,直接 cat
但是是一个假的 flag
根据提示,应该是在其他文件夹里,一个个 cd 会 cd 的想爆炸。于是直接 find 所有 flag
的文件。
在这里插入图片描述
cd 工程量一下子就少了好多。进去第一个就是了。

3 、 BabyStackOverflow

nc 进去后看到的是一个登录系统
在这里插入图片描述
根据提示,当用户名和密码都是 admin 的时候就可以有 flag 了。那就先试试 admin。
结果直接说检测到黑客入侵。。。
才注意到上面一句话,第二次尝试输入较长的数据。
(为了可以辨别啥时候溢出,其实应该拖进 IDA 看一下的。但我懒得在两台电脑上搞来搞去,就偷懒就直接输数列 1234……一直下去。发现输到 21 的 2 时候就开始溢出了) 发现溢出的值刚好存到用户名里。
接下来只要输入密码,也是 admin 就可以了。
(理论上应该用脚本,因为在前几次试输入的时候超时登出了。但只要我手速够快,计时器就赶不上我 XD)
在这里插入图片描述

4、easystack_level0

先checksec 一下,看一下保护机制开启了多少。开启了RELRO 和NX,不能用shellcode,问题不大。
在这里插入图片描述
拖进 IDA
在这里插入图片描述
三步走:1、主函数;2、F5 看伪代码 3、找返回
可以看到有 system 函数,主函数里有个 vulnerable_function()调用,双击进入;
在这里插入图片描述
可以看到有个栈溢出的漏洞
那距离拿到 shell 还差一个/bin/sh 传统艺能看文本 shift+F12
果然有。
直接写脚本拿到 shell ,找下 flag。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Web

1、 babyphp

登录进去是这样的,talk is cheap ,show me the code,直接右键看源代码。
在这里插入图片描述
在这里插入图片描述

可以看到上面有个 action=“challenge.php”,提示:php 是最伟大的语言。应该就是个代码审计题了。
不出所料,下面第一处 if ($_GET[‘name’] == G E T [ ′ p a s s w o r d ′ ] ) 判 断 时 两 数 组 要 是 不 同 的 , 但 在 第 二 处 e l s e i f ( s h a 1 ( _GET['password'])判断时两数组要是不同的,但在第二处 else if (sha1( GET[password])elseif(sha1(_GET[‘name’]) === sha1($_GET[‘password’]))判断时由于
sha1()函数无法处理数组类型,将报错并返回 false,false === false 条件成立,这样就绕过了 sha()函数获得 flag

PAYLOAD: http://10.129.2.159:12004/challenge.php?name[]=11&password[]=1

转到获得 Flag: xgctf{cHeck1N_Ea5yphP pHP_15_greaT}

2、 nizhuansiwei

进入网页。 在这里插入图片描述
可以看到这段源码里的 file 是可控的,本地测试后有执行下面代码即可出现payload: http://10.129.2.159:12001/?text=data://text/plain,5Y6f6aKY5pyq5pS55Y qo&file=useless.php&password=O:4:%22Flag%22:1:%7Bs:4:%22file%22;s:8:
%22flag.php%22;%7D
在这里插入图片描述
进去后查看下网页源代码接可以看到隐藏的 flag
在这里插入图片描述

总结

这是第二次参加CTF的校赛,有了第一次参加的经验,这次比赛中攻击和破解的思路更广了,收获颇丰,比赛耗时更长了,虽然有几位高手去做运维了,但据说还有浙大的大佬参加友谊赛。相比去年三四十名已经冲击到了第四还是有很大的进步,本人不是计算机专业的,但全凭兴趣和努力一样可以做的很好。

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值