代码6 //边界限定$pattern1 = /^abc/; // ^匹配输入字符开始的位置
标签:
0x00代码执行道理应用措施有时需要挪用一些执行系统命令的函数,如在PHP中,使用system、exec、shell_exec、passthru、popen、proc_popen等函数可以执行系统命令。当黑客能控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行缝隙,这就是命令执行缝隙。
凡是会使用escapeshellarg对参数进行措置惩罚惩罚,但在低版本的PHP库函数中该函数存在缝隙(原因:Windows上未对反斜杠进行过滤),需要注意。
1:用户能够控制函数输入
2:存在可执行的危险函数
1:eval和assert函数
2:preg_replace函数
3:回调函数
4:动态函数执行
这里的话system可以执行代码,对来自cmd中获的变量没有过滤,导致代码执行。
exp: ?cmd=phpinfo(); 0x04 回调函数代码:
<?phpfunction callback(){?? $x = $_GET['cmd'];?? eval($x);//没做限制 }c all_user_func(function 'callback',$x);//回调了函数 >? 常见回调函数:call_user_func()? call_user_func_array()? array_map()等上面代码分析一下,eval危险函数被封装在了callback全局函数中,我们在最后使用了
all_user_func(function ‘callback‘,$x);
回调危险函数最后到达代码执行
还有一种简单的回调:
<?php //?cmd=phpinfo() @call_user_func(assert,$_GET['cmd']); ?>我们没有封装,而是直接使用了assert函数来进行回调,是的cmd中传入的代码执行。
call_user_func — 把第一个参数作为回调函数挪用,其余参数是回调函数的参数。 call_user_func_array — 挪用回调函数,,并把一个数组参数作为回调函数的参数 0x05 动态函数执行1:界说一个函数
2:将函数名(字符串)赋值给一个变量
2:使用变量名取代函数名动态挪用函数
代码:
<?php $_GET['a']($_GET['b']);//接受get请求a的参数作为一个函数,b是作为a函数里的参数 ?> exp: ?a=assert&b=phpinfo()代码2:
<?php $foobar = $_GET['foobar']; $dyn_func = create_function('$foobar', "echo $foobar;"); $dyn_func(''); ?> 当提交?foobar=system%28dir%29时,执行dir命令 0x06 正则表达式代码:
<?php //普通字符作为原子 $pattern = '/abc/'; $str = 'abcdefghijklmn'; preg_match_all($pattern,$str,$res);//以数组形式存储 var_dump($res);//会以数组形式显示出来 ?>
代码2:
//特殊标记的字符作为原子 $pattern = '/\[php\]/'; $str = '[php]12345'; preg_match_all($pattern,$str,$res); var_dump($res);功效:

这里出格说明一下,我们要对php转义一下,加上\如果不加:
$pattern = '/[php]/'; $str = '[php]12345'; preg_match_all($pattern,$str,$res); var_dump($res);
这样就不算是这种模式匹配了
代码3:
//通用字符作为原子 $pattern1 = '/\d/'; //0-9 $pattern2 = '/\D/'; //a-zA-Z $str = '123132asaaaaa222'; $preg_match_all($pattern2,$str,$res); var_dump($res);代码4:
//自界说原子 $pattern1 = '/[aj]sp/'; //匹配[aj]中任意一个字符作为原子的asp jsp $str = 'jjjjspspspsp'; preg_match_all($pattern1,$str,$res); var_dump($res);代码5
//限定符 $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);这里限定符还有贪婪模式非贪婪模式,这里我大一就已经学过了,就不再提了。
代码6
//边边界定 $pattern1 = '/^abc/'; // ^匹配输入字符开始的位置,必需是abc形式的开头 $pattern2 = '/abc^/'; // ^匹配输入字符结尾的位置,必需是abc形式的结尾 $pattern3 = '/^abc$/'; // ^$只匹配某字符 $str = 'abc2342dfads'; preg_match_all($pattern3,$str,$res); var_dump($res);温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30927.html
