目录
week1
泄漏的秘密
Begin of Upload
Begin of HTTP
ErrorFlask
Begin of PHP
R!C!E!
EasyLogin
week2
游戏高手
include 0。0
ez_sql
Unserialize?
Upload again!
R!!C!!E!!
week1
泄漏的秘密
使用ctf-scan.py(https://github.com/kingkaki/ctf-wscan)扫描敏感信息,扫出www.zip,index.php和robots.txt里面各一半flag
Begin of Upload
前端检测文件拓展名:
先上传个图片文件,然后抓包修改后缀名为php,写入一句话:
解析成功:
读flag:
Begin of HTTP
按照它的提示传入get和post参数:
查看源码看到secret信息
base64解码
需要修改power为ctfer,抓包发现是Cookie参数,修改
提示用NewStarCTF2023浏览器,修改User Agent为:NewStarCTF2023
提示从newstarctf.com访问,修改Referer为newstarctf.com
本地用户,修改X-Real-IP为127.0.0.1,得到flag
ErrorFlask
输出number1和number2的和,提示不是ssti模板注入,flag在源码里面
传入字符,构造报错,查看源码,得到flag
Begin of PHP
数组绕过一切
R!C!E!
EasyLogin
爆破admin密码为000000,flag在重定向跳转页面
week2
游戏高手
直接修改分数得到flag
include 0。0
文件包含rot和base被过滤了,还有一个十六进制的可以用
?file=php://filter/read=convert.iconv.utf-8.utf-16le/resource=flag.php
ez_sql
先判断闭合方式,单引号异常
双引号正常,所以是单引号闭合
判断字段数,有过滤用大小写绕过,Order by 6回显异常,所以字段数为5
联合查询查数据
查表名,注意大小写绕过
查列名,注意大小写绕过
查列内容,注意大小写绕过
Unserialize?
当一个对象销毁时,__destruct魔术方法自动被调用,所以反序列化的时候对象销毁,__destruct魔术方法自动被调用。
构造poc
看到flag文件
用head命令读取flag
对于private变量,我们需要在类名和字段名前面都会加上\0的前缀
如果想放在浏览器中直接提交,我们可以将\0换成%00
Upload again!
黑名单限制了后缀名,还检测文件内容,Apache 服务器传入.htaccess文件,解析图片文件为php,文件内容使用base64编码绕过文件内容检测
上传.htaccess文件,解析shell.gif为php,文件内容base64编码
上传图片马,base解码内容为<?php eval($_POST["shell"])?>
解析成功,读取flag
R!!C!!E!!
git源码泄露得到源码
无参rce,查看getallheaders()函数 -> 取得服务器响应一个 HTTP 请求所发送的所有头信息。发现第二个是X-Request-ID这里实际情况可能不一样,
没有过滤next,构造poc读取flag