原标题:PHP代码审计实战思路浅析

战略性的思考而非战术

对于面向过程写法的程序来说,最快的审计方法可能时直接丢seay审计系统里,但对于基于mvc模式的程序来说,你直接丢seay审计系统的话,那不是给自己找麻烦吗?

像面向过程写法的程序,可以找下它的公共函数文件有啥可以利用的不,然后就是丢seay审计系统。

而对于基于mvc写法的程序来说,跟读他的入口文件,了解整个程序的运行流程跟目录结构,之后再深入去了解它的核心类库,如果核心类库存在漏洞的话,那在这套程序中找出个漏洞的希望那不是一般的大啊!了解了整个框架运行流程后,也没从核心类库中发现什么可利用的点的话,这时就可以从功能点入手了(这时可以把源码丢进seay源代码审计系统了)。

一套组合拳打下了后还是没找到漏洞咋办?没事,换套程序继续。如果换了n套程序都找不出来,那就换个人吧……

实战环节

目标:某开源cms(icms)环境:win+phpstudy+sublime

大概目录结构长这样

├── app 应用├──

cache缓存├── core icms程序入口├── iPHP iphp框架文件├──

public公共资源├── res 用户资源└──

template模板

打开index.php

发现载入了一个icms.php,然后调用了iCMS::run()方法(如果你第一反应是以为iCMS.php是个类文件,那你后面的审计估计有点难受。)

跟进iCMS.php

该处载入了配置跟框架文件,继续跟进iPHP.php

载入几个框架文件,然后调用iPHP::bootstrap()方法,这回差不多了,继续跟进iPHP::bootstrap()

该处做了些环境配置,然后就是调用核心的iWAF、iSecurity类来一下全局过滤(iWAF这些先跟),看到这可有有的小伙伴又有疑惑了,iWAF什么时候加载进来了啊?

看到48行的spl_autoload_register函数了没,再具体点,看到56行那个autoload了没

这也没看到哪有include、require之类的啊,怎么加载进来的?别急,继续跟进57行的self::auto_require

没错就是这了,不过代码太长了就不贴了,大概就是判断传来的类名中是否有Admincp或者App,如果没有就加载app/xx/xx.class.php,如果有Admincp则加载app/xx/xx.Admincp.php,如果有App则加载app/xx/xx.app.php,如果有Func则加载app/xx/xx.func.php,如果以上都不满足则去iPHP/core/下找

iPHP::bootstrap()大概知道它干了什么了,再回头去看看iCMS::init()

大概就是初始化配置信息,继续往回看,跟进iCMS::run()

继续跟进iPHP::run

(代码有点长)大概就是从post或get获取应用名,加载类跟实例化类,调用方法等

划重点了(后面会用到),这里的文件名格式是xx.app.php,类名是xxApp,其实整套程序并不止index.php这一个入口文件,还有admincp.php、user.php等,其中加载的文件名格式跟类名都是不一样的,比如:访问index.php加载的是xx.app.php的xxApp类,访问admincp.php加载的xx.admincp.php的xxAdmincp类

跟完入口文件后,对整个框架是怎么运行的,都有了个大概的了解,接下来可以去深入了解了

我跟啊跟,发现核心类中的iHttp类的remote方法有点意思,在iPHP/core/iHttp.class.php 130行

remote方法封装了curl,用来获取远程页面内容,整个方法并没有对url进行任何限制或过滤,如果调用这个方法前也没用对url进行限制的话,那ssrf就跑不了了

全局搜索下看哪调用了这个方法,而remote是个静态方法,调用格式为iHttp::remote,所以直接搜这个就可以了

我想找前台的漏洞,so,直接看哪个的文件名格式类似xx.app.php就好啦

找啊找,仅发现前台只有一处调用了该方法

找到之后,跟进去看看

一直往上翻,只看到这句

会不会在iSecurity::escapeStr这做了限制呢?继续跟进去看看

貌似没有对url做限制!!!

再往上翻翻,看看是哪个方法

这回稳了,手动构造数据包

解释下个字段:

secode为验证码,可从http://127.0.0.1/icms/public/api.php?app=public&do=seccode获得,验证码信息存在cookie里,只要cookie不变,验证码就可一直用。

username跟nickname每次请求都要改变,avatar为传入的url,这个漏洞还有两处有点蛋疼的地方,第一,username跟nickname每次都要改变,而且这些值都是会存进数据库的;第二,这里的ssrf是没有回显。

使用dict来举个例子,访问一个未开启端口时如下

访问一个开启的端口时如下

如果上述说的都做完还没发现漏洞,那可以尝试丢到seay源代码审计系统,或者根据功能点进行审计,找找逻辑漏洞

如果做完上述操作后再用软件来辅助,会轻松的多,比如,seay源代码审计系统扫出来如下

拿第二条距离,漏洞描述是referer伪造会引起sql,点击瞅瞅

看到referer先进入了iSecurity::escapeStr,然后再进入iDB::insert,通过前面的审计我知道iSecurity::escapeStr对单引号等做了过滤,所以普通的sql注入是没希望了,只能看看还有没有其他方式能结合利用(我记得这是有注入的……)

