CGCTF web wp

南邮的wp,这也是半年前打的。

签到题

水题,F12就有

md5 collision

又是md5的比较,还是加密后成科学计数法的绕过
payload: ?a=240610708

签到2

这题看了一会才发现是限制了字数,窒息
直接拿burpsuit来post就行

这题不是WEB

看了一会没什么好弄,就觉得一个要搞这张图片,换txt和zip格式都不行。于是用010editor打开,查nctf成功找到

层层递进

这题是真的秀,服了,全部展开后发现有一块迷之注释掉的js链接,然后仔细看发现flag

AAencode

这题看感觉和之前做的jother挺像,但一开始看起来完全是乱码,用火狐 更多->文字编码->unicode 更换编码后得到一堆颜文字,然后放到console里回车一下

单身二十年

点进去有个转跳的链接,再点一下可以看到明显有转跳,然后原网址F12发现href和转跳后的url不同,于是burpsuit抓包

php decode

这题看了一圈,是道解密题但不知道怎么下手,于是去查了一下gzinflate()这个函数,说是解压编码。然后再看一遍,感觉运行了就行。但跑了一次eval()报错,既让eval()只是运行不会输出,那就改成echo看看,成功出flag

文件包含

一看就是之前做过的题,file这个应该是用了include()才能读取,于是构造payload: php://filter/read=convert.base64-encode/resource=index.php ,然后base64解码

单身一百年也没用

应该是用burpsuit抓包,抓了后看了一下,发现头里有flag

Download~!

炸了~

既然是cookie就直接抓包,发现有login=0。题目里又提示了0==not,那就改成1出flag

MYSQL

这题提示查robots.txt,这个是给爬虫当索引的,于是可能暴露些东西。进去查到一段php,并提示sql.php

要int后是1024,但不是1024。弱类型对比导致不能用加字母绕过。这里想了一会,用各种方法都没出来,看了wp后感觉自己就是个zz,用浮点数就行:1024.1

GBK Injection

题目都说得怎么清楚的,一看就是宽字节注入。这个是利用unicode编码,当前一个字符ascii值大于7f时,会自动认为是双字节的字符,于是会把后面一个字节也吃了,使得用来转义的/消失

payload:

1
2
3
?id=0%df%27%20union%20select%201,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()%23
?id=0%df%27%20union%20select%201,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=0x63746634%23
?id=0%df%27%20union%20select%201,group_concat(flag)%20from%20ctf4%23

/x00

审计一下,又是很熟悉的ereg()和strops()
题目说有多种方法,暂时就想到两种
?nctf[]=1
?nctf=1%00%23biubiubiu

bypass again

md5的绕过,payload: ?a[]=1&b[]=2 就行了,或者用md5后科学计数法绕过

变量覆盖

进去发现有个source.php的链接,点开找到php部分

既然是extract()变量覆盖,就直接post个pass=1&thepassword_123=1即可

PHP是世界上最好的语言

炸了

伪装者

要我们伪装成本地进入,于是用X-Forwarded-For: 127.0.0.1。但burpsuit迷之卡住了

估计是flag放在HTTP头了,但炸了

上传绕过

这题分别上传jpg和php后给出了不同提示,感觉要到burpsuit上搞比较好
先分别filename=1.jpg和filename=1.php

然后在filename=1.jpg的uploads/后加1.php

这下就很清楚了,是通过filename的后缀来判断是php还是jpg,于是用%00截断
这里在hex里修改,然后建议在1.php加个空格以便寻找

出flag

SQL注入1

进去看到源码,读一下,user是admin就出flag。本来想着要用md5的ffifdyop,不过不知道怎么不行。于是只用usr来做,usr=admin’)#出flag

pass check

审计一下,就是个strcmp()绕过,用strcmp()字符串和数组比较返回0搞定
pass[]=1

起名字真难

之前碰到一样的题,转成16进制正好不是1~9得flag

密码重置

直接该账号不行,试着去改url参数也不行。然后F12直接改前端代码,成功

php 反序列化

做不了,过

SQL Injection

F12发现源码

看一看一开始不觉得难,但发现好像不是这样
htmlentities()这个函数在第二个参数设为ENT_QUOTES时会把单引和双引编码,get_magic_quotes_gpc()会判断magic_quotes_gpc是否为on,为on就用stripslashes()删去反斜号,这里就猜magic_quotes_gpc为off
这样问题就是怎么让单引闭合逃出来,这里观察一下,可以使username=\让$username后的’转义,name后的’与pass后的’闭合,然后password=%20or%201%23,让语句变成
SELECT * FROM users WHERE name='\' AND pass=' or 1# 得flag

综合题

这题绕了好几圈,一打开是jother编码,拿console进行解码

解码出提示另一个php,于是进去
然后提示在头部

然后提示着history of bash
这里不太懂就百度一下,大概就是有个.bash_history的文件用来存用过的命令行用的,然后在url里寻找这个文件

然后把flagbak.zip输入到url中下载下来,解压得flag

system

做不了,过

SQL注入2

看源码,是分离式登录,要求pass和查到的相同,同时pass用了md5()加密。既然提示用union就联合查询绕过
语句:’ union select md(5)#
好像里面是有admin这个用户的,搞得一开始一直得不到flag

综合题2

这题确实综合

看到这里应该是什么编码但没搞出来,然后说别用工具扫,那当然要先扫一下再说
然后继续看看,读一下源码,发现了so.php和cms说明

打开so.php没什么,然后看看cms说明

把几个重要的文件的功能都解释了一下,还给了admin表的结构,应该是sql注入了。于是修改file后的参数,把几个php都读一下

Index,passencode,say暂时都没什么用,so和about这两个php里,about.php给出了个地址,进去发现是后台登录页面

而so.php发现了注入点

antiinject.php和antixss.php读一下可以知道都是用于过滤,一个过滤sql一个过滤xss
虽然把’,空格,select,union都过滤了但这里没用要单引号闭合,于是可以直接注入
payload: soid=-1.Uniunionon(SelSelectect(1),(2),(3),(4))
Mysql本地能跑过,不知道为什么这里不行(也许是.的问题?

密码重置2

这题给了挺多提示的了
现在源码里找到admin的邮箱,同时也发现了 submit.php

然后既然提示了linux中vim异常退出时留下的备份文件,那就试试看.submit.php.swp。本来以为又要开linux,没想到直接给了源码

就一个很简单的绕过,要token长度为10并等于str类型的0。于是email用admin的,token=0.00000000就得flag

file_get_contents

这题F12找到源码

读一下,用php伪协议就能绕过

变量覆盖

这题依旧F12得到源码

$$key是个可变变量,可以让键名成为变量名,并获得值
构造语payload: ?name=meizijiu233 得flag

注意!!

签到题,复制粘贴就行

HateIT

Anonymous

进去就是一堆代码,读一下

一开始以为很容易,以为?func_name=SUCTF_$hash就搞定了。然后发现不行再认真读了一下,才发现$hash是个随机数,这就让人头大了。我以为是要找openssl_random_pseudo_bytes()的漏洞,查了一下发现原来是搞create_function()的漏洞

看create_function()的源码可知,虽然这个函数虽然是能声明函数名,但它还有一个匿名函数为\x00lambda_%d。这个%d会一直递增到最大长度然后结束,于是我们可以通过不停发请求使Apache的Pre-fore模式启动,然后启动新线程,使得%d为1。通过这里使函数名可知
于是用burpsuit大量发送请求攻击获得flag