目录
一、理论
二、实践
windows 10
a | b
a || b
a && b
a & b
kali linux
a | b
a || b
a && b
a ; b
一、理论
远程命令执行可以用到的命令连接符,windows系统和linux系统各有4个,其中3个是共有的,各有1个是特有的:
- windows系统:| 、||、&&、&
- linux系统:| 、||、&&、;
各连接符含义如下:
- |
管道操作符
可以把前一个命令的标准输出传输到后一个命令的标准输入
比如 a | b表示命令a的输出作为命令b的输入
在远程命令执行中,不管a的执行结果是否正确,b都可以执行
- ||
逻辑或
注意该命令有短路的情况
比如 a || b,如果命令a执行成功,则命令b不会被执行;只有命令a执行失败的情况下,才会执行命令b
- &&
逻辑与
注意该命令有短路的情况
比如 a && b,如果命令a执行失败,则命令b不会被执行;只有命令a执行成功的情况下,才会执行命令b
- &
windows特有
允许在一行内从左向右顺序执行多条命令,前一条命令失败也不影响后一条命令的执行
比如 a & b,不管a是否执行成功,b命令都会执行
- ;
(可能看不清,这是个分号)
linux系统特有
允许在一行内从左向右顺序执行多条命令,前一条命令失败也不影响后一条命令的执行
比如 a ; b,不管a是否执行成功,b命令都会执行
二、实践
下面分别在windows 10和kali linux中演示一下上面说的内容。
演示的时候用到的命令a为ping命令,命令b为whoami命令。
为啥用whoami命令呢?因为这个命令不但windows和linux系统都支持(windows xp不默认支持,可安装),而且显示的内容不同,不但可以用来判断是否有远程命令执行漏洞,还可以用来判断操作系统(linux系统中显示当前执行操作的用户名,windows系统中显示当前登录的域名和用户名)。
还有一点需要注意,命令和连接符之间有没有空格都可以
windows 10
a | b
a为真,b执行
a为假,b执行
a || b
a为真,b不执行
a为假,b执行
a && b
a为真,b执行
a为假,b不执行
a & b
a为真,b执行
a为假,b执行
kali linux
a | b
a为真,b执行
a为假,b执行
a || b
a为真,b不执行
a为假,b执行
a && b
a为真,b执行
a为假,b不执行
a ; b
a为真,b执行
a为假,b执行
目录
一、理论
二、实践
windows 10
a | b
a || b
a && b
a & b
kali linux
a | b
a || b
a && b
a ; b
一、理论
远程命令执行可以用到的命令连接符,windows系统和linux系统各有4个,其中3个是共有的,各有1个是特有的:
- windows系统:| 、||、&&、&
- linux系统:| 、||、&&、;
各连接符含义如下:
- |
管道操作符
可以把前一个命令的标准输出传输到后一个命令的标准输入
比如 a | b表示命令a的输出作为命令b的输入
在远程命令执行中,不管a的执行结果是否正确,b都可以执行
- ||
逻辑或
注意该命令有短路的情况
比如 a || b,如果命令a执行成功,则命令b不会被执行;只有命令a执行失败的情况下,才会执行命令b
- &&
逻辑与
注意该命令有短路的情况
比如 a && b,如果命令a执行失败,则命令b不会被执行;只有命令a执行成功的情况下,才会执行命令b
- &
windows特有
允许在一行内从左向右顺序执行多条命令,前一条命令失败也不影响后一条命令的执行
比如 a & b,不管a是否执行成功,b命令都会执行
- ;
(可能看不清,这是个分号)
linux系统特有
允许在一行内从左向右顺序执行多条命令,前一条命令失败也不影响后一条命令的执行
比如 a ; b,不管a是否执行成功,b命令都会执行
二、实践
下面分别在windows 10和kali linux中演示一下上面说的内容。
演示的时候用到的命令a为ping命令,命令b为whoami命令。
为啥用whoami命令呢?因为这个命令不但windows和linux系统都支持(windows xp不默认支持,可安装),而且显示的内容不同,不但可以用来判断是否有远程命令执行漏洞,还可以用来判断操作系统(linux系统中显示当前执行操作的用户名,windows系统中显示当前登录的域名和用户名)。
还有一点需要注意,命令和连接符之间有没有空格都可以
windows 10
a | b
a为真,b执行
a为假,b执行
a || b
a为真,b不执行
a为假,b执行
a && b
a为真,b执行
a为假,b不执行
a & b
a为真,b执行
a为假,b执行
kali linux
a | b
a为真,b执行
a为假,b执行
a || b
a为真,b不执行
a为假,b执行
a && b
a为真,b执行
a为假,b不执行
a ; b
a为真,b执行
a为假,b执行