PHP命令执行学习总结
前言
最近学习了PHP命令执行,内容比较多,把自己学到的总结下来,加深理解,水平有限,欢迎大佬斧正。
什么是PHP命令注入攻击?
Command Injection,即命令注入攻击,是指由于Web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至Web应用程序中,并利用该方式执行外部程序或系统命令实施攻击,非法获取数据或者网络资源等。PHP命令注入攻击存在的主要原因是Web应用程序员在应用PHP语言中一些具有命令执行功能的函数时,对用户提交的数据内容没有进行严格的过滤就带入函数中执行而造成的。下面结合PHP语言的特性,对PHP命令注入做了一些简单的分析。
与PHP命令注入攻击相关的函数有system函数、exec函数、passthru函数,shell_exec函数,接下来依次分析他们。
命令执行函数利用
一、system函数
先来看一下php学习手册对这个函数的解释,如图
接下来如果我们构造如下代码,目的是获取本地用户信息并输出
<?
$dir = $_GET["dir"];
if(isset($dir))
{
echo "<pre>";
system("net user".$dir);
echo "</pre>";
}
?>
如果攻击者结尾再加上其他其他内容呢,比如想要查看开放了哪些端口,我们可以构造如下URL
?dir=||netstat -ano
结果如下图,我们获取了本地服务的所有开放端口
二、exec函数
也是先看一下php学习手册对exec这个函数的介绍
接下来还是构造如下一段代码
<?
$cmd = $_GET["cmd"];
$output = array();
echo "<pre>";
exec($cmd,$output);
echo "</pre>";
foreach($output as $key=>$value)
{
echo $value."<br>";
}
?>
如果攻击者想要查看目录只需要在参数cmd 后面接上=dir就可以,如下图
想要查看开放的端口,只需要在参数cmd后接=netstat -ano,结果如下图
三、passthru函数
还是先看一下php学习手册的介绍
可以构造如下代码
<?
$cmd = $_GET["cmd"];
echo "<pre>";
passthru($cmd);
echo "</pre>";
?>
和上面一下,攻击者可以直接在参数cmd后面输入命令查看自己想要看到的数据,如查看目录,查看端口等
四、shell_exec函数
下面是php学习手册的介绍
构造如下测试代码
<?
$cmd = $_GET["cmd"];
echo "<pre>";
shell_exec($cmd);
echo "</pre>";
?>
eval注入攻击利用
除了上面的一些函数,还有eval函数,eval函数的作用是将字符串当作php代码执行,这个函数相当的危险,因为它允许执行任意 PHP 代码,看到eval的第一眼是不是很熟悉?咱们使用的php一句话木马就是使用的eval。
接下来构造如下代码
<?
$cmd = $_GET["cmd"];
eval($cmd);
?>
接着在参数cmd后面接=phpinfo();,结果如下图
我们发现我们提交的字符串“phpinfo();”经过eval函数的处理后,可以按照PHP函数进行执行,并将结果反馈给我们,那么执行相应的其他PHP函数,如写入文件,查询文件信息等功能的代码字符串时,同样可以执行。
防御建议
可以使用黑名单的形式,打开php.ini文件,找到disable_functions=,然后将上面那些函数添加进来就可以了。
- javascript 基本概念
- vue内置指令详解——小白速会
- javascript 函数详解
- 深海中的STL—nth_element
- javascript Object与Array用法
- vue class与style 绑定详解——小白速会
- java8-Stream之数值流
- POJ 3694 Network(Tarjan求割边+LCA)
- java之Cookie详解
- Ajax详解
- 1611: [Usaco2008 Feb]Meteor Shower流星雨
- 3893: [Usaco2014 Dec]Cow Jog
- 3892: [Usaco2014 Dec]Marathon
- BZOJ 2793: [Poi2012]Vouchers(调和级数)
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC