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

本文详细介绍了Windows命令行中关于连接符的使用规则,包括双引号、圆括号和^符号的特殊含义。还讲解了set命令设置和引用变量的方法,以及如何通过延迟环境变量扩展和切割字符串来实现特定功能。此外,还讨论了for循环在命令行中的应用,如/L和/F参数,以及如何利用这些技巧绕过空格过滤执行命令。
摘要由CSDN通过智能技术生成

一、连接符

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"

二、set命令和Windows变量

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

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

set a=whoami      //设置变量a=1
echo a            //输出一个a字符
echo %a%          //输出变量a的值
%a%               //直接引用a变量内的值进行执行

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

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!来扩展变量,也就是可以使用感叹号字符来替代运行时的环境变量值。

三、切割字符串

命令行中存在类似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无此命令

echo %a%
echo %a:~-5%        //从后往前5个字符
echo %a:~-5,-1%     //从后往前5个字符并且去掉最后一个
echo %a:~-5,1%      //从后往前5个词组并且值展示第一个字符

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

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

四、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窗口

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键作为分隔符

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

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

在实战中利用:

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

whoami systeminfo
ipconfig dir

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

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

五、绕过空格过滤

(1) 常规执行方式

直接用%26替换空格

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

通过=绕过echo test123中的空格

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

(3)逗号和分号

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thunderclap_

点赞、关注加收藏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值