ctfshow web php特性 89~97

#做点简单的


  • web 89

    在 PHP 中,intval()函数是用来获取变量的整数值。这个函数通过指定的进制来转换变量的值,默认是十进制。如果变量是对象,使用 intval()会产生一个 E_NOTICE 错误,并返回 1

    本题需要被preg_match函数检查是否包含数字,又要被intval函数转换后不为0

    实际上,preg_match当检测的变量是数组的时候会报错并返回0。而intval函数当传入的变量也是数组的时候,会返回1

    所以可以构造payload:

    ?num[]=1
    
  • web 90

    int intval($var, $base) 
    $var: 需要转换成整数的变量 
    $base: 转换所使用的进制
    

    $base默认值为 0, 会根据 $var 的格式来调整转换的进制

    如果 $var 以 0 开头, 使用 8 进制,如果 $var以 0x 开头, 使用 16 进制,否则, 使用 10 进制

    本题可以用进制绕过:

    ?num=010574
    ?num=0x117c
    

    可以用小数绕过:

    ?num=4476.1
    

    也可以用算式绕过:

    ?num=4476+1-1
    

    还可以用字符串绕过:

    ?num=4476a
    
  • web 91

    第一个正则 /^php$/im匹配必须保证:$a 中某一行完全是 “php”(忽略大小写)不能有其他字符在这一行

    第二个正则 /^php$/i 不匹配,说明整个字符串不是 “php”

    可以用%0a换行,例如构造:

    ?cmd=php%0a111
    
  • web 92

    与web90类似,但本题只能用进制绕过和小数绕过

  • web 93

    与web92类似,但由于字母被过滤,不能使用十六进制绕过

  • web 94

    strpos 是 PHP 中用于查找字符串首次出现位置的函数,区分大小写,并从字符串的起始位置(索引 0)开始计算

    所以说构造的payload中必须包含0但0不能在开头(即第0位)

    可以用小数绕过:

    ?num=4476.01
    

    也可以用换行符绕过:

    ?num=4476%0a0
    

    还可以用八进制绕过的变种:

    ?num=%0a010574
    ?num=+010574
    ?num=%09010574
    ?num= 010574
    
  • web 95

    与web94类似,但小数点被过滤了,且为弱比较,不能用小数绕过和换行符绕过

  • web 96

    可以用

    ?u=./flag.php
    ?u=/var/www/html/flag.php
    

    或者

    ?u=php://filter/convert.base64-encode/resource=flag.php
    
  • web 97

    md5强绕过,可以用数组绕过

    a[]=1&b[]=2
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值