2,ISCTF2024-1z_php
定义了一个数组禁用了,cat,tac,head,nl,more,less,tail,vi,sed,od,不区分大小写,绕过这些命令进行查看
先通过ls /查找到flag,下一步我们通过反斜杠,或者两个单引号或者双引号进行一个绕过
在PHP中,ca\t会被解析为cat,因为反斜杠会转义后续的字符。当system($call)执行时,实际执行的命令是cat,从而绕过了过滤逻辑。
空值绕过
在许多Unix/Linux命令中,字符串中的双引号(")或单引号(')用于包裹参数,以便正确解析包含空格或其他特殊字符的字符串。然而,当引号中为空(如""或' ')时,这些引号会被命令解析器忽略,而不会影响命令的实际执行。
3,ISCTF2024-25时晓山瑞希生日会
这种情况先抓包,然后更改一下ua头试试, ua头是一种向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息的标识。
它让我们是Project Sekai客户端请求才能加入,试试更改ua头,因为它要识别我们是不是Project Sekai客户端,大概率是通过ua头来识别
让我们从本地过去,这时候能想到xff头
它被各大 HTTP 代理、负载均衡等转发服务广泛使用
如果一个 HTTP 请求到达服务器之前,经过了三个代理 Proxy1、Proxy2、Proxy3,IP 分别为 IP1、IP2、IP3,用户真实 IP 为 IP0 , 服务端最终会收到以下信息 X-Forwarded-For: IP0, IP1, IP2
我们通过伪造xff头,让服务器以为请求来自本地绕过安全限制
时间不对,我们找一下能伪造时间的参数
找到了一个Date,它是一个标准的HTTP头部字段,用于记录请求或响应的生成时间。它通常由服务器在响应中设置,也可以由客户端在请求中设置。
4,ISCTF-UP!UPloader
遇到上传先上传一个文件抓个包
没有返回路径,但给了个目录,访问一下
一个文件包含,直接包含文件发现不行,试试包含upload.php
包含发现没有返回,试试伪协议读取
解密
if (move_uploaded_file($file['tmp_name'], $upload_dir . md5($dir_name) . '.' . $ext))
上传到了./uploads目录下,文件名重命名成md5加密+后缀
需要更改后缀重新上传
然后找到文件进行访问执行命令,得到flag
5,ISCTF-ezSSTI
我对这个ssti模板注入不太了解先学习一下
简单来说就是服务端接收攻击者的恶意输入以后,未经任何处理就将其作为 Web 应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了攻击者插入的可以破坏模板的语句,从而达到攻击者的目的。
模板渲染函数
这里主要有两种模板渲染函数,render_template_string()与render_template(),其中render_template是用来渲染一个指定文件的。render_template_string()则是用来渲染字符串的。而渲染函数在渲染的时候,往往对用户输入的变量不做渲染,即:{{}}在Jinja2中作为变量包裹标识符,Jinja2在渲染的时候会把{{}}包裹的内容当做变量解析替换。比如{{2*2}}会被解析成4。因此才有了现在的模板注入漏洞。往往变量我们使用{{恶意代码}}。正因为{{}}包裹的东西会被解析,因此我们就可以实现类似于SQL注入的漏洞
存在模板注入,我们直接使用fenjing工具
pip install fenjing -i https://pypi.tuna.tsinghua.edu.cn/simple 安装
python -m fenjing 查看安装成功了没
python -m fenjing webui 实现界面
会弹出这种页面
分析完成之后,执行命令获取flag
6,ISCTF-ezrce
虽然过滤了多数函数,但还有passthru可以用, passthru 是 PHP 中用于执行外部命令并直接输出结果的函数。
通过点的拼接绕过限制,用${IFS}
代替空格,用单引号将${IFS}
和/组合起来
?是一个通配符,表示匹配任意单个字符,绕过限制,*表示全部,绕过限制
7,Isctf-小蓝鲨的临时存储室
访问发现是一个文件上传,先上传一个木马
连接成功访问flag,发现没权限
在根目录发现一个文件,可以将 uplods 目录下所有 php 后缀的文件删除
定时任务有 root 权限,利用定时任务将根目录下的 flag 读取到 /tmp/1.txt,等待一会即可得到 flag
8,Isctf-小蓝鲨的冒险
第一层:考察 md5 弱比较和 parse_str 函数
0e开头后面全为数字,弱类型比较都等于0,用 s878926199a 绕过
parse_str 把字符串 a[0] 当成变量解析,从而赋值
第二层: num 中不能有字母,还不能等 2024,,同时还要绕过 intval 函数
使用进制转化绕过,八进制中不含字母,可以使用0 3750 绕过
第三层:直接写个 flag 就绕过了
9,ISctf-ezserialize
构造
$payload = new User('hacker');
$payload->isAdmin = true;
echo serialize($payload);