switch绕过

switch在case判断条件时会将原先是字符串的内容剔除并转换成与判断语句相同的类型

因此,在下面这段代码中

会输出

但是,如果使用弱比较对其进行过滤,例如

if($a=='2')

这个条件是不会成立的,因为'2+0’不等于'2'

短标签绕过

如果php等关键字被过滤,可以尝试使用短标签,例如

<?= ...... ?>
<% ..... %>
<? ..... ?> #开启配置参数asp_tags=on,并且只能在7.0以下版本使用
<script language="php">  .... </script> #不需要修改参数开关,但是只能在7.0以下可用

[]绕过

如果[]不行,可以用{}代替

.user.ini

是php的一个全局配置文件,对整个web服务(nginx)起作用。可以用在文件上传漏洞

auto_prepend_file = <filename>         //包含在文件头
auto_append_file = <filename>          //包含在文件尾

假设上传了一个图片,如果在与这一文件同级目录下存在php文件,把上面的改成图片文件名,就会把图片包含进php文件里,例如

auto_prepend_file = 1.jpg

hash_hmac函数

[羊城杯 2020]Blackcat

hash_hmac() 使用 HMAC 方法生成带有密钥的哈希值

参数必需的描述
algo要使用的哈希算法名称,例如:“md5”,“sha256”,“haval160,4” 等。 如何获取受支持的算法清单,请参见 hash_hmac_algos() 函数。
data要进行哈希运算的消息。
key使用 HMAC 生成信息摘要时所使用的密钥。
raw_output设置为 TRUE 输出原始二进制数据, 设置为 FALSE 输出小写 16 进制字符串。

这个函数有一个特性,如果data传入的值为数组,那么就会返回NULL

.htaccess文件的特殊拼接字符

可以使用#来注释掉后面拼接的多余内容,#需要和前面的内容隔一个空格,并且#只能注释一行内容,可以使用反斜线来转义换行符,从而注释多行内容

php_value auto_prepend_fil
e .htaccess
#<?php system(‘cat /fla?’);?>\

这样是可以正常执行的。更多有关.htaccess的特性可以看这里