代码执行漏洞
代码执行漏洞是指应用程序本身过滤不严,用户可以通过请求将代码注入到应用中执行,当应用在调用一些能将字符串转化成代码的函数(如php中的eval)时,没有考虑到用户是否能控制这个字符串,造成代码注入。

挖掘思路:存在可执行代码的危险函数,用户能控制函数的输入。

常见危险函数

eval和assert函数:
eval(),assret()将输入的字符串参数作为PHP程序代码来执行
代码1:
<?php
if(isset($_GET['cmd'])){
   $cmd = $_GET['cmd'];
   eval("\$cmd = $cmd");/assret()函数也是一样的,这里没对用户输入做过滤
   echo "ok"
}else{
   echo "not";
}
>

回调函数:
mixed call_user_func(callable $callback[,mixed $parameter[,mixed $....]])
$callback是要调用的自定义函数名称
$parameter是自定义函数的参数
代码2:
<?php
function callback(){
   $x = $_GET['cmd'];
   eval($x);//没做限制
}
call_user_func(function 'callback',$x);//回调了函数
>
常见回调函数:call_user_func()  call_user_func_array()  array_map()等

动态执行函数
定义一个函数,将函数名(字符串)赋值给一个变量,使用变量名代替函数名动态调用函数。
代码3:
<?php
$_GET['a']($_GET['b']);//接受get请求a的参数作为一个函数,b是作为a函数里的参数
>

正则表达式(做代码审计时,会遇到正则表达式,了解正则会更容易)
<?php
//普通字符作为原子
$pattern = '/abc/';
$str = 'abcdefghijklmn';
preg_match_all($pattern,$str,$res);
var_dump($res);

//特殊符号的字符作为原子
$pattern = '/\[php\]/';
$str = '[php]12345';
preg_match_all($pattern,$str,$res);
var_dump($res);

//通用字符作为原子
$pattern1 = '/\d/'; //0-9
$pattern2 = '/\D/'; //a-zA-Z
$str = '123132asaaaaa222';
$preg_match_all($pattern2,$str,$res);
var_dump($res);

//自定义原子
$pattern1 = '/[aj]sp/'; //匹配[aj]中任意一个字符作为原子的asp jsp
$str = 'jjjjspspspsp';
preg_match_all($pattern1,$str,$res);
var_dump($res);

//限定符
$pattern1 = '/go*gle/'; // *匹配掐面出现原子次数0次 1次或多次
$pattern2 = '/go+gle/'; // +匹配前面出现的原子1次或多次
$pattern3 = '/go?gle/'; // ?匹配前面出现的原子0次或1次
$str = 'google';
preg_match_all($pattern3,$str,$res);
var_dump($res);

//边界限定
$pattern1 = '/^abc/'; // ^匹配输入字符开始的位置,必须是abc形式的开头
$pattern2 = '/abc^/'; // ^匹配输入字符结尾的位置,必须是abc形式的结尾
$pattern3 = '/^abc$/'; // ^$只匹配某字符
$str = 'abc2342dfads';
preg_match_all($pattern3,$str,$res);
var_dump($res);

//反向引用
$pattern = '/\d{4}(-)\d{2}\\1\d{2}/'; // \\1代表第一个()缓冲区
$str = '2019-01-28';
preg_match_all($pattern,$str,$res);
var_dump($res);
>

preg_replace函数:
mixed preg_replace(mixde $pattern,mixed $replacement,mixed $subject[,int $limit = -1[,int &$count]])
$pattern 正则匹配的内容 $pattern存在/e模式修正符修饰,允许代码执行
$replacement 用于替换的字符串或字符串数组
$subject 要进行搜索和替换的字符串或字符串数组

修复方案:
尽量不要执行外部的应用程序或命令
使用自定义函数或函数库来替代外部应用程序或命令的功能
使用escappeshellarg函数来处理命令的参数
使用sare_mode_exec_dir来指定可执行的文件路径
将执行的参数做白名单限制,在代码或配置文件中限制某些参数

