前言

最近学习了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=,然后将上面那些函数添加进来就可以了。

PHP命令执行学习总结的更多相关文章

  1. ImageMagick命令执行学习笔记(常见于图片预览处)

    实验版本: ImageMagick版本:6.9.2 push graphic-context viewbox 0 0 640 480 fill 'url(https://"|whoami&q ...

  2. (大数据工程师学习路径)第一步 Linux 基础入门----命令执行顺序控制与管道

    介绍 顺序执行.选择执行.管道.cut 命令.grep 命令.wc 命令.sort 命令等,高效率使用 Linux 的技巧. 一.命令执行顺序的控制 1.顺序执行多条命令 通常情况下,我们每次只能在终 ...

  3. Kali学习笔记30:身份认证与命令执行漏洞

    文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 实验环境: Kali机器:192.168.163.13 ...

  4. PHP的命令执行漏洞学习

    首先我们来了解基础 基础知识来源于:<web安全攻防>徐焱 命令执行漏洞 应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system.exec.shell_exec.pas ...

  5. 风炫安全web安全学习第三十一节课 命令执行以及代码执行演示

    风炫安全web安全学习第三十一节课 命令执行以及代码执行演示 参考: http://blog.evalshell.com/2020/12/20/风炫安全web安全学习第三十一节课-命令执行以及代/

  6. 风炫安全web安全学习第三十节课 命令执行&代码执行基础

    风炫安全web安全学习第三十节课 命令执行&代码执行基础 代码执行&命令执行 RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统. 远程系统命令执行 ...

  7. FastJson远程命令执行漏洞学习笔记

    FastJson远程命令执行漏洞学习笔记 Fastjson简介 fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean.fastjson.ja ...

  8. shell script 学习笔记-----命令执行

    1.PATH变量:shell最主要的功能就是执行用户输入的命令,例如当用户输入一条“ls”命令之后,shell就要找到该命令对应的文件并执行.通常shell都会设置一个名叫PATH的环境变量,其中保存 ...

  9. ASP代码审计学习笔记 -4.命令执行漏洞

    命令执行漏洞: 保存为cmd.asp,提交链接: http://localhost/cmd.asp?ip=127.0.0.1 即可执行命令 <%ip=request("ip" ...

随机推荐

  1. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(四)之Operators

    At the lowest level, data in Java is manipulated using operators Using Java Operators An operator ta ...

  2. python爬取《龙岭迷窟》的数据,看看质量剧情还原度到底怎么样

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:简单 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行 ...

  3. CISCN love_math和roarctf的easy_clac学习分析

    Love_math 题目源码: <?php error_reporting(0); //听说你很喜欢数学,不知道你是否爱它胜过爱flag if(!isset($_GET['c'])){ show ...

  4. 高级数据结构---红黑树及其插入左旋右旋代码java实现

    前面我们说到的二叉查找树,可以看到根结点是初始化之后就是固定了的,后续插入的数如果都比它大,或者都比它小,那么这个时候它就退化成了链表了,查询的时间复杂度就变成了O(n),而不是理想中O(logn), ...

  5. react: typescript import images alias

    1.webpack.config.js resolve: { extensions: ["ts", "tsx", "js", "j ...

  6. Java中Character类

    Character 类在对象中包装一个基本类型char的值此外,该类提供了几种方法,以确定字符的类别(小写字母,数字,等),并将字符从大写转小写,反之亦然. 构造方法: Character(char ...

  7. Linux下jdk的安装和环境变量的配置

    Linux下jdk的安装和环境变量的配置 一.jdk的下载 方式一:在官网下载 http://www.oracle.com/technetwork/java/javase/downloads/inde ...

  8. Apache Hudi集成Apache Zeppelin实战

    1. 简介 Apache Zeppelin 是一个提供交互数据分析且基于Web的笔记本.方便你做出可数据驱动的.可交互且可协作的精美文档,并且支持多种语言,包括 Scala(使用 Apache Spa ...

  9. 6、Time & Window

    一.Time & Watermark 1.1.DataStream支持的三种time DataStream有大量基于time的operator Flink支持三种time: EventTime ...

  10. Git基本操作和使用

    基本命令: git config git init git clone git remote git fetch git commit git rebase git push 本地基本操作: git ...