ctfshow菜狗杯
这篇文章记录ctsshow上菜狗杯的部分题目的wp
misc
01.杂项签到
直接把文件放到winhex中,搜索ctfshow直接得到了flag
02.损坏的压缩包
附件是一个压缩包,把他放到winhex中进行查看,发现文件头是png
更改文件后缀为png,得到一张图片,上面显示flag
03.谜之栅栏
题目提示了找不同,用winhex的比较文件功能
两个文本拼接起来,得到flag
ctfshow{f0a6a0b721cfb949a7fb55ab5d8d210a}
04.你真的会数数吗
这里用010的词频统计直方图功能得到flag
ctfshow{a1b2d3e4g56i7j8k9l0}
web
01.web2 c0me_t0_s1gn
首先打开环境,打开F12查看到了半个flag和hint
接下来打开控制台,输入给的函数得到了另外一半flag
02.我的眼里只有$
这道题实在是看的我一愣一愣的(被自己菜哭了)
看大佬们的wp才有了思路,这是一道变量覆盖题,还有两个函数
extract (): 从数组中将变量导入到当前的符号表 。
extract($_POST);: 将post上来的数据直接都解析成变量的形式,在代码中可以直接使用
一共有36个$,所以我们要搞出36个变量,并且最后以一个变量用于执行命令(因为外面套的eval函数),具体是把上一个变量赋值给下一个变量,一直到第36个变量赋值为执行的命令。
题目给出的$_是第一个变量,写一个简单的python脚本来生成payload
先用ls命名看一下目录发现了/f1agaaa
然后输出这个就可以得到flag
03.抽老婆
首先打开环境,ctrl+u之后看到里面有download?file=
我传入了一个1之后到了这个界面
看到其中有一个app.py,返回两层下载一下这个文件进行一下查看
可以看到其中有个/secret_path_U_never_know路径,但是可以看出还需要绕过身份验证
这个用的应该是jwt认证,我们将isadmin里面的值更改后,使用密钥secret_key重新加密生成一个seesion,这里使用一个开源的脚本
github-flask-session-manager-master
生成之后我们在bp抓包之后用新生成的session替换掉以前的session,这样就可以得到flag了
04.一言既出
首先分析一下代码,首先通过GET的方式提交参数变量num
然后num要等于114514,然后num经过intval转换后值等于1919810或者不执行若比较表达式
当assert执行不成功的时候die,我们只需要把后面的部分给注释掉就可以读到flag
构造payload
/?num=114514);//
05.驷马难追
再次分析代码,发现把括号给过滤了,那就无法使用注释了,所以我们使用计算
构造Payload:
/?num=114514/114514*1919810
06.TapTapTap
首先打开ctrl+u查看源码
看到其中有一个js文件,打开看一下,里面有很多函数
看到了里面过关的的部分,其中有一个重要函数估计是掌管升级过关的
并且在此之前能看到控制台中能有很多执行的语句,我们把这个函数放到控制台中多运行几遍
最终能得到一个网址,最后得到了flag
07.Webshell
首先看代码,这是一道php反序列化的题目
我们传入的参数是cmd,并且对传入的参数值进行反序列化的操作。
其中有init()函数,init函数的主要作用是执行cmd的值,我们可以在反序列化语句中使用cmd命令
将webshell类拷贝出来,对他进行实例化,之后对cmd进行赋值操作
得到反序列化代码
将反序列化代码传入之后得到了两个文件名,一个是Index.php和一个flag.php
因为代码中过滤了flag,所以我们传入的语句中不能有flag
所以我们构造tac fl*,将得到的序列化代码传入,我们就得到了flag
08.化零为整
先观察代码,其中有两个重要函数
count($_GET) 这个函数的意义是获取get的参数个数
$result=$result.$_ GET[$i] 这个函数的意义是拼接字符串
每次只能输入一个字符,而汉字算两个字符,所以没法直接传入大牛
那么我们将大牛进行url编码,其结果为%E5%A4%A7%E7%89%9B
构造payload:?1=%E5&2=%A4&3=%A7&4=%E7&5=%89&6=%9B
这样我们就得到了flag
09.无一幸免
直接传入0=1就出来flag了,我也没看懂,可能是因为if语句里面是赋值而不是判断把
如果里面是判断的话就应该用
?0=214748364 //使用数组整型溢出绕过赋值式“永真”
?0[]=1 //数组绕过
这两种方式了
10.传说之下(雾)
一道前端小游戏,找到S关于得分的代码然后修改一下
这样之后进去游戏吃一个果子,就得到flag了,flag在控制台那里
09.遍地飘零
首先查看源代码
可以看到有一个foreach函数,那么应该是一个变量覆盖题
没有任何过滤,直接把flag的值赋给_GET即可
10.茶歇区
首先查看题目
要求我们拿到114514分,正常肯定是不可能,我查看前端代码和js代码没找到有用的函数
所以我们没法通过代码的方式来获得flag了
可以看到得分和物品数量都是整数所以我们可以考虑通过整数溢出的方法来
我们输入一个很大的数来查看回显
可以看到提交成功了,但是为什么是得到了零分(疑惑)
在此补充一下9223372036854775807 是 int64 上限
uint8 -> 0-255 uint16 -> 0-65535 uint32 -> 0-4294967295 uint36 -> 0-18446744073709551615 int8 -> -127-128 int16 -> -32768-32767 int32 -> -2147483648-2147483647 int64 -> -9223372036854775808-9223372036854775807这个是进行*10的运算所以溢出太多也没用了
提交932337203685477581提交了两次得到了flag
11.小舔田
首先查看题目,直接把源码给了,是一道php反序列化的题目
简单的PHP反序列化,重点是Ion_Fan_Princess::call()方法,直接输出flag。
exp:
把这个传参即可得到flag
12.LSB探姬
打开环境,我以为是一道文件上传的题目
但是经过一些尝试之后发现无法得到flag,只能再次跟随大佬的脚步
查看源码
发现命令执行,用bp抓包,然后执行ls命令
这样我们就得到了包含flag的文件
这样我们再用bp进行下一步操作,就得到了flag