




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PHP代码审计构建安全能力,创造业务价值目 录12代码审计之背景介绍 代码审计之实战漏洞分享23代码审计之发展趋势什么是代码审计? 由具备丰富的编码经验并对安全编码及应用安全具有很深刻理解的安全服务人员,根据一定的编码规范和标准,针对应用程序源代码,从结构、脆弱性以及缺陷等方面进行审查,最终输出代码审计报告,完善应用程序,提升自身安全水平怎么做代码审计?(从发现安全漏洞维度出发)具备哪些知识点 (运行环境搭建、熟悉开发语言、各类函数应用)了解常用漏洞产生成因 (SQL、xss、上传漏洞、LFI、代码执行、CSRF等等)漏洞调试 (断点输出、变量跟踪、漏洞关键函数)高级应用漏洞(奇技淫巧应用:二
2、次注入、截断注入、条件竞争、二次攻击、黑白盒fuzz等)Poc编写(数据包构造、语言类型)代码审计带来的好处?发现更多“隐蔽”的安全漏洞企业合规性要求提升企业整体安全水平提升企业安全开发编码规范目 录12代码审计之背景介绍 代码审计之实战漏洞分享53代码审计之发展趋势Wamp WAMP是指在Windows服务器上使用Apache、MySQL和PHP的集成安装环境,可以快速安装配置Web服务器,一般说来,大家都习惯 于将Apache、MySQL、PHP架设在Linux系统下,但是,不可否认的是Windows也有其优点,就是易用,界面友好,软件丰富,操作起来非 常方便,因此对新手来说在Window
3、s平台下使用Apache、MySQL、PHP也确实是一个不错的选择。下面我将介绍几款在Windows下可以使 用的WAMP集成环境代码查找工具上传漏洞上传漏洞文件包含漏洞文件包含漏洞逻辑漏洞逻辑漏洞远程代码执行漏洞XPATH注入漏洞变量覆盖漏洞变量覆盖漏洞跨站脚本漏洞SQL注入漏洞目录遍历漏洞Csrf漏洞命令注入漏洞常见漏洞展示文件包含包含漏洞 代码执行执行任意代码漏洞命令执行执行任意命令漏洞文件系统操作文件(目录)读写删除等漏洞数据库操作SQL注射漏洞数据显示 XSS等客服端漏洞常见漏洞展示 审计代码审计代码审查相关危险函数XSSechoprint*SQL injectionmysql_qu
4、erymysqli_querymysqli:queryPDO:queryCode execassertevalpreg_replaceinclude*require*Command execpassthruSystempopenFilefreadcopyfputsunlinkOtherextractparse_strunserializeXss DiscuzDiscuz!7.X!7.X系列一处问题可导致反射型系列一处问题可导致反射型XSSXSS /bugs/wooyun-2010-084097 THINKSNS某功某功能高危跨站能高危跨站 http:/w
5、/bugs/wooyun-2012-013686 dedecms某处某处XSS打后打后台台 /bugs/wooyun-2014-072397SQL注入 DedeCMS最新版前台最新版前台SQL注射注射 /bugs/wooyun-2014-063441 Discuz某版本某版本SQL注射漏洞注射漏洞 /bugs/wooyun-2014-080359 ECSHOP最新全版本通杀最新全版本通杀注入注入 /bugs/w
6、ooyun-2014-086052代码执行 PHPMyWind最新版代码执行漏最新版代码执行漏洞洞 /bugs/wooyun-2010-082805 江南科友堡垒机远程代码执行漏洞江南科友堡垒机远程代码执行漏洞 /bugs/wooyun-2010-076864 cmstop 远程代码执行漏远程代码执行漏洞洞 /bugs/wooyun-2014-054693 .Xss当提交当提交http:/ G博士,博士,xssxss发挥的出神入化(远程代码执行、埋雷式攻击)发挥的出神入化(远
7、程代码执行、埋雷式攻击)SQL Injection1、注入之-无单引号$contentid= $_GETcontentid;$r = $this-dbget_one(“SELECT * FROM ”.DB_PRE.“content WHERE contentid=$contentid”); 攻击条件:无过滤,直接产生SQL注入攻击。2、注入之-有单引号(无反转义函数)$contentid= $_GETcontentid;$r = $this-dbget_one(“SELECT * FROM ”.DB_PRE.“content WHERE contentid=$contentid”); 攻击条件
8、:PHP未开启gpc魔术开关3、注入之-有单引号(stripslashes、urldecode、base64_decode、http_referer)$contentid= $_GETcontentid;/$contentid= stripslashes($contentid); #反转义,去掉等字符/$contentid= urldecode(contentid); #url解码方式,如%27则将解码成进入SQL语句/$contentid= base64_decode(contentid); #base64解码/$contentid=$_SERVERHTTP_REFERER; # http头
9、默认不转义$r = $this-dbget_one(“SELECT * FROM ”.DB_PRE.“content WHERE contentid=$contentid”);SQL Injection Stripslashes注入案例:注入案例: Z-Blog的的php版前台正则版前台正则SQL盲注漏盲注漏洞洞/bugs/wooyun-2010-037956通过自定义_stripslashes函数,对从get、post、cookie 3种传参方式进行反转义,造成传入的单引号等污染SQL语句字符得到执行,最终造成SQL注入漏洞。SQL Injection
10、Urldecode注入案例:注入案例: 齐齐博博CMS urldecode注入注入SQL InjectionBase64_decode注入案例:注入案例: CuuMall最新版最新版sql注入注入SQL InjectionHTTP头注入案例:头注入案例: phpcms 2008 referer注入注入 跟踪info变量,进入insert方法(产生注入)upload1、上传之-头文件欺骗 上传程序当中只对MIME类型进行检测,如:/文本类型:text/plain 图片类型 Image/jpeg /客户端可控,可伪造MIME类型绕过限制,达到任意文件上传。 2、上传之-黑名单(后缀可控)程序中限制
11、可执行文件后缀,如 php、asp、cer、jsp、jspx、aspx、asa、ashx等1、apache:php3、php5绕过2、iis: iis6.0解析漏洞3、上传之-截断利用某些函数获取文件名%00截断原理,生产.php后缀(GPC off)4、上传之-.htaccess应用利用上传.htaccess文件控制执行后缀,达到任意解析参考链接:http:/ 缺陷代码如下:远程代码执行远程代码执行 借助代码执行函数如eval、preg_replace执行可控的变量,达到任意代码执行的漏洞,等级高危。案例如下:/bugs/wooyun-2014-080
12、723 Discuz!某两个版本前台产品命令执某两个版本前台产品命令执行行/bugs/wooyun-2010-054693 cmstop 远程代码执行漏洞远程代码执行漏洞 /bug.php?action=view&id=417 phpwind远程代码执行漏远程代码执行漏洞洞 /bugs/wooyun-2010-04685 用用友友ICC网站客服系统远程代码执行漏网站客服系统远程代码执行漏洞洞/bugs/wooyun-2010-0
13、42626042626 网博士存在远网博士存在远程程PHP代码执行漏洞代码执行漏洞CMSTOP远程代码执行远程代码执行 CmsTop 是一款基于是一款基于PHP+MYSQL技术架构技术架构的内容管理系统的内容管理系统,采用前后台分离技术,前采用前后台分离技术,前台为发布页面(全为台为发布页面(全为html静态页面),用户包括各行业重点门户系统,涉足报页、广电、静态页面),用户包括各行业重点门户系统,涉足报页、广电、网络媒体、教育等。网络媒体、教育等。 在在cmstop当中搜索功能模块由于对搜索关键字未进行严格过滤,导致任意代码执行。当中搜索功能模块由于对搜索关键字未进行严格过滤,导致任意代码执
14、行。 缺陷代码如下:缺陷代码如下: CMSTOP远程代码执行远程代码执行 跟踪跟踪getpagin方法,进入方法,进入pages方法。方法。CMSTOP远程代码执行远程代码执行 继续跟踪继续跟踪pages_url函数函数 当当url变量不存在时,赋值自定义好的常量变量不存在时,赋值自定义好的常量URL值。值。 当当url变量中存在变量中存在$page字符时字符时,将,将$url进行执行进行执行(变量得到执行)变量得到执行)通过构造特殊通过构造特殊url即可造成远程代码执行,如下链接:即可造成远程代码执行,如下链接:http:/ 二次注入:二次注入:利用Mysql数据库出库值反转义功能,多次与数
15、据库交互造成的注入问题。截断注入:利用某些php函数对字符截断,造成 或者 进入SQL语句当中,通过多个参数拼接构造畸形语句注入。条件竞争:根据程序执行时间差异,利用多线程并发技术,优先执行某些缺陷功能。二次攻击:多个bug或漏洞结合放大攻击手段(2次注入、2次解析、2次cookie注入)。 白黑盒fuzz: 利用web服务器对某些特殊字符处理不当造成文件截断等等漏洞。 攻击者不是直接通过一个变量提交恶意 代码而产生的漏洞,而是通过变量的转化 或者是中转(如:数据库、cookie、自定义函数) 最终产生的安全漏洞。 “什么是PHP二次攻击 ?” 恶意代码恶意代码写入数据库写入数据库UPDATE
16、 INSERT 攻击原理: insert - select -insert -select insertselectinsertselect再次循环一次web服务器数据库漏洞存在于/plus/feedback.php中的第246行在/include/common.inc.php中的第79行载入攻击代码二次转义INSERT INTO #_feedback(aid,typeid,username,arctitle,ip,ischeck,dtime,mid,bad,good,ftype,face,msg) VALUES (1,0,游客游客,1,1,3,4,5,6,7,8,(select pwd fr
17、om dede_admin) 数据库交互数据库交互数据库交互数据库交互数据库交互数据库交互1,1,3,4,5,6,7,8,(select pwd from dede_admin)#1,1,3,4,5,6,7,8,(select pwd from dede_admin)#INSERT INTO #_feedback(aid,typeid,username,arctitle,ip,ischeck,dtime,mid,bad,good,ftype,face,msg) VALUES (1,0,游客,1,1,3,4,5,6,7,8,(select pwd from dede_admin)步 骤 1步 骤
18、 2步 骤 3 服务器互联网互联网自身模板解析自身模板解析变量覆盖上传变量覆盖上传木马通道木马通道$upload_allowext = !empty($Cupload_allowext) ? $Cupload_allowext : $infoupload_allowext; / 漏洞触发点 通过变量覆盖$upload_allowext此变量赋值为html$upload_maxsize = !empty($Cupload_maxsize) ? $Cupload_maxsize : $infoupload_maxsize*1024;$isthumb = isset($Cthumb_enable)
19、? $Cthumb_enable : ($PHPCMSthumb_enable & $infoisthumb ? 1 : 0);$iswatermark = isset($Cwatermark_enable) ? $Cwatermark_enable : ($PHPCMSwatermark_enable & $infoiswatermark ? 1 : 0);$thumb_width = isset($width) ? $width : (isset($Cthumb_width) ? $Cthumb_width : ($infothumb_width ? $infothumb_
20、width : $PHPCMSthumb_width);$thumb_height = isset($height) ? $height : (isset($Cthumb_height) ? $Cthumb_height : ($infothumb_height ? $infothumb_height : $PHPCMSthumb_height);$watermark_img = PHPCMS_ROOT.($infowatermark_img ? $infowatermark_img : $PHPCMSwatermark_img);$attachment = new attachment($m
21、od); /实例化attachment上传类if($dosubmit)$attachment-upload($uploadtext, $upload_allowext, $upload_maxsize, 1); / 漏洞触发点 引用attachment上传类 在preview.php中60行处$headdescription = $rdescription;if(!$template) $template = $Ctemplate_show; / 通过变量覆盖即可覆盖$template变量include template(phpcms, $template); / 调用template 模板解
22、析函数/ 解析模板方法function template($module = phpcms, $template = index, $istag = 0)$compiledtplfile = TPL_CACHEPATH.$module._.$template.tpl.php;if(TPL_REFRESH & (!file_exists($compiledtplfile) | filemtime(TPL_ROOT.TPL_NAME./.$module./.$template.html) filemtime($compiledtplfile) | filemtime(TPL_ROOT.TP
23、L_NAME./tag.inc.php) filemtime($compiledtplfile)require_once PHPCMS_ROOT.include/template.func.php;template_compile($module, $template, $istag); / 模板解析return $compiledtplfile; / 继续跟踪template_compile函数 在template.func.php中2行处function template_compile($module, $template, $istag = 0)$tplfile = TPL_ROOT.
24、TPL_NAME./.$module./.$template.html; / 这里$template可控$content = file_get_contents($tplfile); / 触发漏洞,解析构造好的恶意文件if($content = false) showmessage($tplfile is not exists!);$compiledtplfile = TPL_CACHEPATH.$module._.$template.tpl.php;$content = ($istag | substr($template, 0, 4) = tag_) ? .template_parse($
25、content, 1). : template_parse($content);$strlen = file_put_contents($compiledtplfile, $content);chmod($compiledtplfile, 0777);return $strlen; 自身模板解析自身模板解析恶恶意代码意代码 服务器通过变量覆盖上通过变量覆盖上传传恶意恶意htmlhtml文件文件恶意代码控制恶意代码控制 Web serverDb serverCookiesAttackAttack伪造恶意代码在modulesmemberindex.php中398行处public function
26、account_manage_info() if(isset($_POSTdosubmit) /更新用户昵称 $nickname = isset($_POSTnickname) & trim($_POSTnickname) ? trim($_POSTnickname) : ; / 直接去掉那边空格调用post传进来的nickname值 if($nickname) $this-db-update(array(nickname=$nickname), array(userid=$this-memberinfouserid);if(!isset($cookietime) $get_cooki
27、etime = param:get_cookie(cookietime); $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);$cookietime = $_cookietime ? TIME + $_cookietime : 0;param:set_cookie(_nickname, $nickname, $cookietime); / 直接写入cookie中 . / 省略若干无关代码 在modulescommentindex.php中60行处public fu
28、nction post() $comment = pc_base:load_app_class(comment);$id = isset($_GETid) & intval($_GETid) ? intval($_GETid) : ;$SITE = siteinfo($this-siteid);$username = param:get_cookie(_username,$SITEname.L(phpcms_friends);/这里获取_username这个COOKIE值,通过前面载入变异攻击代码$userid = param:get_cookie(_userid);$comment_
29、setting_db = pc_base:load_model(comment_setting_model);$setting = $comment_setting_db-get_one(array(siteid=$this-siteid);if (!empty($setting) . / 省略若干无关代码 $content = isset($_POSTcontent) & trim($_POSTcontent) ? trim($_POSTcontent) : $this-_show_msg(L(please_enter_content), HTTP_REFERER); $direct
30、ion = isset($_POSTdirection) & intval($_POSTdirection) ? intval($_POSTdirection) : ;$data = array(userid=$userid, username=$username, content=$content, direction=$direction);$comment-add($this-commentid, $this-siteid, $data, $id, $title, $url);$this-_show_msg($comment-get_error()., (in_array($comment-msg_code, array(0,7) ? HTTP_REFERER : ), (in_array($comment-msg_code, array(0,7) ? 1 : 0); 在modulescommentclasscomment.class.php中30行处public function add($commentid, $siteid, $data, $id = , $title = , $url = ) /开始查询评论这条评论是否存在。$title = new_addslash
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司超载制定管理制度
- 2025年的建筑工程承包合同样本
- 广东省惠州市2024-2025学年高二下册3月月考数学试卷(B卷)附解析
- 2025年中考语文(长沙用)课件:主题1 湘当有味美食之旅
- 神秘传承的传承者基础知识点归纳
- 产业落定可行性研究报告
- 南阳理工学院招聘笔试真题2024
- 石大学前儿童保育学课件2-4抓住生长发育的关期科学育儿
- 道德与法治(广东卷)2025年中考考前押题最后一卷
- 造纸与印刷企业经营管理方案
- 中国电建集团华东勘测设计研究院限公司诚聘89人易考易错模拟试题(共500题)试卷后附参考答案
- 白内障培训课件
- 二级计量师考试历年真题题库和答案2024
- 法制教育考试试题及答案
- 工程验收单模板
- 2023年安宁市城乡小学教师选调考试真题及答案
- 年产xxx水泥粉助磨剂项目实施方案(项目申请参考)
- 固体废物清运委托合同
- 2025年高考英语仿真模拟试卷(含答案解析)
- 《道路桥梁养护技术》课件
- 进一步财会监督复习试题附答案
评论
0/150
提交评论