PHP命令执行漏洞初探

PHP命令执行漏洞初探

PHP 命令执行

PHP提供如下函数用于执行外部应用程序;例如:system()、shell_exec()、exec()、passthru()

system()

<?php
    $host = $argv[1];
    system("ping ".$host);
?>

在服务端运行php.exe index.php 192.168.2.1

执行php.exe index.php "|net user"(这里的“|”符号的作用时屏蔽源代码的ping字符)

passthru() — 执行外部程序并且显示原始输出
proc_open() — 执行一个命令,并且打开用来输入/输出的文件指针。
shell_exec() — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
popen() — 通过 popen() 的参数传递一条命令,并对 popen() 所打开的文件进行执行

eval()

PHP中的eval()函数可以把参数字符串按照PHP代码来动态执行,输入的字符串必须是合法的PHP代码字段并以分号结尾

<?php
    eval($_REQUEST['code']);
    // $_REQUEST:支持GET和POST两种请求的数据
?>

在URL中插入?code=phpinfo();利用GET方法向服务器请求,服务端的index.php处理代码中的eval()函数会将请求的字符串做为PHP代码执行

动态调用

<?php
    function T1() {
        echo "<script>alert('Hello,World!');</script>";
        return 0 ;
    }

    function T2() {
        echo "<script>alert('Error');</script>";
        return 0 ;
    }

    $fun = $_REQUEST['fun'];
    echo $fun();
    // 当fun的value为:phpinfo时,在php的echo中构成 phpinfo()
?>

当然了,并不会仅仅只执行一个phpinfo()、T1()……

<?php
    $fun = $_GET['fun'];
    $par = $_GET['par'];
    $fun($par);
?>

PHP的其它危险函数

array_map()

<?php
    $arr = $_GET['arr'];
    $array = array(1,2,3,4,5);
    $new_array = array_map($arr, $array);
?>

array_map() 返回用户自定义函数处理后的数组

assert()

bool assert(mixed $assertion [,string $description])

检查一个断言是否为False;把字符串$description作为PHP代码进行执行

preg_replace()

执行一个正则表达式的搜索和替换

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

pattern 要搜索的正则匹配模式

replacement 用于替换的字符串或数组

subject 要进行搜索和替换的字符串或数组

include

include $file

在变量$file可控的情况下,我们就可以包含任意文件,从而达到getshell的目的;

由于不同的配置环境和不同的包含文件分为:远程文件包含和本地文件包含

文件操作函数

copy:拷贝文件

file_get_contents:将整个文件读入为一个字符串

file_put_contents:将一个字符串写入文件

file:把整个文件读入一个数组中

fopen:打开文件或者 URL

move_uploaded_file:将上传的文件移动到新位置

readfile:输出文件

rename:重命名一个文件或目录

rmdir:删除目录

unlink & delete:删除文件

特殊函数

phpinfo():这个文件里面包含了PHP的编译选项,启动的扩展、版本、服务器配置信息、环境变量、操作系统信息、path变量等非常重要的敏感配置信息

使用软连接读取文件内容

symlink():一般是在linux服务器上使用的,为一个目标建立一个连接,在读取这个链接所连接的文件的内容,并返回内容

环境变量

getenv:获取一个环境变量的值

putenv($a) :添加$a到服务器环境变量,但环境变量仅存活于当前请求期间。 在请求结束时环境会恢复到初始状态。

推荐文章: PHP代码审计——常见危险及特殊函数

原文地址:https://www.cnblogs.com/wangyuyang1016/p/11794817.html

时间: 2024-11-05 18:45:23

PHP命令执行漏洞初探的相关文章

Metasploit溢出java RMI SERVER命令执行漏洞

利用java RMI SERVER命令执行漏洞,获得目标主机root权限. Java RMI Server的RMI注册表和RMI激活服务的默认配置存在安全漏洞,可被利用导致代码执行. 一.利用nmap工具扫描目标主机 1.1使用nmap命令对目标主机进行扫描.单击桌面空白处,右键菜单选择"在终端中打开". 1.2在终端中输入命令"nmap –sV  192.168.1.3",对目标主机进行端口扫描,发现开放1099端口. 1.3在终端中输入命令"msfco

