【渗透测试-web安全】命令注入
- 什么是命令
- 攻击过程
- DOS命令
- 命令注入的成立条件
- WEB系统中哪些函数能够执行系统命令
什么是命令
DOS命令、Shell命令等执行命令,可以对系统进行很多敏感性的操作
攻击过程
黑客构造命令–>服务器程序解析–>对命令进行拼接–>web端执行执行对应多余的拼接命令–>执行的命令作用于服务器
DOS命令
使用&进行命令拼接、ipconfig查询ip地址信息、net user 查看当前用户、dir查看当前目录、find “hello” ./test.txt执行查找操作
|作为管道命令,前面命令的输出时后面命令的输入
命令注入的成立条件
有调用可执行系统命令需求的系统
函数或函数的参数可控的系统
命令能够实现拼接的系统(使用系统命令白名单就能打破这一条件)
WEB系统中哪些函数能够执行系统命令
基本命令 | 语法 | 返回值 | 函数功能 |
system() | string system(string command, int [return_var]); | 成功:输出的最后一行,失败:FALSE | 执行命令,并且显示输出 |
exec() | string exec(string command, string [array], int [return_var]); | 命令执行结果的最后一行内容 | 执行 command 指定的命令 |
shell_exec() | string shell_exec ( string $cmd ) ; | 命令执行的输出,出错 NULL | 通过 shell 环境执行命令 |
eval() | mixed eval ( string $code ) | 返回 NULL,执行错误返回 FALSE | 把 code 作为PHP代码执行 |
popen() | resource proc_open ( string $cmd , array $descriptorspec , array &$pipes [, string $cwd = NULL [, array $env = NULL [, array $other_options = NULL ]]] ) | 返回表示进程的资源类型,如果失败,返回 FALSE。 | 类似 popen() 函数,提供更加强大的控制程序执行的能力 |
passthru() | void passthru ( string $command [, int &$return_var ] ) | 没有返回值 | 执行外部程序并显示原始输出 |