如果我是一上来就用软件的话,那我现在可能还在一步一步的追一个函数,这样会增加不少功夫返回搜狐,查看更多

责任编辑:

php审计思路,PHP代码审计实战思路浅析相关推荐

  1. python文件审计系统_Python代码审计实战案例总结之CRLF和任意文件读取

    介绍 Python代码审计方法多种多样,但是总而言之是根据前人思路的迁移融合扩展而形成.目前Python代码审计思路,呈现分散和多样的趋势.Python微薄研发经验以及结合实际遇到的思路和技巧进行总结 ...

  2. 【代码审计】那些代码审计的思路.md

    前言 代码审计工具的实现都是基于代码审计经验开发出来用于优化工作效率的工具,我们要学好代码审计就必须要熟悉代码审计的思路.而且代码审计是基于PHP语言基础上学习的,学习代码审计最基本的要求就是能读懂代 ...

  3. 【kafka实战】分区重分配可能出现的问题和排查问题思路(生产环境实战,附视频)

    超强!!! Kafka高质量专栏学习大全,点我获取!!! 文章目录 前提 所有异常情况 1. TargetBroker若不在线,迁移脚本执行会失败 情景演示 2. TargetBroker在开始迁移过 ...

  4. java代码安全审计_《网络安全java代码审计实战》

    第1章 代码审计基础 1.1JavaWeb环境搭建 1.1.1JavaEE介绍 1.1.2JavaEE环境搭建 1.2JavaWeb动态调试 1.2.1Eclipse动态调试 1.2.2IDEA动态调 ...

  5. 一次代码审计实战案例【思路流程】

    前言: 利用这个 CMS 看看能不能挖到漏洞,运气还是不错的挖到了两个,分别是 SSRF 与文件覆盖 GETSHELL,下面给大家讲解一下这次审计的思路过程.该 CMS 版本是 4.2.以下漏洞均被 ...

  6. python文件审计_Python代码审计实战案例总结之CRLF和任意文件读取

    文章目录 介绍 CRLF和任意文件读取的审计实战 CRLF 审计实战 urllib CRLF漏洞(CVE-2019-9740和CVE-2019-9947) httplib CRLF 漏洞 任意文件读取 ...

  7. python数学建模(二)线性规划2.实战(思路清晰\过程完整、详细)

    文章目录 (一)简单陈述本文章的内容 (二)线性规划例题(实战) 2.1 实战题目 2.2 符号规定和基本假设 2.3 模型的分析 2.4 模型的建立 2.5 模型一的求解和分析 2.5.1 (代码) ...

  8. 代码审计系列篇一之代码审计学习思路

    学习代码审计要熟悉三种技术,分四部分走 一:编程语言   1:前端语言 html/javascript/dom元素使用 主要是为了挖掘xss漏洞 jquery 主要写一些涉及到CSRF脚本使用的或者D ...

  9. PO模式项目实战思路分析

    PO模式学习思路 采用版本迭代的方式来学习, 便于对不同版本的优缺点进行对比和理解         V1: 不使用任何设计模式和单元测试框架(线性模型)         V2: 采用测试框架,使用Un ...

最新文章

  1. 英国继银行被窃之后 信贷公司Wonga数十万客户数据被泄
  2. 枚举法 POJ1411
  3. 随机对照试验设计的原理
  4. apache.camel_Apache Camel 3.1 –更多骆驼核心优化(第2部分)
  5. 切换表达式到Java吗?
  6. 如何解决ajax跨域问题(转)
  7. Linux入门之常用命令(15) lsof
  8. linux 运行库 编译参数,Linux/CentOS 升级C基本运行库CLIBC的注意事项(当想解决GLIBC_2.x找不到的编译问题)...
  9. plc通信程序 c语言,三菱PLC编程口通信C语言源代码(3)
  10. 帆软扩展后排序(超链排序)
  11. Enterprise Architect 中文快速入门
  12. vivi开发笔记【专辑】
  13. 【转载】双重身份:2017JCR既是SCI又是SSCI的期刊名单
  14. matlab中注释多行
  15. 怎样快速学习一门新技术
  16. Revel组件化开发框架
  17. 锤子使用手册 android,锤子爱好者的新手使用指南
  18. R和RStudio软件安装
  19. “华为杯”山东理工大学第十一届ACM程序设计竞赛(正式赛)
  20. Abp vnext Web应用程序开发教程 5 —— 授权

热门文章

  1. 穷人最缺少的不是金钱,而是野心
  2. vue+elementui实现非常好看的博客、网站首页,网站模板
  3. sqlplus连接的三种方式
  4. 求学生课程平均分问题
  5. XX健康:预约管理-预约设置日历插件文件简单下载Excel文件解析Excel表数据批量导入
  6. MyBatis动态SQL之<foreach>用法
  7. RHadoop培训 之 Java基础课
  8. 视频下载神器you-get使用方法
  9. 学会应对不同的面试官
  10. java如何使用虹软sdk_Java使用虹软SDK做人脸识别之十分简单的入门