使用系统命令是一项危险的操作,尤其在你试图使用远程数据来构造要执行的命令时更是如此。如果使用了被污染数据,命令注入漏洞就产生了。
exec()是用于执行shell命令的函数。它返回执行并返回命令输出的最后一行,但你可以指定一个数组作为第二个参数,这样输出的每一行都会作为一个元素存入数组。使用方式如下:
3 |
$last = exec('ls', $output, $return); |
6 |
echo "Return [$return]"; |
假设ls命令在shell中手工运行时会产生如下输出:
3 |
-rw-rw-r-- 1 chris chris 0 May 21 12:34 php-security |
4 |
-rw-rw-r-- 1 chris chris 0 May 21 12:34 chris-shiflett |
当通过上例的方法在exec()中运行时,输出结果如下:
4 |
[1] => -rw-rw-r-- 1 chris chris 0 May 21 12:34 php-security |
5 |
[2] => -rw-rw-r-- 1 chris chris 0 May 21 12:34 chris-shiflett |
这种运行shell命令的方法方便而有用,但这种方便为你带来了重大的风险。如果使用了被污染数据构造命令串的话,攻击者就能执行任意的命令。
我建议你有可能的话,要避免使用shell命令,如果实在要用的话,就要确保对构造命令串的数据进行过滤,同时必须要对输出进行转义:
06 |
/* Filter Input ($command, $argument) */ |
08 |
$shell['command'] = escapeshellcmd($clean['command']); |
09 |
$shell['argument'] = escapeshellarg($clean['argument']); |
11 |
$last = exec("{$shell['command']} {$shell['argument']}", $output,$return); |
尽管有多种方法可以执行shell命令,但必须要坚持一点,在构造被运行的字符串时只允许使用已过滤和转义数据。其他需要注意的同类函数有passthru( ), popen( ), shell_exec( ),以及system( )。我再次重申,如果有可能的话,建议避免所有shell命令的使用。
- Samba远程Shell命令注入执行漏洞
CVE:CVE-2007-2447 原理: Samba中负责在SAM数据库更新用户口令的代码未经过滤便将用户输入传输给了/bin/sh.如果在调用smb.conf中定义的外部脚本时,通过对/bin/s ...
- Natas29 Writeup(Perl命令注入、00截断、绕过过滤)
Natas29: 本关打开后,可以看到一个下拉列表,选择不同的内容,会得到不同的大量文本的页面. 观察url部分:http://natas29.natas.labs.overthewire.org/i ...
- CVE-2020-15778 OpenSSH命令注入漏洞复现
一.漏洞概要 OpenSSH 8.3p1及之前版本中的scp允许在scp.c远程功能中注入命令,攻击者可利用该漏洞执行任意命令.目前绝大多数linux系统受影响. 参考链接:https://githu ...
- 《Linux命令行与shell脚本编程大全》- 读书笔记2 - 更多的bash shell命令
更多的bash shell命令 想检测进程,需要熟悉ps命令的用法.ps命令好比工具中的瑞士军刀,它能输出运行在系统上的所有程序的许多信息.默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户 ...
- Linux高性能服务器编程,书中的 shell 命令
记录<Linux高性能服务器编程>书里面讲解到的若干 shell 命令 arp 命令查看ARP高速缓存: [root@VM_0_10_centos heliang]# arp -a ? ( ...
- shell命令执行hive脚本(hive交互,hive的shell编程)
Hive执行方式 Hive的hql命令执行方式有三种: 1.CLI 方式直接执行 2.作为字符串通过shell调用hive –e执行(-S开启静默,去掉"OK","Tim ...
- Linux从入门到进阶全集——【第十四集:Shell编程-export命令】
参考: https://www.cnblogs.com/guojun-junguo/p/9855356.html 功能说明:设置或显示环境变量. 语 法:export [-fnp][变量名称]=[变量 ...
- 在程序中执行shell命令
在linux系统下的操作中我们会经常用到shell命令来进行,一开始学习进程的时候对于shell命令也进行了思考,认为shell命令就是一个进程的外壳,经过了后来的学习对于这一点也有了更多的认识. 用 ...
- Linux 下 Shell 命令的分类及用法
当你打算真正操纵好你的 Linux 系统,没有什么能比命令行界面更让你做到这一点.为了成为一个 Linux 高手,你必须能够理解 Shell命令的不同类型,并且会在终端下正确的使用它们. 在 Linu ...
随机推荐
- Application.Exit()结束程序,但线程还在的解决方法
转自:http://bbs.51cto.com/thread-970057-1.html 出现此情况大多原因是使用了多线程编程,或者你所调用的dll使用了多线程. 我们知道,一般情况下的线程执行完指 ...
- ubantu下重启apache
启动apache服务 sudo /etc/init.d/apache2 start重启apache服务sudo /etc/init.d/apache2 restart停止apache服务 sudo / ...
- ubuntu下使用C语言开发一个cgi程序
主要步骤是: 1. 开发一个C程序(在标准输出中输出HTML字符串) 2. 复制到apache2的cgi-bin目录去 3. 在httpd.conf中开启cgi功能(我似乎没用到,也可以使用cgi) ...
- smtp协议
一.smtp命令 1.HELO 向服务器标识用户身份 2.MAIL 初始化邮件传输mail from: <xxx> 3.RCPT 标识单个的邮件接收人:常在MAIL命令后面可有多个rcpt ...
- oracle利用merge更新一表的某列数据到另一表中
假设你有两张表 t1 表 -------------------------- id | name | pwd 1 | n1 | t2 表 ------------- ...
- Jump
hdu4862:http://acm.hdu.edu.cn/showproblem.php?pid=4862 题意:给你n*m的方格,每个方格中有一个数(0---9),然后你每次可以选择一个点开始,这 ...
- Git初体验
http://www.cnblogs.com/yejiurui/archive/2013/07/29/3223153.html
- PhpStorm常用快捷键大全
常用快捷键(keymaps:Default情况下)注意:部分快捷键,必须在没有更改快捷键的情况下才可以使用 功能键Esc键 返回编辑器窗口F1 打开在线帮助F2 (Shift+F2) 下/上高亮错误或 ...
- 如何查看SQL Server的数据库实例名
其实一般默认就是MSSQLSERVER (注意,就是英文大写). 点击开始,运行,services.mcs 然后查阅所有SQL Server的项,其中括号中字符串的就是实例名 reference: ...
- 根据body的内容 查找h2标签的@class="subtitle"的值
<pre name="code" class="html"><body class="api jquery listing" ...