记一次代码审计过程 前言以下内容仅供技术研究学习使用!严禁用于非法操作!由于本人比较菜,只能审计一些小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格式,
结语
这次审计花了挺长时间的,在很多代码理解方面还是欠缺,所以有错误希望师傅们指出,最后写这篇文章的目的是和师傅们一起学习,共同进步,如何师傅要源码的可以找我。
- 本文作者: yggcwhat
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/307
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!