freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

命令执行漏洞
2020-03-02 15:59:47

No.1

漏洞描述

命令执行漏洞是指服务器没有对执行的命令进行过滤,用户可以随意执行系统命令,命令执行漏洞属于高危漏洞之一。

如PHP的命令执行漏洞主要是基于一些函数的参数过滤不足导致,可以执行命令的函数有system( )、exec( )、shell_exec( )、passthru( )、pcntl_execl( )、popen( )、proc_open( )等。当攻击者可以控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行攻击。PHP执行命令是继承WebServer用户的权限,这个用户一般都有权限向Web目录写文件,可见该漏洞的危害性相当大。

No.2

漏洞危害

  •  继承Web服务器程序的权限,去执行系统命令或读写文件
  •  反弹shell
  •  控制整个网站,甚至控制整个服务器

No.3

漏洞产生的原因

1.没有对用户输入进行过滤或过滤不严

 例如,没有过滤&、&&、|、||等连接符

2.系统漏洞造成的命令执行

bash破壳漏洞(CVE-2014-6271),该漏洞可以构造环境变量的值来执行具有攻击力的脚本代码,会影响到bash交互的多种应用,如http、ssh和dhcp等。

3.调用的第三方组件存在代码执行漏洞

例如:

php(system()、shell_exec()、exec()、eval())

JAVA中的命令执行漏洞(struts2/ElasticsearchGroovy等)

ThinkPHP命令执行

No.4

常见危险函数

1. Php代码相关

  •  eval()
  •  assert()
  •  preg_replace
  •  call_user_func()
  •  call_user_func_array()
  •  create_function
  •  array_map()

2. 系统命令执行相关

  •  system()
  •  passthru()
  •   exec()
  •  pcntl_exec()
  •  shell_exec()
  •  popen()
  •  proc_open()
  •  `(反单引号)
  •  ob_start()

No.5

漏洞利用

漏洞利用_1

1f8f6184181648258eb76d951f1650ae.png点击添加图片描述(最多60个字)

访问:http://127.0.0.1/test.php?cmd=127.0.0.1;pwd

也就是执行了“pwd”命令

17172750819442179adc23c5214890ad.png点击添加图片描述(最多60个字)

漏洞利用_2

7fd85ee6a8a6481fa63088b1d130488d.png点击添加图片描述(最多60个字)

访问:http://127.0.0.1/test.php?fun=system&par=whoami

其实就相当于执行了system("whoami")

6975636dcddc40e9b08fabbce240a7c9.png点击添加图片描述(最多60个字)

漏洞利用_3

e55092f347b8470187fc55c4f32689cf.png点击添加图片描述(最多60个字)

访问:http://127.0.0.1/test.php?code=phpinfo();

ff4aa141cbe94292a3dfbe78c8fc215c.png点击添加图片描述(最多60个字)

No.6

 防范措施

1. 在PHP下禁用高危系统函数

找到php.ini,查找到disable_functions,添加禁用的函数名

2. 参数的值尽量使用引号包括,并在拼接前调用addslashes进行转义。

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指定的目录中才会允许执行,否则执行将失败。

转自杭州美创科技有限公司公众号,如需二次转载,请联系marketing@mchz.com.cn

本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者