PHP代码审计学习02

news/2025/2/3 19:45:05 标签: 学习

目录

代码审计一般思路

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.niftyadmin.cn/n/5841030.html

相关文章

MVC、MVP和MVVM模式

MVC模式中&#xff0c;视图和模型之间直接交互&#xff0c;而MVP模式下&#xff0c;视图与模型通过Presenter进行通信&#xff0c;MVVM则采用双向绑定&#xff0c;减少手动同步视图和模型的工作。每种模式都有其优缺点&#xff0c;适合不同规模和类型的项目。 ### MVVM 与 MVP…

LeetCode:63. 不同路径 II

跟着carl学算法&#xff0c;本系列博客仅做个人记录&#xff0c;建议大家都去看carl本人的博客&#xff0c;写的真的很好的&#xff01; 代码随想录 LeetCode&#xff1a;63. 不同路径 II 给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角&#xff08;即 grid[0][0]…

Python - pyautogui库 模拟鼠标和键盘执行GUI任务

安装库&#xff1a; pip install pyautogui 导入库&#xff1a;import pyautogui 获取屏幕尺寸&#xff1a; s_width, s_height pyautogui.size() 获取鼠标当前位置&#xff1a; x, y pyautogui.position() 移动鼠标到指定位置&#xff08;可以先使用用上一个函数调试获取当…

【Elasticsearch】_all 查询

在 Elasticsearch 中&#xff0c;_all 查询是一种特殊的查询方式&#xff0c;用于在多个索引或数据流中执行搜索操作&#xff0c;而无需显式指定每个目标索引或数据流的名称。以下是关于 _all 查询的详细说明&#xff1a; _all 查询概述 用途&#xff1a;_all 查询允许您在多个…

96,【4】 buuctf web [BJDCTF2020]EzPHP

进入靶场 查看源代码 GFXEIM3YFZYGQ4A 一看就是编码后的 1nD3x.php 访问 得到源代码 <?php // 高亮显示当前 PHP 文件的源代码&#xff0c;用于调试或展示代码结构 highlight_file(__FILE__); // 关闭所有 PHP 错误报告&#xff0c;防止错误信息泄露可能的安全漏洞 erro…

kamailio-ACC、ACC_JSON 和 ACC_RADIUS 的区别

ACC、ACC_JSON 和 ACC_RADIUS 的区别 ACC、ACC_JSON 和 ACC_RADIUS 都是 Kamailio 中用于计费&#xff08;Accounting&#xff09;的模块&#xff0c;但它们的功能和后端支持有所不同。以下是它们的区别及案例说明&#xff1a; 1. ACC 模块 功能&#xff1a;ACC 模块是 Kamai…

C++ Primer 标准库类型string

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

R绘图 | pheatmap 聚类并设置间隔

一个pheatmap的小例子&#xff0c;包含设置列注释&#xff0c;列注释颜色&#xff0c;聚类&#xff0c;聚类间隔&#xff0c;保存为pdf等。 加方框失败&#xff0c;可以后续使用Illustrator手工添加 效果图&#xff1a; library(pheatmap) set.seed(2025) mat <- matrix…