ASP代码审计 -4.命令执行漏洞总结

命令执行漏洞: 保存为cmd.asp,提交链接: http://localhost/cmd.asp?ip=127.0.0.1 即可执行命令 <%ip=request("ip") response.write server.createobject("wscript.shell").exec("cmd.exe /c ping "&ip&"").stdout.readall %> 利用方式: http:

命令执行漏洞

0x01:命令执行漏洞简介 用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码 0x02:命令执行 VS 代码执行 命令执行漏洞: 直接调用操作系统命令 代码执行漏洞: 靠执行脚本代码调用操作系统命令 命令执行原理: 在操作系统中,"&.|.||"都可以作为命令连接符使用,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导

DVWA系列之9 high级别命令执行漏洞

将DVWA Security切换到high级别,在Command Execution中查看网页源码. 这里首先也是用stripslashes函数对获取到的IP地址进行了处理,主要是为了去掉转义后添加的斜杠,原因之前已经解释过,由于在high级别下会自动启用PHP的magic_quotes_gpc魔术引号,对所有的传值数据自动用addslashes()函数转义,所以需要用stripslashes()函数去除. 接下来使用了explode函数,以"."为分隔符将$target变量中的IP地

web命令执行漏洞

一,什么是命令执行漏洞: 应用有时需要调用一些执行系统命令的函数,如PHP中的system.exec.shell_exec.passthru.popen.proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞. 二,利用条件: 1,应用调用执行命令的函数 2,将用户输入作为系统命令的参数拼接到命令中 3,没有对用户输入过滤或者过滤不严格 三,漏洞危害: 1,攻击者可以执行命令获取想要的信息 2,攻击者可以拿下服务器等

struts2远程命令执行漏洞S2-045

Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-045,CVE编号CVE-2017-5638,在使用基于Jakarta插件的文件上传功能时,有可能存在远程命令执行,导致系统被黑客入侵,漏洞评级为:高危. 漏洞详情:恶意用户可在上传文件时通过修改HTTP请求头中的Content-Type值来触发该漏洞,进而执行系统命令. 风险等级:高风险. 漏洞风险:黑客通过利用漏洞可以实现远程命令执行. 影响版本:Struts 2.3.5 - Struts 2.3.31, Struts 2

小白日记36:kali渗透测试之Web渗透-手动漏洞挖掘(二)-突破身份认证,操作系统任意命令执行漏洞

手动漏洞挖掘 ###################################################################################### 手动漏洞挖掘原则[会比自动扫描器发现的漏洞要多,要全面] 1.每一个变量都进行尝试 2.所有头[如:cookie中的变量] 3.逐个变量删除 #####################################################################################

DVWA系列之7 low级别命令执行漏洞

下面我们开始分析DVWA中的Command Execution命令执行漏洞. 首先仍是将DVWA Security设置为Low,选择Command Execution,这里在文本框中输入一个IP,点击Submmit提交便可以执行ping命令. 点击"View Source"查看网页源码. 可以看到,这里的数据是以post方式提交过来的,然后被赋值给了变量$target. 接下来有一个if语句,判断条件是"stristr(php_uname('s'), 'Windows NT'

DVWA系列之10 命令执行漏洞的挖掘与防御

通用的命令执行漏洞防御方法通常是使用两个函数:EscapeShellCmd和EscapeShellArg,下面分别来分析这两个函数. EscapeShellCmd()函数可以把一个字符串中所有可能瞒过Shell而去执行另外一个命令的字符转义,比如管道符(|).分号(;).重定向(>).从文件读入(<)等. 下面我们来测试一下这个函数是否管用,以low级别的命令执行漏洞为例,对应的网页文件为D:\AppServ\www\dvwa\vulnerabilities\exec\source\low.p