ctf php侧漏,CTF中PHP漏洞常见考点总结

783b447b0de25cd957487058d268ac57.jpg

系统变量$_POST // 获取 post 数据,是一个字典

$_GET // 获取 get 数据,是一个字典

$_COOKIE // 获取 cookie

$_SESSION // 获取 session

$_FILE // 获取上传的文件

$_REQUEST // 获取 $_GET,$_POST,$_COOKIE 中的数据

错误控制运算符

PHP 支持一个错误控制运算符:@。当将其放置在一个PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

变量默认值

当定义一个变量,如果没有设置值,默认为0

$_GET 和 $_POST

http://ctf4.shiyanbar.com/web/false.php?name[]=a&password[]=b

如果 GET 参数中设置 name[]=a,那么 $_GET['name'] = [a],php 会把 []=a 当成数组传入, $_GET 会自动对参数调用 urldecode。

$_POST同样存在此漏洞,提交的表单数据,user[]=admin,$_POST['user'] 得到的是['admin'] 是一个数组。

内置函数的松散性

strcmp

strcmp 函数的输出含义如下:

如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;

如果两者相等,返回 0。

5.2 中是将两个参数先转换成string类型。

5.3.3 以后,当比较数组和字符串的时候,返回是0。

5.5 中如果参数不是string类型,直接return了

$array=[1, 2, 3];

// 数组跟字符串比较会返回 0

//这里会输出 null,在某种意义上 null 也就是相当于 false,也就是判断为相等var_dump(strcmp($array, 'abc'));

sha1 和 md5 函数

md5 和 sha1 无法处理数组,但是 php 没有抛出异常,直接返回 faslesha1([]) === false

md5([]) === false

弱类型

当一个整形和一个其他类型行比较的时候,会先把其他类型 intval 再比较

intval

intval() 在转换的时候,会从字符串的开始进行转换直到遇到一个非数字的字符。即使出现无法转换的字符串,intval() 不会报错而是返回 0。var_dump(intval('2')) // 2

var_dump(intval('3abcd')) // 3

var_dump(intval('abcd')) // 0

这个时候 $a 的值有可能是 1002 union…if(intval($a) > 1000) {

mysql_query("select * from news where id=".$a)

}

is_numeric

PHP提供了is_numeric函数,用来变量判断是否为数字。但是函数的范围比较广泛,不仅仅是十进制的数字。

in_array

in_array函数用来判断一个值是否在某一个数组列表里面,通常判断方式如下:

in_array('b', array('a', 'b', 'c');

这段代码的作用是过滤 GET 参数 typeid 在不在 1,2,3,4 这个数组里面。但是,in_array 函数存在自动类型转换。如果请求,typeid=1’ union select.. 也能通过 in_array 的验证。if (in_array($_GET('typeid'], array(1, 2, 3, 4))) {

$sql="select …. where typeid=".$_GET['typeid']";

echo $sql;

}

== 和 ===

== 是弱类型的比较

=== 比较符则可以避免这种隐式转换,除了检查值还检查类型。

以下比较的结果都为 true

// 0x 开头会被当成16进制54975581388的16进制为 0xccccccccc

// 十六进制与整数,被转换为同一进制比较

'0xccccccccc' == '54975581388'

// 字符串在与数字比较前会自动转换为数字,如果不能转换为数字会变成01 == '1'

1 == '01'

10 == '1e1'

100 == '1e2'

0 == 'a' // a 转换为数字为 0

// 十六进制数与带空格十六进制数,被转换为十六进制整数

'0xABCdef' == ' 0xABCdef'

'0010e2' == '1e3'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值