命令注入

OS命令注入(也称为shell注入)是一种web安全漏洞,它允许攻击者在运行应用程序的服务器上执行任意操作系统(OS)命令,通常会完全破坏应用程序及其所有数据。通常,攻击者可以利用OS命令注入漏洞来破坏宿主基础设施的其他部分,利用信任关系将攻击转移到组织内的其他系统。

前置知识

说到命令注入,我们不得不提到命令注入中几个常用的符号。

&&

语法格式如下:
command1 && command2 [&& command3 ...]
1 命令之间使用 && 连接,实现逻辑与的功能。
2 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
3 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。

|(管道符号)

| 表示管道,上一条命令的输出,作为下一条命令的参数

||

语法格式如下:
command1 || command2 [|| command3 ...]
1 命令之间使用 || 连接,实现逻辑或的功能。
2 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。
3 只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。

&

& 表示将任务置于后台执行

;(分号)

多行语句用换行区分代码快,单行语句一般要用到分号来区分代码块

``和$()

在bash中,$( )与` `(反引号)都是用来作命令替换的。
各自的优缺点:
1. ` ` 基本上可用在全部的 unix shell 中使用,若写成 shell脚本,其移植性比较高,但反单引号容易打错或看错。
2. $()更有可读性,但是$()并不是所有shell都支持。

()和{}

如果希望把几个命令合在一起执行,shell提供了两种方法。既可以在当前shell也可以在子shell中执行一组命令。
(command1;command2;command3....)
{ command1;command2;command3…} #第一条命令必须与左边的括号有一个空格,最后一条命令一定要有分号

相同点:
()和{}都是把一串的命令放在括号里面,并且命令之间用;号隔开
不同点
()只是对一串命令重新开一个子shell进行执行,{}对一串命令在当前shell执行
()最后一个命令可以不用分号,{}最后一个命令要用分号
()里的第一个命令和左边括号不必有空格,{}的第一个命令和左括号之间必须要有一个空格
()和{}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令

Shell 输入/输出重定向

来自菜鸟教程:

大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。
命令说明:
command > file:将输出重定向到 file。
command < file:将输入重定向到 file。
command >> file:将输出以追加的方式重定向到 file。
n > file:将文件描述符为 n 的文件重定向到 file。
n >> file:将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m:将输出文件 m 和 n 合并。
n <& m:将输入文件 m 和 n 合并。
<< tag:将开始标记 tag 和结束标记 tag 之间的内容作为输入。

需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

正则表达式

^
匹配输入字符串的开始位置。

$
匹配输入字符串的结束位置。

*
匹配前面的子表达式零次或多次

+
匹配前面的子表达式一次或多次。

?
点击收藏 | 8 关注 | 2
  • 动动手指,沙发就是你的了!
登录 后跟帖