php代码执行漏洞审计,php代码审计4审计代码执行漏洞

本文详细介绍了代码执行漏洞的原理,包括危险函数如eval和assert,以及回调函数和正则表达式的潜在风险。通过代码示例展示了漏洞的挖掘思路,并提出了修复方案,如避免使用可执行外部代码的函数,限制参数输入,以及使用安全函数等。
摘要由CSDN通过智能技术生成

代码执行漏洞代码执行漏洞是指应用程序本身过滤不严,用户可以通过请求将代码注入到应用中执行,当应用在调用一些能将字符串转化成代码的函数(如php中的eval)时,没有考虑到用户是否能控制这个字符串,造成代码注入。挖掘思路:存在可执行代码的危险函数,用户能控制函数的输入。常见危险函数eval和assert函数:eval(),assret()将输入的字符串参数作为PHP程序代码来执行代码1:<?phpif (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:<?phpfunction 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来指定可执行的文件路径将执行的参数做白名单限制,在代码或配置文件中限制某些参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值