首页 » Web前端 » php偏离度技巧_php框架代码审计思路下

php偏离度技巧_php框架代码审计思路下

访客 2024-12-09 0

扫一扫用手机浏览

文章目录 [+]

程序员写在文章前:

上周,程序员小老婆已经和大家分享了在“php框架代码审计”中自己对兼容模式和path_info模式、命名空间、tp5的正常调用流程等内容的审计思路。
本周我姑息“路由动态测试”、“思路总结”、“漏洞来源”、“Nday利用方法”、“扩大攻击面”五大部分与大家连续磋商,并附上我在研究过程中对CTF比赛的一些小心得。

php偏离度技巧_php框架代码审计思路下

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

php偏离度技巧_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)技能支撑单位、海南省网络安全应急技能支撑单位、广州市应急联动机构支撑单位。

标签:

相关文章

phpmongodb查询排序技巧_MongoDB 排序

在MongoDB中利用利用sort( 方法对数据进行排序,sort( 方法可以通过参数指定排序的字段,并利用 1 和 -1 来指定...

Web前端 2024-12-10 阅读0 评论0