- 0
- 0
- 约3.56千字
- 约 18页
- 2025-10-24 发布于陕西
- 举报
第29讲命令执行漏洞原理与函数任毅
引言命令执行漏洞就是服务器端没有对客户端用户输入的命令进行过滤,导致用户可以通过任意拼接系统命令,使服务器端成功执行任意系统命令。
小测试为什么客户端能直接对服务器执行命令呢?
学习目标能描述命令执行漏洞的原理能描述命令执行漏洞相关的函数与运算符增加漏洞防范知识
命令执行漏洞简介命令执行漏洞就是服务器端没有对客户端用户输入的命令进行过滤,导致用户可以通过任意拼接系统命令,使服务器端成功执行任意系统命令。为什么客户端能直接对服务器执行命令呢,因为在服务器安装的web程序、web框架和web组件等外部程序有时候去需要调用执行命令的函数,所以如果没有对客户端用户输入的命令进行过滤,就会使得用户通过外部程序直接编写和执行系统的命令函数。命令执行漏洞主要是服务端没有对执行命令的函数做出过滤导致的。我们可通过编写一些系统函数来输入疑似存在命令执行接口的地方,来检测是否此接口是否存在命令执行漏洞。
常见的执行系统命令的函数(1)windows系统:whoami查看服务器用户名ipconfig查看本机IP地址子网掩码以及默认网关等systeminfo查看系统信息dir查看本目录文件netuser管理本地用户netlocalgroup管理本地组netsh管理本地信息……(2)Linux系统:whoami查看服务器用户名ifconfig(ipaddr)查看本机IP地址子网掩码以及默认网关等ls列出本目录文件pwd查看现目录的绝对路径su账户切换……
命令执行漏洞危害(1)继承Web服务程序的权限去执行系统命令(任意代码)或读写文件(2)反弹shell(3)控制整个网站甚至控制服务器(4)进一步内网渗透
PHP常见的命令执行函数和运算符(1)system()函数格式:stringsystem(string$command[,int$return_var])$command为执行的命令,return_var可选,用来存放命令执行后的状态码,system()函数执行有回显,将执行结果输出到页面上。例如:?phpsystem(whoami);?(2)passthru()函数格式:voidpassthru(string$command[,int$return_var])和system函数类似,$command为执行的命令,return_var可选,用来存放命令执行后的状态码,执行有回显,将执行结果输出到页面上。例如:?phppassthru(whoami);?(3)shell_exec()函数格式工:stringshell_exec(stringcommand)command是要执行的命令,shell_exec()函数默认无回显,通过echo可将执行结果输出到页面。例如:?phpechoshell_exec(whoami);?
PHP常见的命令执行函数和运算符(4)exec()函数格式:stringexec(string$command[,array$output[,int$return_var]])$command是要执行的命令,$output是获得执行命令输出的每一行字符串,$return_var用来保存命令执行的状态码(检测成功或失败)。exec()函数执行无回显,默认返回最后一行结果例1:?phpechoexec(whoami);?例2:?php$test=ipconfig;exec($test,$array);print_r($array);?
PHP常见的命令执行函数和运算符5)反引号`shell_exec()函数实际上仅是反撇号(`)操作符的变体,当禁用shell_exec时,`也不可执行。在php中称之为执行运算符,PHP将尝试将反引号中的内容作为shell命令来执行,并将其输出信息返回。例如:?phpecho`whoami`;?
PHP常见的命令执行函数和运算符(6)popen()函数格式:resourcepopen(string$command,string$mode)函数需要两个参数,一个是执行的命令command,另外一个是指针文件的连接模式mode,有r和w代表读和写。函数不会直接返回执行结果,而是返回一个文件指针,但是命令已经执行。popen()打开一个指向进程的管道,该进程由派生给定的command命令执行而产生。返回一个和fopen()所返回的相同的文件指针,只不过它是单向的(只能用于读或写)并且必须用pclose()来关闭,此指针可以用于fgets(),fgetss()和fwrite()例1:?phpp
原创力文档

文档评论(0)