记一次代码审计过程

# 记一次代码审计过程 ## 前言 以下内容仅供技术研究学习使用!严禁用于非法操作! 由于本人比较菜,只能审计一些小cms,如果有什么错误或者见识浅薄的地方师傅们帮忙指出下。 ## 正文 ###...

记一次代码审计过程

前言

以下内容仅供技术研究学习使用!严禁用于非法操作!
由于本人比较菜,只能审计一些小cms,如果有什么错误或者见识浅薄的地方师傅们帮忙指出下。
代码下载链接:https://pan.baidu.com/s/19QEnupWGo-XZFZtHWnuhDw
提取码:rbd0

正文

漏洞一:

本地搭建

看到这里有个公司名称,看看有没有xss,放入审计工具看一下

很明显是第二个(因为我是在安装路径里面)

可以看到这里面他申请了一个数组,应为是下标为公司名称的在看看前面的$lang->install,按经验来看这应是是一个实例化的类,按照正常思路我们往前面翻一番看看有什么

他这里果然是一个实例化的类,去找一找这个类,找了半天没找到,感觉很奇怪,我就直接找这个

变量了

看看哪里输出了这个变量

可以看到这里他直接输出了,及有可能存在xss,试试看

保存

成功弹窗,而且这是个存储型的xss,写入数据库了。

漏洞二:

常规思路寻找上传点

找到上传点,接下来就是找他所对应的源码位置在哪里,还是老方法,通过报错找


太多了快一百个了,这一个个找要很久,换个思路,上传一个正常的看他提示了啥,后来发现没提示,这就麻烦了找不到,后来想一想可以从前端源代码里面看他调用了什么函数

有了,去找找看

找到了


可以看到他调用了两个函数先看第一个


这个有点迷糊,网上找了很多资料,我猜可能是调用loadModel方法时传递了一个非空的appName,会导致错误。
所以调用父类的loadModel方法来避免这个错误。

好了我们再看第二个函数


可以看到他有调用了getupload函数,追踪看看


取关键函数来看,可以看到他声明了一个空的数组给$file然后再用is_array()来判断是否上传文件名是否存在,再用extract和foreach函数来赋值键值和循环赋和值给$di与$filename,最后我们就直接看这个赋值后缀名的函数getExtension

他这里进行了两次过滤,一次黑名单一次白名单我们搜一下两个的黑白名单分别为什么



可以看到这几乎不太可能绕过的,我就试着先常规绕过看看


这里再后缀名改成php后再加一个点或者直接加一个点,都能绕过,我就纳闷了,复制路径看了一下

后缀名为空,但是却能执行,这。。。。。。。把我给整傻了,后来我再去分析了一下,发现了两个原因

原因一:


他这里是逻辑有问题,只要我们在第一个if的时候判断后缀名为空(因为是与逻辑一个为假就都为假)就可以绕过后面的三个if判断了这样就绕过黑白名单和强制后缀名判断php了。

原因二:

对于没有后缀名但是能强制解析成php很可能是有开始 .htacess(应该是安装建站系统的时候就会默认存在的)

.htacess:网上对这个的解释是taccess文件(或者"分布式配置文件"), 全称是Hypertext Access(超文本入口),负责相关目录下的网页配置, 了针对目录改变配置的方法, 即在一个特定的文档目录中放置一个包含一个或多个指令的文件, 作用于此目录及其所有子目录, 通过.htaccess文件可以实现网页301重定向、自定义404页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能,嗯,大概意思就是会把没有后缀名的或者其他后缀名的都解析成php格式,

结语

这次审计花了挺长时间的,在很多代码理解方面还是欠缺,所以有错误希望师傅们指出,最后写这篇文章的目的是和师傅们一起学习,共同进步,如何师傅要源码的可以找我。

  • 发表于 2021-07-28 10:49:57
  • 阅读 ( 6230 )
  • 分类:代码审计

0 条评论

请先 登录 后评论
yggcwhat
yggcwhat

6 篇文章

站长统计