奇淫巧计 空白字符绕过

admin 2024年12月6日17:29:34评论14 views字数 2336阅读7分47秒阅读模式

0x02 函数说明

1.is_numeric函数

检查是否为数字字符串,%00可绕过该函数

奇淫巧计 空白字符绕过

2.strrev函数

将数字/字符串反转

奇淫巧计 空白字符绕过

3.自定义is_palindrome_number函数

回文数字,正读倒读都一样

奇淫巧计 空白字符绕过

0x03 空白字符 CTF题解析

1.代码第1行:当传入payload:number=%00%0c191后,首先isset判断GET number参数是否存在,DEBUG:1.$GET:{number => "f191"},这里只做了一个简单判断,所以直接Bypass。

if(!isset($_GET['number'])){//判断number参数是否存在,1.$GET:{number => "f191"}    header("hint:26966dc52e85af40f59b4fe73d8c323a.txt"); //HTTP头显示hint 26966dc52e85af40f59b4fe73d8c323a.txt    die("have a fun!!"); //die — 等同于 exit()}
奇淫巧计 空白字符绕过

2.代码第1行:foreach循环$_GET, $_POST值赋值给$global_var,DEBUG:2.$glonal_var:{number => f191}

代码第2行:将$global_var的值foreach循环赋值给$key => $value,DEBUG:3.$global_var:$key:"number" $value:"/f191"

代码第3行:trim去除首尾空白字符,DEBUG: 4.$value:"/f191"

代码第4行:is_string判断$value是否为字符串且与addslashes($value)相等,DEBUG: 4.$value:"/f191",这里由于被""包裹,所以是一个字符串,Bypass。

foreach([$_GET, $_POST] as $global_var) {  //foreach 语法结构提供了遍历数组的简单方式,2.$glonal_var:{number => f191}    foreach($global_var as $key => $value) {//3.$global_var:$key:"number" $value:"/f191"        $value = trim($value);  //trim — 去除字符串首尾处的空白字符(或者其他字符)        is_string($value) && $req[$key] = addslashes($value); // is_string — 检测变量是否是字符串,addslashes — 使用反斜线引用字符串,4.$value:"f191"    }}
奇淫巧计 空白字符绕过

3.代码第1-6行:is_numeric检测变量是否为一个数字或者数字字符串,是数字就报错,而传入的的值为f191,不是数字,即而Bypass is_numeric函数,5.$_REQUEST: number f191

代码第7-12行:strval(intval)获取变量的整数字符串,需要不等于原值,不然就报错,而原值为f191,获取整数字符串值为0,故而不相等,Bypass,5.$_REQUEST: number f191

代码第16行:$value1使用intval获取number的整数字符串为191,6.$req{number => f191} $value1:191

代码第17行:$value2使用intval和strrev获取证书字符串的倒叙,同样也是191,7.$req{number => f191} $value2:191

代码第19-21行:判断$value1和$value2是否不相等,不相等报错。此时$value1和$value2均等于191,故而相等,Bypass。

代码第25-26行:is_palindrome_number自定义函数判断number的值是否为一个回文函数,是的话输出这个数是一个回文函数,不输出flag。而number的值为/f191,所以不为一个回文函数,Bypass此处判断,输出flag。8.$req: {number => f191}

if(is_numeric($_REQUEST['number'])) //is_numeric — 检测变量是否为数字或数字字符串 5.$_REQUEST: number f191{    $info="sorry, you cann't input a number!";}elseif($req['number']!=strval(intval($req['number']))) //intval — 获取变量的整数值{    $info = "number must be equal to it's integer!! ";}else{    $value1 = intval($req["number"]);//6.$req{number => f191} $value1:191    $value2 = intval(strrev($req["number"]));//7.$req{number => f191} $value2:191    if($value1!=$value2){//8.$value1:191 $value2:191        $info="no, this is not a palindrome number!";    }    else    {        if(is_palindrome_number($req["number"])){//9..$req: {number => f191}            $info = "nice! {$value1} is a palindrome number!";        }        else        {            $info=$flag;//14.输出flag xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx        }    }}
奇淫巧计 空白字符绕过

 

原文始发于微信公众号(鲲哥的Bypass之旅):奇淫巧计 空白字符绕过

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月6日17:29:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   奇淫巧计 空白字符绕过https://cn-sec.com/archives/2496247.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息