外链论坛

 找回密码
 立即注册
搜索
查看: 9|回复: 1

php框架代码审计思路(下)

[复制链接]

3065

主题

148

回帖

9911万

积分

论坛元老

Rank: 8Rank: 8

积分
99118926
发表于 2024-11-3 11:38:15 | 显示全部楼层 |阅读模式

程序员写在文案前:

上周,程序员小星已然大众分享了在“php框架代码审计”中自己对兼容模式和path_info模式、命名空间、tp5的正常调用流程等内容的审计思路。本周我将就“路由动态测试”、“思路总结”、“漏洞源自”、“Nday运用办法”、“扩大攻击面”五大部分与大众继续探讨,并附上我在科研过程中对CTF比赛的有些小心得。

上期回顾:《php框架代码审计思路(上)》

(一)路由调用动态调试

1. 如下图所示,这儿会调用一个Middleware类下run()办法来把闭包函数注册一个中间件。

2.继续回到这个app中,调用一个dispatch()的办法

3. 这儿的call_user_func回调函数,算是ctf比赛中比较经典的一个代码执行函数,然则由于这儿已然把函数写死了,因此咱们不可运用。但其实咱们能够尝试运用反序列化的方式,只是这与咱们今天分享的内容无关,因此咱们暂且跳过,继续看回resolve()。

4. 刚才咱们已然运行到了435行,运用resolve()办法后回调到了这个闭包函数中,所以咱们此刻能够回到432行去调用闭包函数中的run()办法

5.前面进行的部分都是解析,此刻起始咱们真正的路由调度,咱们这儿直接运用这个exec()办法

6. 像监听这一类的办法咱们能够选取忽略不看,直接往重点的调用内容上看,否则恐怕会越调试越偏离。

7. 进入一个parseModuleAndClass()办法来解析模块和类。

8. 咱们获取了一个命名空间,经过这命名空间咱们能够去创建一个对象,而后调用他的办法。从以下这段代码能够看出:

if (false !== strpos($name, \\))

他会把只要是\开头的部分都当做一个命名空间的起始然则通常来讲,调用的时候是不会去写\,而是去调用这个else,这儿解析的便是/开头,紧接着把解析后的一组东西(包括命名空间)返回到controller办法其中

9. 用class_exists来判断这个命名空间下的类是不是存在,倘若存在,就进去调用Container的get 办法

比赛心得分享:

1. 这儿显现一个Loader.php,他里面有一个include的办法。在这儿倘若你写入一个恶意文件(后缀不限),其实是能够进行代码执行的。不外,此漏洞在高版本的thinkphp中已然被修复了。然则,以这个框架的繁杂度来看,咱们还是能够想办法构造有些poc来调用到这个办法中来进行有些操作。有时候在有些比赛其中,出题人会去寻找有些类似这般的奇奇怪怪办法而后经过改造,让你能够拜访然则我估计大众经过有些绕圈子的办法才可绕到这个办法其中

2.接下来他将会运用反射来实例化,但到日前为止,他的路由调度算是完成为了

(二)总结

简单来讲,总结如下:

1. 当你传入了一个URL后,thinkphp会把你的URL提取出来;

2. thinkphp对传入的URL进行解析;

3. 解析后,thinkphp对URL进行拆分;

4. 拆分后,重组为一个命名空间;

5. tp5取得命名空间后,经过反射的方式实例化。

(三)漏洞源自

咱们刚才始终在提,tp5是怎么样解析这个咱们传入的URL?tp5是怎么样处理URL?

\、/这两个符号的处理方式是不同样的:倘若咱们传入的是\,那他会把\前面的部分和后面的部分当做是一个整体;倘若咱们传入的是/,那他就会拆开/前后的字符串,而后分别赋值。

举例:

你传入了一个:1\2,那tp5会认为这个1和2是掰开的;

你传入了一个:1/2,那tp5会认为这个1和2不是掰开的;

