原副标题:php架构标识符审计工作路子(下)
开发人员写在该文前:
上周五,开发人员MD224CH早已和我们撷取了在“php架构标识符审计工作”中他们对相容商业模式和path_info商业模式、重新命名内部空间、tp5的恒定初始化业务流程等文本的审计工作路子。
中金简述:《php架构标识符审计工作路子(上)》
(一)路由初始化静态增容
1. 如下表所示图右图,这儿会初始化两个Middleware类下run()形式来把旋量群表达式注册登记两个开发工具。
2.竭尽全力返回那个app中,初始化两个dispatch()的形式。
2.竭尽全力返回这个app中,初始化两个dispatch()的形式。
3. 这儿的call_user_func反弹表达式,称得上ctf赛事中较为经典之作的两个标识符执行表达式,但即使这儿早已把表达式写死了,因此他们也无法采用。但只不过我们能试著采用反格式化的形式,而已这与他们那时撷取的文本毫无关系,因此他们如若埃唐佩县,竭尽全力丫蕊resolve()。
4. 才刚他们早已运转到了435行,采用resolve()形式后反弹到了那个旋量群表达式中,因此他们现在又能返回432行去初始化旋量群表达式中的run()形式。
5.前面进行的部分都是解析,现在才开始他们真正的路由调度,他们从这儿直接采用那个exec()形式。
6. 像监听这一类的形式,他们能选择忽略不看,直接往主要的初始化文本上看,否则恐怕会越增容越偏离。
7. 进入两个parseModuleAndClass()形式来解析模块和类。
,然后初始化他的形式。从以下这段标识符能看出:
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拿到权限,但有时候一些中低危也有可能会包含一些较为隐蔽的、提升危害的形式。
(六)了解MD224CH,了解星云博创
星云博创科技有限公司(简称“星云博创”)成立于2016年,是国内新兴的网络安全产品、可信安全管理平台、专业安全服务与解决方案的综合提供商。星云博创设北京为北方总部,广州为南方总部,并于成都、合肥、南昌、贵州、武汉、太原、哈尔滨等多个城市设立分支机构。同时,星云博创为不断完善客户服务体系和应急响应体系,在全国10余个省、市、自治区、直辖市建立三级服务支持中心,7×24小时接受客户需求,及时提供标准一致的安全服务。
作为一家以技术先导的企业,星云博创始终坚持在网络安全、数据安全、态势感知、等级保护、合规性安全管理等领域进行技术创新,利用安全分析、大数据分析、人工智能等技术,对网络内部空间安全要素、安全风险进行深度挖掘与关联分析,构建了多层次的纵深防御体系,持续推出态势感知平台、静态脱敏系统、终端安全监测系统等一系列优秀的安全产品和行业解决方案,广泛应用于政府、运营商、医疗、教育、电力、能源等多个领域,让风险无所遁形。
星云博创已获得ISO9001、ISO27001、 ISO20000管理体系认证,CMMI5软件成熟度认证,信息系统安全集成服务、信息安全风险评估服务、软件安全开发服务资质的CCRC二级认证,及安全运维服务资质、应急处理服务资质的CCRC三级认证。此外,星云博创还是国家信息安全漏洞库(CNNVD)技术支撑单位、海南省网络安全应急技术支撑单位、广州市应急联动机构支撑单位。