php代码审计4审计代码执行漏洞的更多相关文章

  1. php代码审计5审计命令执行漏洞

    命令执行漏洞:通过易受攻击的应用程序在主机操作系统上执行任意命令,用户提供的数据(表单,cookie,http头等)未过滤 挖掘思路:用户能够控制函数输入,存在可执行代码的危险函数 命令执行和代码执行 ...

  2. 【代码审计】YUNUCMS_v1.0.6 后台代码执行漏洞分析

      0x00 环境准备 QYKCMS官网:http://www.yunucms.com 网站源码版本:YUNUCMSv1.0.6 程序源码下载:http://www.yunucms.com/Downl ...

  3. 【代码审计】大米CMS_V5.5.3 任意文件删除及代码执行漏洞分析

      0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...

  4. 【代码审计】OTCMS_PHP_V2.83_代码执行漏洞分析

      0x00 环境准备 OTCMS官网:http://otcms.com 网站源码版本:网钛CMS PHP版 V2.83 [更新于2017.12.31] 程序源码下载:http://d.otcms.c ...

  5. 【代码审计】YzmCMS_PHP_v3.6 代码执行漏洞分析

      0x00 环境准备 YzmCMS官网:http://www.yzmcms.com/ 程序源码下载:http://pan.baidu.com/s/1pKA4u99 测试网站首页: 0x01 代码分析 ...

  6. 【代码审计】大米CMS_V5.5.3 代码执行漏洞分析

      0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...

  7. 【代码审计】XYHCMS V3.5代码执行漏洞分析

      0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...

  8. 【代码审计】QYKCMS_v4.3.2 后台down.php页面代码执行漏洞分析

      0x00 环境准备 QYKCMS官网:http://www.qykcms.com/ 网站源码版本:QYKCMS_v4.3.2(企业站主题) 程序源码下载:http://bbs.qingyunke. ...

  9. 【代码审计】DouPHP_v1.3代码执行漏洞分析

      0x00 环境准备 DouPHP官网:http://www.douco.com/ 程序源码下载:http://down.douco.com/DouPHP_1.3_Release_20171002. ...

随机推荐

  1. Debug 的使用

    R 命令:查看.修改寄存器的内容 -r:查看寄存器的内容 CS=0AF9,IP=0100,也就是说内存 0AF9:0100 处的指令为 CPU 当前要读取.执行的指令 Debug 也列出了 CS:IP ...

  2. CodeIgniter框架隐藏index.php

    问题描述:使用CodeIgniter框架做项目时,在启用REWRITE的伪静态功能的时候,首页可以访问,但是访问其它页面的时候,就提示:“No input file specified.” 原因在于使 ...

  3. Java微信公众平台开发(九)--关键字回复以及客服接口实现(该公众号暂时无法提供服务解决方案)

    转自:http://www.cuiyongzhi.com/post/47.html 我们在微信公众号的后台可以发现微信给我们制定了两种模式,一种是开发者模式(也就是我们一直在做的开发),还有一种模式是 ...

  4. Java微信公众平台开发(六)--微信开发中的token获取

    转自:http://www.cuiyongzhi.com/post/44.html (一)token的介绍 引用:access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access ...

  5. MySQL备份还原之一mydumper

    1)源码编译安装 1.下载 mydumper源码 2.解压 [mysql@localhost ~]$ tar -xvf mydumper-0.9.1.tar mydumper-0.9.1/CMakeL ...

  6. 【281】◀▶ arcpy.mapping 常用类说明

    arcpy.mapping 教程入门 arcpy.mapping 指导原则 按字母顺序排序的 arcpy.mpping 类列表 按字母顺序排序的 arcpy.mpping 函数列表 按字母顺序排序的 ...

  7. AWT和布局管理器

    AWT(Abstract Window Toolkit)抽象窗口开发包 component:可以显示出来的与用户进行交互的图形元素 container:容纳其他component元素的容器:conti ...

  8. Entitlements

    [Entitlements] Entitlements confer specific capabilities or security permissions to your iOS or OS X ...

  9. Linux问题:开启网关

    1 开启网关 1.1 问题描述 虚拟机每次重启后,都需要利用 ifup eth0 来手动开启网关,否则获取到的IP地址为回环127.0.0.1 1.2 解决办法 修改ifcfg-eth0中 ONBOO ...

  10. Extend volumn in ubuntu 14.04

    运行环境: ubuntu 14.04, VMware12.5.7 1. VMware上点击 虚拟机->设置->硬盘(SCSI)->扩展选项,设置自己希望的ubuntu磁盘运行空间大小 ...