PHP代码审计 ------ 命令执行漏洞

要分清命令执行,和 代码执行的区别

        什么是命令执行?

                我们可以去执行  cmd  ,bash 命令,基于一些函数参数的漏洞

挖掘思路

        和代码执行一样,首先

                1.用户能偶控制函数输入

                2.存在可执行代码的危险函数

命令执行 和 代码执行 的区别

        代码执行:

                执行的效果完全受限于语言本身 ,比如  我是php代码,我就只能用php来执行

        命令执行:

                执行的效果不受限于语言语法本身,不受命令本身限制

命令执行的类型

        代码层过滤不严

                system();

        系统的漏洞造成命令注入

               bash的漏洞

        第三方组件存在代码执行漏洞

常见函数

        system()函数

        exec()

        shell_exec()

        ``        这个不属于函数,他基于shell_exec()函数的调用

        passthru()函数

system函数

要看懂php手册

 

 也可以添加用户,net user admin 123 /add        删除:  net user admin /del

net user 查看用户

        写入文件

        cmd = echo 1121 > 1.txt

写到了,网站根目录下   还是这个网页的 目录下呢???

,那我们可以写入一句话木马?

        

passthru 函数       

        

Exec函数

        

没有回显结果,需要放到第二个参数里输出    或者echo 

它可以去进行命令执行,但他回显的页面,只有一行

也可以写入文件, 功能都能实现,

shell_exec函数

                shell_exec(string $cmd)     $cmd 要执行的命令

        反引号``         则调用此函数

 

没有回显

我们进行输出一下,

 

有回显了,跟正常一样

netstat -ano  查看进程

dir > 4.txt    ,dir命令结果 输出到 4.txt

反引号(``) 

`` 就是调用了shell_exec()函数

 

 出来了!

过滤函数,防止命令注入

        Escapeshellcmd()                过滤整条命令

        Escapeshellarg()        过滤整个参数

 替换成了空格,

修复方案

        尽量少用执行命令的函数或者直接禁用参数值尽量使用引号包括

        在使用动态函数之前,确保使用的函数是指定的函数之一

        在进入执行命令的函数/方法之前,对参数进行过滤,对敏感字符进行转义

        尽量少用执行命令的函数

        对于可控点是程序参数的情况下,使用escapeshellcmd函数进行过滤,对于可控点是程序参数值的情况下使用escapeshellarg函数进行过滤

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

        而针对由特定第三方组件引发的漏洞,我们要做的就是及时打补丁,修改安装时的默认配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值