问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
记一次代码审计过程
漏洞分析
# 记一次代码审计过程 ## 前言 以下内容仅供技术研究学习使用!严禁用于非法操作! 由于本人比较菜,只能审计一些小cms,如果有什么错误或者见识浅薄的地方师傅们帮忙指出下。 ## 正文 ###...
记一次代码审计过程 ========= 前言 -- 以下内容仅供技术研究学习使用!严禁用于非法操作! 由于本人比较菜,只能审计一些小cms,如果有什么错误或者见识浅薄的地方师傅们帮忙指出下。 代码下载链接:<https://pan.baidu.com/s/19QEnupWGo-XZFZtHWnuhDw> 提取码:rbd0 正文 -- ### 漏洞一: 本地搭建 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-d12abd438137ecc3a9914bbfe49bd161b90724a7.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-d12abd438137ecc3a9914bbfe49bd161b90724a7.png) 看到这里有个公司名称,看看有没有xss,放入审计工具看一下 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-299a71d4df37f3809b62239d59dd8fd1b16a76b3.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-299a71d4df37f3809b62239d59dd8fd1b16a76b3.png) 很明显是第二个(因为我是在安装路径里面) [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-e3f41de07228d4824c8c289480fbfc507ecf7781.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-e3f41de07228d4824c8c289480fbfc507ecf7781.png) 可以看到这里面他申请了一个数组,应为是下标为公司名称的在看看前面的$lang->install,按经验来看这应是是一个实例化的类,按照正常思路我们往前面翻一番看看有什么 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-b1f96f950dd90b76997780ba161e1c3af3c2872b.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-b1f96f950dd90b76997780ba161e1c3af3c2872b.png) 他这里果然是一个实例化的类,去找一找这个类,找了半天没找到,感觉很奇怪,我就直接找这个 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-9d7537307e9daaea6687b4d73bcb9acafd395edf.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-9d7537307e9daaea6687b4d73bcb9acafd395edf.png) 变量了 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-99c6148521905f0dc3ce3f0252123e41cb920b15.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-99c6148521905f0dc3ce3f0252123e41cb920b15.png) 看看哪里输出了这个变量 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-2205ff983316cbc8329ed09c17c82f5408c3d864.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-2205ff983316cbc8329ed09c17c82f5408c3d864.png) 可以看到这里他直接输出了,及有可能存在xss,试试看 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-3b83b90126e0b718e7d271bb3908438c959ea8e3.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-3b83b90126e0b718e7d271bb3908438c959ea8e3.png) 保存 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-345289f276ad23869c7fbf3a657311b46c38e04c.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-345289f276ad23869c7fbf3a657311b46c38e04c.png) 成功弹窗,而且这是个存储型的xss,写入数据库了。 ### 漏洞二: 常规思路寻找上传点 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-9370179d8f8539708238f8ace30a7bf1cb445dba.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-9370179d8f8539708238f8ace30a7bf1cb445dba.png) 找到上传点,接下来就是找他所对应的源码位置在哪里,还是老方法,通过报错找 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-736bda55a11236a31ed41efe5d749658763ef37e.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-736bda55a11236a31ed41efe5d749658763ef37e.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-d97b7291c34ad02b83e85bcd05f24a35eb764e35.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-d97b7291c34ad02b83e85bcd05f24a35eb764e35.png) 太多了快一百个了,这一个个找要很久,换个思路,上传一个正常的看他提示了啥,后来发现没提示,这就麻烦了找不到,后来想一想可以从前端源代码里面看他调用了什么函数 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-82c20d76d40b817a405bb569452f35be2365fc44.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-82c20d76d40b817a405bb569452f35be2365fc44.png) 有了,去找找看 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-e9ec980d5d2d722e6a8d400f3dd5582186cff0e3.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-e9ec980d5d2d722e6a8d400f3dd5582186cff0e3.png) 找到了 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-a075782820838394fdd316fed74cc154978be392.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-a075782820838394fdd316fed74cc154978be392.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-956eded2f6fea6bf8545ac23741540ec2fd1769b.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-956eded2f6fea6bf8545ac23741540ec2fd1769b.png) 可以看到他调用了两个函数先看第一个 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-b15a7341ff09de755f9c05e648fabca8a21a3bba.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-b15a7341ff09de755f9c05e648fabca8a21a3bba.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-91ce53938ea4121416978dd02f653a4ff1b7755e.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-91ce53938ea4121416978dd02f653a4ff1b7755e.png) 这个有点迷糊,网上找了很多资料,我猜可能是调用loadModel方法时传递了一个非空的appName,会导致错误。 所以调用父类的loadModel方法来避免这个错误。 好了我们再看第二个函数 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-f80984d43172fa87ea315261549d8ffe320bbec8.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-f80984d43172fa87ea315261549d8ffe320bbec8.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-c48445d4871a24b01f7f806d71f6ec13edaebbff.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-c48445d4871a24b01f7f806d71f6ec13edaebbff.png) 可以看到他有调用了getupload函数,追踪看看 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-e61994a55a039f243c0481b2645574dd25876dbe.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-e61994a55a039f243c0481b2645574dd25876dbe.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-37d2b642a250dd2f02ce03f16fd42ec8db8b7f33.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-37d2b642a250dd2f02ce03f16fd42ec8db8b7f33.png) 取关键函数来看,可以看到他声明了一个空的数组给$file然后再用is\_array()来判断是否上传文件名是否存在,再用extract和foreach函数来赋值键值和循环赋和值给$di与$filename,最后我们就直接看这个赋值后缀名的函数getExtension [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-77abfdcb9afabb46367e16f3cd8e5040f77f6120.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-77abfdcb9afabb46367e16f3cd8e5040f77f6120.png) 他这里进行了两次过滤,一次黑名单一次白名单我们搜一下两个的黑白名单分别为什么 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-eeba01676a59ea1c90759ec3a1f919196fa9fb52.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-eeba01676a59ea1c90759ec3a1f919196fa9fb52.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-ad8603ab7b3ebe02aff4a77d1402aa8efd846eeb.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-ad8603ab7b3ebe02aff4a77d1402aa8efd846eeb.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-75211914db4c18ea8a11665a17d57661e1a6da97.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-75211914db4c18ea8a11665a17d57661e1a6da97.png) 可以看到这几乎不太可能绕过的,我就试着先常规绕过看看 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-5ab0249b0659ef7989e32371055bce676b268164.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-5ab0249b0659ef7989e32371055bce676b268164.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-c8f66fb53457abfdabb27de00b51d886afc94afd.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-c8f66fb53457abfdabb27de00b51d886afc94afd.png) 这里再后缀名改成php后再加一个点或者直接加一个点,都能绕过,我就纳闷了,复制路径看了一下 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-b62a24b8fa5a75577b55ff0af0024dc81dbdde46.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-b62a24b8fa5a75577b55ff0af0024dc81dbdde46.png) 后缀名为空,但是却能执行,这。。。。。。。把我给整傻了,后来我再去分析了一下,发现了两个原因 #### 原因一: [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-446504b3dafe80337f1d487a563b4d3d497a026a.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-446504b3dafe80337f1d487a563b4d3d497a026a.png) 他这里是逻辑有问题,只要我们在第一个if的时候判断后缀名为空(因为是与逻辑一个为假就都为假)就可以绕过后面的三个if判断了这样就绕过黑白名单和强制后缀名判断php了。 #### 原因二: 对于没有后缀名但是能强制解析成php很可能是有开始 .htacess(应该是安装建站系统的时候就会默认存在的) .htacess:网上对这个的解释是taccess文件(或者"分布式配置文件"), 全称是Hypertext Access(超文本入口),负责相关目录下的网页配置, 了针对目录改变配置的方法, 即在一个特定的文档目录中放置一个包含一个或多个指令的文件, 作用于此目录及其所有子目录, 通过.htaccess文件可以实现网页301重定向、自定义404页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能,嗯,大概意思就是会把没有后缀名的或者其他后缀名的都解析成php格式, 结语 -- 这次审计花了挺长时间的,在很多代码理解方面还是欠缺,所以有错误希望师傅们指出,最后写这篇文章的目的是和师傅们一起学习,共同进步,如何师傅要源码的可以找我。
发表于 2021-07-28 10:49:57
阅读 ( 5037 )
分类:
代码审计
0 推荐
收藏
0 条评论
请先
登录
后评论
yggcwhat
6 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!