这个便是tp5系列路由漏洞的成因了。

咱们就有几个问题:

1. 怎么拜访到可能包括恶意代码的文件中去?

2. 倘若你想拜访这个恶意代码,你得怎么构造?

3. 你构造出来的话,怎么去用?

这儿咱们再写一下正常的构造方式:

http://localhost/index.php/admin/index/hello

咱们构造一个拜访thinkphp/think下的Container.php

http://localhost/index.php/模块名/File/get?name=path

恶意命名空间构造

http://localhost/index.php/index/think\Container/exists

然则这个斜杠咱们运用的时候就已然直接给转换了,因此咱们用不了,

咱们就得运用这个兼容模式来构造了。

http://localhost/index.php?s=index/think\Container/exists

这儿,他就获取了一个能够说是恶意的命名空间了。

(四)Nday 运用办法

?s=index/think\request/input?data=whoami&filter=system

这儿跟进后,你能够看到一个非public的办法,这验证了咱们之前说的一个事情,便是你挖洞打CTF的时候,倘若你在一个框架中,找到直接拜访恶意代码的地区,你能够有些曾经调用过这些办法的办法中一级一级地往上溯源,直到找到入口。而后起始构造poc,循序渐进地测试。在这个办法中,咱们能够看到1437行中有一个call_user_func(),并且这个办法中的传参并被写死,因此咱们能够尝试去构造有些东西。

(五)扩大攻击面

咱们经过这次分享,晓得了tp、命名空间是怎么用,认识怎样经过运用命名空间去拜访一个含有恶意代码的类。经过这种方式,咱们能够尝试扩大自己的攻击面,不必定要从call_user_func这种办法直接入手,然则咱们能够去尝试读文件任意删除这种东西。虽然咱们相比于这种低危中危漏洞,更倾向于RCE拿到权限,但有时候有些中低危有可能会包括有些比较隐蔽的、提高害处办法

(六)认识小星,认识星云博创

星云博创科技有限机构(简叫作“星云博创”)成立于2016年,是国内新兴的网络安全制品、可信安全管理平台、专业安全服务与处理方法的综合供给商。星云博创设北京为北方总部,广州为南方总部,并于成都、合肥、南昌、贵州、武汉、太原、哈尔滨等多个城市设立分支公司同期,星云博创为持续完善客户服务体系和应急响应体系,在全国10余个省、市、自治区、直辖市创立三级服务支持中心,7×24小时接受客户需要即时供给标准一致的安全服务。

做为一家以技术先导的企业,星云博创始终保持在网络安全、数据安全、态势感知、等级守护、合规性安全管理等行业进行技术创新,利用安全分析、大数据分析、人工智能等技术,对网络空间安全要素、安全危害进行深度挖掘与相关分析,构建了多层次的纵深防御体系,连续推出态势感知平台、静态脱敏系统、终端安全监测系统等一系列优秀的安全制品和行业处理方法,广泛应用于政府、运营商、医疗、教育、电力、能源等多个行业,让危害无所遁形。

星云博创已得到ISO9001、ISO27001、 ISO20000管理体系认证,CMMI5软件成熟度认证,信息系统安全集成服务、信息安全危害评定服务、软件安全研发服务资质的CCRC二级认证,及安全运维服务资质、应急处理服务资质的CCRC三级认证。另外,星云博创还是国家信息安全漏洞库(CNNVD)技术支撑单位、海南省网络安全应急技术支撑单位、广州市应急联动公司支撑单位。





上一篇:php框架代码审计思路
下一篇:PHP代码审计入门之路(渗透测试补全篇)
回复

使用道具 举报

3056

主题

2万

回帖

9913万

积分

论坛元老

Rank: 8Rank: 8

积分
99138998
发表于 前天 08:32 | 显示全部楼层
“沙发”(SF,第一个回帖的人)‌
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-15 15:08 , Processed in 0.137385 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.