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()函数

欢迎各位佬批评指正!

相关推荐
洛白白9 分钟前
“职场心态与心穷
经验分享·学习·生活·学习方法
_dindong1 小时前
笔试强训:Week-4
数据结构·c++·笔记·学习·算法·哈希算法·散列表
DKPT2 小时前
如何设置JVM参数避开直接内存溢出的坑?
java·开发语言·jvm·笔记·学习
一 乐2 小时前
智慧党建|党务学习|基于SprinBoot+vue的智慧党建学习平台(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·学习
海边夕阳20062 小时前
MVCC核心原理解密:从隐藏字段到版本链的完整解析
经验分享·学习·数据库架构·mvcc
woodykissme3 小时前
日内瓦传动装置?不就是我们叫的间歇结构吗?
学习·机械
YJlio3 小时前
PsSuspend(7.23):无损挂起与恢复指定进程——精准“冻住”故障现场
笔记·学习·安全
小狗爱吃黄桃罐头5 小时前
正点原子【第四期】Linux之驱动开发学习笔记-10.1 Linux 内核定时器实验
linux·驱动开发·学习
im_AMBER5 小时前
Leetcode 47
数据结构·c++·笔记·学习·算法·leetcode
BreezeJuvenile5 小时前
外设模块学习(17)——5V继电器模块(STM32)
stm32·单片机·嵌入式硬件·学习·5v继电器模块