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 复制代码
<?php

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

?>

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

欢迎各位佬批评指正!

相关推荐
白帽子凯哥哥7 小时前
零基础转行网络安全需要多长时间?具体的学习路径是怎样的?
学习·安全·web安全
从零点7 小时前
STM32学习笔记CAN
笔记·stm32·学习
embrace997 小时前
【C语言学习】预处理详解
java·c语言·开发语言·数据结构·c++·学习·算法
starrycode8887 小时前
【每日一个知识点】Kotlin基础语法核心学习笔记
笔记·学习·kotlin
YJlio8 小时前
ZoomIt 学习笔记(11.11):休息计时器与演讲节奏控制——倒计时、番茄钟与现场掌控力
数据库·笔记·学习
山土成旧客8 小时前
【Python学习打卡-Day23】从重复到重用:用Pipeline和ColumnTransformer重构你的机器学习工作流
python·学习·重构
TL滕8 小时前
从0开始学算法——第十九天(并查集)
笔记·学习·算法
Cuby!8 小时前
IEEE Wireless Communications 2025年论文整理2(中英文摘要)
论文阅读·学习·信息与通信
白帽子黑客杰哥8 小时前
零基础学习网络安全,如何安排每天的学习计划?需要重点攻克哪些核心技能点?
学习·安全·web安全·渗透测试·人才培养·网络安全培训
YJlio8 小时前
ZoomIt 学习笔记(11.10):键入模式——在桌面上直接打字讲解的最佳实践
服务器·笔记·学习