代码审计day5

 · 2020-3-21  ·次阅读


代码执行漏洞

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

常见函数

eval和assert
回调函数
动态执行函数
preg_replace函数

1.eval()、assert()将输入的字符串参数作为PHP程序代码来执行

2.回调函数mixed call_user_ func ( callable $callback [, mixed $parameter [, mixed $… ]])
$callback是要调用的自定义函数名称
$parameter是自定义函数的参数
常见的回调函数:
call_user_func()、call_user_func_array()、array_map()等

<?php

function callBack()[
        $b = $_GET['cmd'];
        eval($b);
]

call_user_func(function'callBack',$b);
?>

3.动态执行函数

1.定义一个函数
2.将函数名(字符串)赋值给一个变量
3.使用变量名代替函数名动态调用函数

4.preg_replace

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

正则表达式

正则表达式语法规则 普通字符作为原子

限定符 特殊符号作为原子

边界限制符 通用字符类型作为原子

后向引用 自定义原子表作为原子