PHP代码审计得这样由浅入深地学
以Emlog6.0beta版本为引,一篇关于PHP语言CMS的代码审计文章,详细记录代码审计的完整过程,学习代码审计,不妨从这边文章入手,认真阅读完,相信一定可以有所收获!
序言
文章基本上完整记录了笔者针对EmlogCMS审计过程,或许显得繁琐,但代码审计的过程就是这样,发现可能项,然后精心构造去验证,这过程中我们会遇到很多次碰壁,坚持测试,思维活跃一些,基本都会有所收获,诚挚希望后来者能够耐心阅读下去,当然最好也能够有所启发。
大家需要注意的一点是,代码审计是为了学习并在SDL中避免发生类似的错误,同时也是帮助开源系统修复相关问题,并不是去为了获得什么0day~
0x00 Emlog 6.0 beta
EMLOG 6.0
官网地址:https://www.emlog.net/
Emlog 6.0 beta下载地址:
https://www.emlog.net/download
由于官方限制论坛会员(注册付费)才可下载,这里提供一个原版下载地址:https://www.lanzous.com/i1l5gad
文件校验:
博主的博客就是基于此套博客系统,其实很多圈内大佬都在使用,对于本款CMS的审计文章却并没有,笔者就来以此CMS作为PHP代码审计的封笔之作。
0x01 初步测试
首先,我们得先安装!安装成功后的首页界面:
安装成功
默认后台登陆地址:./admin/
登陆成功后:
后台界面
闲话一句,感觉6.0比5.3.1版本好看太多了~
安装过后,我们应该尽可能全面搜集关于此CMS的信息,这对于我们审计代码有很大的帮助。
所以,分析得到此CMS的大致结构,Emlog是一个 MVC 的设计模式,大致的结构如图:
emlog结构
因此我们主要会分析 admin 和 include 文件夹下的文件。
数据库表:
DATABASE
在根目录的init.php 文件中
报错等级
报错等级指定为7:
0x02 使用漏洞扫描器
可能有朋友就会说你为什么要使用“漏扫”呐?不是代码审计吗?
这里要纠正一下这个观点,漏扫其实就是一个自动化黑盒测试,在本地环境下,我们不会影响任何的业务。
通过漏扫出的漏洞能够方便我们快速定位漏洞位置,这样是一种高效的方式,这也是在团队里的成员通过漏扫Get了百度的几个高危漏洞给笔者的启示。
这里使用了一款重型扫描器 AWVS ,得到的报告如下:
结果
不过在本地扫描时,使用的是 XAMPP windows10PHP5.6的环境,所以导致漏洞报告中很多误报,漏扫主要扫描出了几个XSS漏洞和CSRF漏洞
所以我们首先验证这两类的漏洞
0x03 文章编辑器储存性XSS
编辑器XSS
成功发布后,来到首页
emlogXSS
进入文章页后
文章页XSS
为什么前台没过滤呐?为了文章有支持HTML代码输出,所以对于kindeditor的保存输出内容并没有转义。
emlog会员/投稿
修复建议:参考其他CMS做好文章内容关键词的检测,并做好过滤或者转义
0x04 Uploadify SWF XSS
Emlog使用了 uploadify.swf 的方式上传文件,文件路径/include/lib/js/uploadify/uploadify.swf
构造Payload:http://www.test.com//include/lib/js/uploadify/uploadify.swf?uploadifyID=00%22%29%29;}catch%28e%29{alert%281%29;}//%28%22&movieName=%22])}catch(e){if(!window.x){window.x=1;alert(document.cookie)}}//&.swf
效果,可无视浏览器filter:
SWF XSS
0x05 反射型XSS
此处的XSS主要发生在cookie上,因为某些页面如admin/admin_log,admin/sort.php,admin/link.php页面需要在表单中添加了hidden属性的token值,而这个token值直接从用户的cookie中取得,导致了一个反射型XSS
拦截抓包修改cookie中的token值如下:
payload
效果:
COOKIE XSS
其次验证了 CSRF 漏洞,这个是前台的搜索框的CSRF根本没什么价值
然后是管理员添加友情链接的XSS,经过验证并不存在,后台函数会限制字数
然后就是我们开始进行原始的代码审计工作了,主要借用了Seay代码审计工具和Rips,这种审计工具主要依靠正则匹配可能导致危险的php函数来作为可能存在漏洞的判断,半自动化的方式,在一定程度上缓解了代码审计的压力。
0x06 基本函数
首先看了一下文件操作相关的函数,发现经常用到 View::getView 这一方法,
在include/lib/view.php 文件中,源码如下:
同时作为权限控制的 LoginAuth::checkToken(),在 \include\lib\loginauth.php下约209行开始
验证了Rips扫描出的文件包含问题(第一次使用Rips),发现无法复现,因为Rips扫描的时候是以文件形式,并没有参照程序的严格逻辑,导致的误报!
来到 \admin\admin_log.php 文件,从第78行开始:
那么我们尝试越权删除文章http://www.test.com/admin/admin_log.php?action=operate_log&operate=del&blog=29&token=994132a26661c8c244a91063c4701a7e失败了提示权限不足,来到\include\model\log_model.php发现
这个越权漏洞不存在,同时看了下面的函数判断也是做了类似的处理
到这里其实我们对于整个 CMS 的架构已经较为熟悉了,基本能根据对应函数功能,直接手动找到对应的函数位置。
令人伤心的是,通过 Rips 代码审计工具得到的结果,一个都没复现成功...
0x07 Seay辅助审计
相信很多人都知道法师的这款工具,主要还是因为中文,用着方便,但是完全依靠正则的方式去匹配函数,只能发现那些函数直接的控制漏洞,逻辑漏洞有时候可以根据逆推可以发现,但这种情况很少。
使用这款工具扫描出来共120个可能的情况(根据经验98%以上都是没法复现的),然后一个个排查,有的例如SQL语句反单引号这样的,很容易就可以判断给忽略,就不需要考虑。
在 /admin/store.php 看到这样一串代码:
store.php
这里我的思考是,如果在emlog官网有URL跳转链接的话,那么就可以构造下载远程任意的文件到网站,但是测试了官网没有跳转链接,那么我们尝试下载别的插件(链接跳转等),或者有黑客精心构造了一个插件或者模版,然后再利用,这也算是一个可行的方案。
此处需要管理员权限,作为代码审计的一个参考思路,不是要发现什么0day,而是希望大家能够在代码审计方面有所收获。
(1). SQL注入
对于SQL注入,Seay工具一直都没准过,这里笔者推荐方式,使用全局搜索 $_GET[ 或$_PSOT[,然后看看是否代入了SQL查询,然后一一验证。
然后我发现了这样一个没有过滤IP参数
IP参数
然后到 admin/comment.php 中查看
comment.php
再看 delCommentByIp($ip) 函数
IP参数sql
由此我们可以确定了SQL注入的存在
验证如下:
SQL注入
(2).一个CSRF+任意文件删除
$_GET[]型分析完以后,就寻找$_POST[]的,然后在admin/data.php文件中找到了如下代码
data.php
这里我们发现,并没有验证toknen,那么可以构造csrf页面,这里笔者就不演示了,直接BURP验证一下任意文件删除吧,关于CSRF,只要没有调用上面基础函数部分说到的LoginAuth::checkToken()方法的,都存在CSRF
CSRF+任意删除
这里就成功删除了文件
(3).TAG SQL注入
在POST参数中发现此处并没有过滤,同时在 deleteTag() 函数中,代入了SQL查询,因此又是一个SQL注入
tag sql
来看deleteTag()函数:
deletetag
又调用了getBlogIdsFromTagId()函数,同样没有过滤
getBlogIdsFromTagId
因此使用抓包验证一下:
验证
但是其他语句利用时候并没有回显,笔者不知道什么原因,没仔细探究,但是可以采用时间盲注的方式。
至此,利用工具的半自动化审计已经结束,下面准备手工测试
0x08 手工测试
手工测试也不是单纯的翻文件,应当以灰盒测试为主导,从逻辑、权限、敏感信息等方面入手
(1).后台登陆存在暴力破解风险
在这里,我之前提到过的验证码未及时销毁的历史问题还存在,此处不再详细叙述,请参考https://blog.csdn.net/dyboy2017/article/details/78433748
(2).报错信息导致物理路径泄漏
大家不要以为这是小事情,当sql注入存在的时候,我们有机会是可以直接写shell文件,安全无小事
一个低权限的方式,在游客的条件下测试一下
物理路径
payload:http://www.test.com/admin/attachment.php?action[]=
原因是:addslashes() expects parameter 1
(3).Cookie可计算
在include/lib/loginauth.php中134行开始
可以看到此处的cookie都可以直接计算得到,只需要知道根目录下config.php中的
即可。
(4).侧边栏存储性XSS
为了同样是为了支持HTML代码的输出,没有转义对应的脚本代码标签,导致了存储性的XSS存在
侧边栏XSS
0x09 Getshell
(1).SQL注入拿到shell
如上所讲有SQL注入的存在,同时可以获取到物理路径,那么就可以直接写Shell
(2).后台插件上传zip
因为后台可以直接上传本地zip文件,这里我们去官网下载一个插件,同时把我们的shell文件(比如dyboy.php)加入zip,上传安装这个插件就可以了,然后shell地址为:http://www.test.com/content/plugins/插件名/dyboy.php
(3).后台模版上传zip
和插件同样的原理,这里的shell地址为:http://www.test.com/content/templates/模版名/dyboy.php
(4).备份文件拿shell
后台的数据功能处,先备份一个,然后下载到本地,加入SELECT "" intooutfile'D:\\Server\\htdocs\\safe\\dyboy.php';
然后导入备份恢复本地数据即可
这样就在网站个目录生成了一个dyboy.php的shell
0x0A 总结
EMLOG是一个非常小巧轻快的博客系统,运行占用资源非常低,所以非常适合博主用作博客用途,其实只要不开启会员功能,没有弱口令就没有什么大的威胁。以此文章作为PHP代码审计抛砖引玉,文章所述方法同样适用于其他的CMS代码审计和分析。
推荐系统
番茄花园Ghost Win7 x64 SP1稳定装机版2022年7月(64位) 高速下载
语言:中文版系统大小:3.91GB系统类型:Win7欢迎使用 番茄花园 Ghost Win7 x64 SP1 2022.07 极速装机版 专业装机版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,集成最全面的硬件驱动,精心挑选的系统维护工具,加上独有人性化的设计。是电脑城、个人、公司快速装机之首选!拥有此系统
番茄花园 Windows 10 极速企业版 版本1903 2022年7月(32位) ISO镜像快速下载
语言:中文版系统大小:3.98GB系统类型:Win10番茄花园 Windows 10 32位极速企业版 v2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动激活
新萝卜家园电脑城专用系统 Windows10 x86 企业版 版本1507 2022年7月(32位) ISO镜像高速下载
语言:中文版系统大小:3.98GB系统类型:Win10新萝卜家园电脑城专用系统 Windows10 x86企业版 2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程
笔记本&台式机专用系统 Windows10 企业版 版本1903 2022年7月(32位) ISO镜像快速下载
语言:中文版系统大小:3.98GB系统类型:Win10笔记本台式机专用系统 Windows 10 32位企业版 v2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过
笔记本&台式机专用系统 Windows10 企业版 版本1903 2022年7月(64位) 提供下载
语言:中文版系统大小:3.98GB系统类型:Win10笔记本台式机专用系统 Windows10 64专业版 v2022年7月 一、系统主要特点: 使用微软Win10正式发布的专业版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动
雨林木风 Windows10 x64 企业装机版 版本1903 2022年7月(64位) ISO镜像高速下载
语言:中文版系统大小:3.98GB系统类型:Win10新雨林木风 Windows10 x64 企业装机版 2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动激活
深度技术 Windows 10 x64 企业版 电脑城装机版 版本1903 2022年7月(64位) 高速下载
语言:中文版系统大小:3.98GB系统类型:Win10深度技术 Windows 10 x64 企业TLSB 电脑城装机版2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程
电脑公司 装机专用系统Windows10 x64 企业版2022年7月(64位) ISO镜像高速下载
语言:中文版系统大小:3.98GB系统类型:Win10电脑公司 装机专用系统 Windows10 x64 企业TLSB版2022年7月一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过
相关文章
- 新的 Linux 恶意软件从超级计算机窃取 SSH 凭证
- 网络k歌麦克风哪种好 网络k歌麦克风推荐
- 如何确保无服务器架构的安全
- 网络测试设备是什么
- IBM Cloud Pak for Security 再添零信任功能,确保客户安全
- 为什么说HTTPS比HTTP安全呢
- Win7密码保护共享关闭不了怎么办 密码保护共享关不掉的解决方法
- 美国吹哨人呢?SolarWinds事件两次国会听证会复盘
- 彻底杀除ARP病毒的办法
- 安全专家正在对巴勒斯坦黑客实施制裁
- 迄今已有 2100 家公司数据遭到勒索软件团伙泄露
- 硬盘录像机怎么使用 网络硬盘录像机设置步骤【详解】
- Win10系统怎么管理无线网络 Win10系统管理无线网络方法
- HTML5安全攻防之新标签攻击详解
热门系统
- 1华硕笔记本&台式机专用系统 GhostWin7 32位正式旗舰版2018年8月(32位)ISO镜像下载
- 2深度技术 Windows 10 x86 企业版 电脑城装机版2018年10月(32位) ISO镜像免费下载
- 3雨林木风 Ghost Win7 SP1 装机版 2020年4月(32位) 提供下载
- 4电脑公司 装机专用系统Windows10 x86喜迎国庆 企业版2020年10月(32位) ISO镜像快速下载
- 5深度技术 Windows 10 x86 企业版 六一节 电脑城装机版 版本1903 2022年6月(32位) ISO镜像免费下载
- 6深度技术 Windows 10 x64 企业版 电脑城装机版2021年1月(64位) 高速下载
- 7新萝卜家园电脑城专用系统 Windows10 x64 企业版2019年10月(64位) ISO镜像免费下载
- 8新萝卜家园 GhostWin7 SP1 最新电脑城极速装机版2018年8月(32位)ISO镜像下载
- 9电脑公司Ghost Win8.1 x32 精选纯净版2022年5月(免激活) ISO镜像高速下载
- 10新萝卜家园Ghost Win8.1 X32 最新纯净版2018年05(自动激活) ISO镜像免费下载
热门文章
常用系统
- 1新萝卜家园 GhostWin7 SP1 电脑城极速稳定版2021年11月(32位) ISO镜像高速下载
- 2电脑公司Ghost Win8.1 64位 精选纯净版2018年4月(免激活) ISO镜像免费下载
- 3笔记本&台式机专用系统GhostWin7 64位中秋特别 旗舰版2021年9月(64位) 高速下载
- 4电脑公司 装机专用系统Windows10 x86元旦特别 企业版 版本1507 2022年1月(32位) ISO镜像快速下载
- 5笔记本&台式机专用系统 Windows10 企业版 版本1903 2021年11月(32位) ISO镜像快速下载
- 6电脑公司 装机专用系统Windows10 x86企业版2021年3月(32位) ISO镜像快速下载
- 7新萝卜家园 Ghost XP SP3系统 电脑城极速纯净版 2020年5月 ISO镜像高速下载
- 8笔记本系统Ghost Win8.1 (X64) 全新纯净版2020年11月(永久激活) 提供下载
- 9电脑公司Ghost Win8.1 x32 精选纯净版2020年12月(免激活) ISO镜像高速下载
- 10新萝卜家园电脑城专用系统 Windows10 x64 元旦特别 企业版2021年1月(64位) ISO镜像免费下载