Windows下命令执行绕过技巧总结(渗透测试专用)

一、连接符

1、双引号

  • 不要求双引号闭合

  • 举例:"who"a"mi" //闭合的 "who"a"mi //不闭合的

2、圆括号

  • 必须在两边,不能包括中间的字符。

  • 举例:((whoami))

3、^符号(转译符号)

  • 不可以在结尾,同样不要求闭合

  • 不能同时连续加2个^符号,因为^号是cmd中的转义符,跟在他后面的符号会被转义

  • 举例:wh^o^a^mi

4、常规替换

  • %变量名:需要替换的内容=值%

  • 如下举个例子:@符号能够将值传递到前面的环境变量中,如下就是将test传到c@alc的@位置,输出将是ctestalc。

  • cmd /c "set x=c@alc & echo %x:@=test% | cmd"

Windows下命令执行绕过技巧总结(渗透测试专用)_第1张图片

二、set命令和Windows变量

  • %任意字符%默认为空值

  • set用来设置一个变量,%%括起来的用来引用变量,举例如下:

set a=whoami      //设置变量a=1
echo a            //输出一个a字符
echo %a%          //输出变量a的值
%a%               //直接引用a变量内的值进行执行
Windows下命令执行绕过技巧总结(渗透测试专用)_第2张图片

  • 多环境变量合并拼接利用

cmd /c"set a=ser&& set b=ne&& set c=t u&&call %b%%c%%a%"
cmd /c "string":表示:执行字符串string指定的命令,然后终止。
cmd /V:ON /C "set a=ser&& set b=ne&& set c=t u&& !b!!c!!a!"
/v:on : 启用延迟的环境变量扩展,启用的话,可以不使用call命令来扩展变量,使用%var%或!var!来扩展变量,也就是可以使用感叹号字符来替代运行时的环境变量值。
Windows下命令执行绕过技巧总结(渗透测试专用)_第3张图片

Windows下命令执行绕过技巧总结(渗透测试专用)_第4张图片

三、切割字符串

命令行中存在类似php和python之类的语言中截取字符串的用法。

截取字符串的语法:%变量名:~x,y%

  • 即对变量从第x个元素开始提取,总共取y个字符。

  • 当然也可以写-x,-y,从后往前取

  • 写作-x,可取从后往前数第x位的字符开始,一直到字符的末尾

  • -y来决定少取几个字符

  • 举例如下:

set a=whoami
echo %a%
%a:~0%                   //取出a的值中的所有字符            //此时正常执行whoami
%a:~0,6%                 //取出a的值,从第0个位置开始,取6个值 //此时因为whoami总共就6个字符,所以取出后正常执行whoami
%a:~0,5%                 //取5个值,whoam无此命令
%a:~0,4%                 //取4个值,whoa无此命令
Windows下命令执行绕过技巧总结(渗透测试专用)_第5张图片

echo %a%
echo %a:~-5%        //从后往前5个字符
echo %a:~-5,-1%     //从后往前5个字符并且去掉最后一个
echo %a:~-5,1%      //从后往前5个词组并且值展示第一个字符
Windows下命令执行绕过技巧总结(渗透测试专用)_第6张图片

  • 综合利用:先用set命令查看所有的环境变量及值,然后根据自己想要的命令进行截取拼接。

  • 空格被过滤的情况下也可以根据set变量的值中有空格的值进行提取。

Windows下命令执行绕过技巧总结(渗透测试专用)_第7张图片

四、for循环拼接命令

For循环经常被用来混淆处理cmd命令,使得cmd命令看起来复杂且难以检测。最常用的For循环参数有 /L,/F参数。

格式为:

  • for 参数 %变量名 in (相关文件或命令) do 执行的命令

具体利用:

  • for /L %variable in (start,step,end) do command [command-parameters]

  • 该命令表示以增量形式从开始到结束的一个数字序列。使用迭代变量设置起始值(start).然后逐步执行一组范围的值,直到该值超过所设置的终止值 (end)。

  • /L 将通过对start与end进行比较来执行迭代变量。

  • 如果start小于end,就会执行该命令,否则命令解释程序退出此循环。

  • 还可以使用负的 step以递减数值的方式逐步执行此范围内的值。例如,(1,1,5) 生成序列 1 2 3 4 5,而 (5,-1,1) 则生成序列 (5 4 3 2 1)。

举例利用:

cmd /C "for /L %i in (1,1,5) do start cmd"            //会执行打开5个cmd窗口
Windows下命令执行绕过技巧总结(渗透测试专用)_第8张图片

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
(file-set) 为文件名,for会依次将file-set中的文件打开,并且在进行到下一个文件之前将每个文件读取到内存,按照每一行分成一个一个的元素,忽略空白行。
("string")代表字符串
('command')代表命令。

举例利用:

假如文件aa.txt中如下内容:

第1行第1列 第1行第2列;第1行第3列;第1行第4列
第2行第1列 第2行第2列;第2行第3列;第2行第4列

参数一:for /F %i in (aa.txt) do echo %i //默认以空格或者Tab键作为分隔符

Windows下命令执行绕过技巧总结(渗透测试专用)_第9张图片

参数二:for /F "delims=;" %i in (aa.txt) do echo %i //将;作为分隔符进行分割

Windows下命令执行绕过技巧总结(渗透测试专用)_第10张图片

参数三:for /F "tokens=2 delims=;" %i in (aa.txt) do echo %i //指定用; 作为分隔符并且提取第2列数据

Windows下命令执行绕过技巧总结(渗透测试专用)_第11张图片

在实战中利用:

文件aa.txt中内容为自己的命令

whoami systeminfo
ipconfig dir

参数一:for /F %i in (aa.txt) do %i //直接执行第一行第一个和第二行第一个参数的命令

Windows下命令执行绕过技巧总结(渗透测试专用)_第12张图片

参数二:for /F "tokens=2 delims= " %i in (aa.txt) do %i //指定用 空格 作为分隔符并且执行第二列参数命令

Windows下命令执行绕过技巧总结(渗透测试专用)_第13张图片
Windows下命令执行绕过技巧总结(渗透测试专用)_第14张图片

五、绕过空格过滤

(1) 常规执行方式

直接用%26替换空格

(2) echo输出(绕过空格)

通过=绕过echo test123中的空格

举例:http://xxxx.com/test.php?addr=baidu.com%26echo=test123

(3)逗号和分号

逗号与分号某些情况可以当作一个终止符号或者代替空格。

你可能感兴趣的:(#,命令执行漏洞,web安全,渗透测试,命令执行,Windows,waf绕过)