前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP命令执行漏洞初探

PHP命令执行漏洞初探

作者头像
Mirror王宇阳
发布2020-11-12 11:09:55
1.7K0
发布2020-11-12 11:09:55
举报
文章被收录于专栏:Mirror的技术成长

PHP命令执行漏洞初探

Mirror王宇阳 by

PHP 命令执行

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

system()

代码语言:javascript
复制
<?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代码字段并以分号结尾

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

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

动态调用

代码语言:javascript
复制
<?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()……

代码语言:javascript
复制
<?php
	$fun = $_GET['fun'];
	$par = $_GET['par'];
	$fun($par);
?>

PHP的其它危险函数

array_map()

代码语言:javascript
复制
<?php
	$arr = $_GET['arr'];
	$array = array(1,2,3,4,5);
	$new_array = array_map($arr, $array);
?>

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

assert()

代码语言:javascript
复制
bool assert(mixed $assertion [,string $description])

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

preg_replace()

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

代码语言:javascript
复制
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

pattern 要搜索的正则匹配模式

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

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

include

代码语言:javascript
复制
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代码审计——常见危险及特殊函数

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PHP命令执行漏洞初探
    • PHP 命令执行
      • system()
      • eval()
      • 动态调用
    • PHP的其它危险函数
      • array_map()
      • assert()
      • preg_replace()
      • include
    • 文件操作函数
      • 特殊函数
      相关产品与服务
      代码审计
      代码审计(Code Audit,CA)提供通过自动化分析工具和人工审查的组合审计方式,对程序源代码逐条进行检查、分析,发现其中的错误信息、安全隐患和规范性缺陷问题,以及由这些问题引发的安全漏洞,提供代码修订措施和建议。支持脚本类语言源码以及有内存控制类源码。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档