php get或post变量名中非法字符转化规则

如果传递的参数变量名中含有非法字符点。按理说构造这咱变量名不规范,要避免。CTF赛题中会有这个知识点。

但是如果存在这种非法变量,传入的时候也会按规则自动转化,这里注意变化规则如下:

在php中变量名只有数字字母下划线,被get或者post传入的变量名,如果含有空格、+、.、[则会被转化为_,但php中有个特性就是如果传入[,它被转化为_之后,后面的字符就会被保留下来不会被替换。因此我们可以构造出来该变量名咯。

diao_s.i ==》diao_s_i(也就是PHP网页用diao_s_i可以正常接收diao_s.i传递过来的值,中间会有个自动转换的过程

diao[s.i ==> diao_s.i,利上面的[经过一次转换后可以正常接收

一个含有该知识点的CTF题

<?php
$a=$_SERVER['argv'];
$c=$_POST['fun'];
if(isset($_POST['CTF_SHOW'])&&isset($_POST['CTF_SHOW.COM'])&&!isset($_GET['fl0g'])){
    if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\%|\^|\*|\-|\+|\=|\{|\}|\"|\'|\,|\.|\;|\?/", $c)&&$c<=18){
         eval("$c".";");  
         if($fl0g==="flag_give_me"){
             echo $flag;
         }
    }
}

payload的构造有好多种,这里说一下官方的解法,注意参数的变化方式:

CTF_SHOW=&CTF[SHOW.COM=&fun=echo $flag
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值