南邮的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
既然是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 | ?id=0%df%27%20union%20select%201,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()%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迷之卡住了
Header
估计是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