当前位置: 首页 > article >正文

PHP代码审计学习02

目录

代码审计一般思路

Beescms代码审计(upload)

Finecms基于前台MVC任意文件上传挖掘思路

CLTPHP基于thinkphp5框架的文件上传挖掘思路


        今天来看PHP有框架MVC类,文件上传,断点调试挖掘。

        同样还是有关键字搜索功能点抓包两种方法来找到文件和代码段,最后进行分析。

        经过这两天的代码审计学习,有了一些认识,那就是渗透测试相当于是黑盒测试,而代码审计相当于是白盒测试,代码审计会把一个系统的源代码给你,然后使用源代码审计工具,针对某种漏洞进行定点挖掘,也可以随机挖掘。

代码审计一般思路

总结一下目前学习时自我认为的代码审计思路,比如针对文件上传漏洞,首先全局搜索关键字眼如“文件上传””upload”,找到文件上传点,然后看它使用了哪些参数,哪些函数,然后观察是否有可以绕过的可能。

搜索 $FILES  ->后台中心->上传图像->跟踪代码->逻辑判断

业务功能分析->会员中心->上传图像->跟踪代码->逻辑判断

搜索文件上传->会员中心->上传图像->跟踪代码->逻辑判断

Beescms代码审计(upload)

看了beescms两个关于文件上传的代码之后,发现一个有上传漏洞,一个没有上传漏洞。一个是只判断MIME类型,直接在文件上传时抓包修改MIME类型即可上传成功,而另一个则是使用了phpinfo()函数对后缀名进行验证。

这也给了我们在安全开发时候的一点启示,那就是不要依靠MIME类型来过滤文件,因为MIME可以伪造。

同时,使用PHPStorm+xdebug进行断点调试,可以清楚的知道每一步以及每一个工作流程调用了哪些函数和文件。与抓包相比,能抓到更多文件在执行时的状态,在找不到真实文件时,断点调试能够帮我们找到指定文件。

Finecms基于前台MVC任意文件上传挖掘思路

首先MVC模式在javaweb课程中学过,MVC就是模型视图控制器模式,首先View(视图)是指前端的内容,前端的内容提交给后端之后,首先被Controller层截获,然后对不同的请求进行响应并决定如何给前端展示数据,但这些内容都要经过Model层(dao+service)与数据库进行交互之后,再返回给前端。

有MVC架构的cms系统,在找处理文件上传的核心代码时,要去controller层里根据抓到的包去找。

分析之后,发现Finecms系统文件上传存在逻辑安全漏洞,它是先上传文件到系统中,然后才进行验证。我们可以修改文件后缀名传入木马文件,控制系统。

所以说代码审计就是找到处理某一个功能点以及对相应漏洞过滤的核心代码,找它的逻辑漏洞。

CLTPHP基于thinkphp5框架的文件上传挖掘思路

thinkphp算是MVC思想的具体实现,核心还是MVC这种开发思想。

一般来说,采用MVC开发模式的数据包在请求行中都是这样的:

s=xx m=xx c=xx

或者

/member/uploadFile/upload

都意味着,处理某个功能的核心代码就在 member目录下的uploadFile文件里的upload函数中。

针对这种利用比较完善的开发框架开发出来的系统,除了找它框架本身的漏洞之外,如果程序员在开发过程中,没有按照框架要求来设计过滤代码,也就是写法不规范等等,也有可能产生安全漏洞。

在这个审计学习过程中,对于有框架的,审计找到框架漏洞,那么就会找出很多基于这个框架漏洞了。

在这个过程中学到一些php函数记录一下

strtolower()函数  把字符串全部转化为小写

strtoupper()函数  把字符串全部转化为大写

lcfirst()函数      把字符串首字符转化为小写

ucfirst()函数     把字符串首字符转化为大写

in_array()函数   查找数组中是否有某一个值

in_array(“Kobe”,$arrays [,$strict=true] ) 找到值返回true,否则返回false    $strict可选,为true时还要比较数值类型

str_replace()函数  将字符串中的值换为另一个值,区分大小写

<?php

echo str_replace("world","Peter","Hello world!");

?>

如果不区分大小写,请用 str_ireplace()函数

欢迎各位佬批评指正!


http://www.kler.cn/a/531738.html

相关文章:

  • 读算法简史:从美索不达米亚到人工智能时代05天气预报
  • react-bn-面试
  • Med-R2:基于循证医学的检索推理框架:提升大语言模型医疗问答能力的新方法
  • 深度学习之“缺失数据处理”
  • 六十分之三十七——一转眼、时光飞逝
  • 双指针算法思想——OJ例题扩展算法解析思路
  • Vue-data数据
  • WebSocket——netty实现websocket编码
  • JDK 8 的HashMap扩容源代码分析
  • 【自学笔记】GitHub的重点知识点-持续更新
  • 让万物「听说」:AI 对话式智能硬件方案和发展洞察
  • Ada语言的数据库交互
  • 《LLM大语言模型深度探索与实践:构建智能应用的新范式,融合代理与数据库的高级整合》
  • 一文了解硅基流动(SiliconCloud):有前景的大模型云服务平台
  • 为AI聊天工具添加一个知识系统 之83 详细设计之25 度量空间之2 知识树
  • Spring Boot框架下的单元测试
  • 3 Yarn
  • JAVA实战开源项目:学科竞赛管理系统(Vue+SpringBoot) 附源码
  • 我的AI工具箱Tauri版-ZoomImageSDXL全图超清放大TILE+SDXL
  • DOM 操作入门:HTML 元素操作与页面事件处理
  • JVM执行流程与架构(对应不同版本JDK)
  • 记忆化搜索和动态规划 --最长回文子串为例
  • EtherCAT主站IGH-- 29 -- IGH之mailbox.h/c文件解析
  • Skyeye 云 VUE 版本 v3.15.7 发布
  • 996引擎-怪物:添加怪物
  • 对象的实例化、内存布局与访问定位