当前所在位置: 首页 > 生活常识 > 正文

php代码审计思路(代码审计思路)

2023-01-16 canyinms.com 【 字体:

php代码审计思路,代码审计思路。小编来告诉你更多相关信息。

php代码审计思路(代码审计思路)

程序员写在文章前:

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

(一)路由调用动态调试

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

php代码审计思路(代码审计思路)

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

php代码审计思路(代码审计思路)

php代码审计思路(代码审计思路)

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

php代码审计思路(代码审计思路)

4. 刚刚我们已经运行到了435行,使用resolve()方法后回调到了这个闭包函数中,所以我们现在又可以回到432行去调用闭包函数中的run()方法。

php代码审计思路(代码审计思路)

php代码审计思路(代码审计思路)

5.前面进行的部分都是解析,现在才开始我们真正的路由调度,我们从这里直接使用这个exec()方法。

php代码审计思路(代码审计思路)

6. 像监听这一类的方法,我们可以选择忽略不看,直接往主要的调用内容上看,否则恐怕会越调试越偏离。

php代码审计思路(代码审计思路)

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

php代码审计思路(代码审计思路)

8. 我们获取了一个命名空间,通过这命名空间我们就可以去创建一个对象,然后调用他的方法。从以下这段代码可以看出:

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

他会把只要是\'\\\'开头的部分都当做一个命名空间的开始,但是一般来说,调用的时候是不会去写\'\\\',而是去调用这个else,这里解析的就是\'/\'开头,紧接着把解析后的一组东西(包含命名空间)返回到controller方法当中。

php代码审计思路(代码审计思路)

9. 用class_exists来判断这个命名空间下的类是否存在,如果存在,就进去调用Container的 get 方法。

php代码审计思路(代码审计思路)

比赛心得分享:

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

php代码审计思路(代码审计思路)

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

php代码审计思路(代码审计思路)

(二)总结 简单来说,总结如下:

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

在这里,他就获取了一个可以说是恶意的命名空间了。

php代码审计思路(代码审计思路)

(四)Nday 使用方法

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

php代码审计思路(代码审计思路)

这里跟进后,你可以看到一个非public的方法,这也验证了我们之前说的一个事情,就是你挖洞或者打CTF的时候,如果你在一个框架中,没有找到直接访问恶意代码的地方,你可以去一些曾经调用过这些方法的办法中一级一级地往上溯源,直到找到入口。然后再开始构造poc,一步一步地测试。在这个方法中,我们可以看到1437行中有一个call_user_func(),并且这个方法中的传参并没有被写死,所以我们可以尝试去构造一些东西。

(五)扩大攻击面

我们通过这次分享,知道了tp、命名空间是怎么用,了解到如何通过使用命名空间去访问一个含有恶意代码的类。通过这种方式,我们可以尝试扩大自己的攻击面,不一定要从call_user_func这种方法直接入手,但是我们可以去尝试读文件或者任意删除这种东西。虽然我们相比于这种低危或者中危漏洞,更倾向于RCE拿到权限,但有时候一些中低危也有可能会包含一些比较隐蔽的、提升危害的方法。

(六)了解小星,了解星云博创

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

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

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

阅读全文
相关推荐

如何自制蛋挞

如何自制蛋挞
1、倒入低筋面、黄油和水,揉成面团状,藏一小时后取出,抹上黄油卷起,包上保鲜膜冷藏半小时。2、取出,将面团切成一厘米的面团,放入模具内,用力按压,中间稍薄,外缘要比模具高,将蛋挞液倒入蛋挞皮中,放入烤箱里烤30分钟即可。

肉火烧面怎么和面

肉火烧面怎么和面
1、首先用温水把酵母融开,加入面粉,用手把面粉揉成非常软的面团,可以放一点熬好的猪油在面团里面。2、然后放在温暖的地方,盖上保鲜膜发酵至2倍大,发好的面团用手插入不回缩,就说明面团发酵好了。

奶茶几分糖好喝

奶茶几分糖好喝
1、不同的人对奶茶的口感要求是不一样的,一般来说,奶茶有三分糖、五分糖、七分糖三种不同的口味。2、女生一般都喜欢喝甜一点的,而男生则喜欢喝不那么甜的,七分糖的奶茶最好喝。

过桥米线是哪里的?

过桥米线是哪里的?
过桥米线是来自云南省滇南地区的一种有名特色小吃。过桥米线最早是在清朝就已经出现,距离现在至少有一百多年的历史啦!起源于建水县东城外锁龙桥西侧的鸡市街头处,有建水的特产草芽、地椒作配料,风味独特而远近闻名。深受广大美食爱好者的喜欢,不少人为此专门长途跋涉,只为尝

面霜和乳液的区别

面霜和乳液的区别
面霜和乳液的区别,相较而言乳液的水分含量要比面霜高,乳液质地要轻薄一些,乳液主要作用是保湿,滋润可以隔离外界干燥的气候,面霜既可保湿,又可美白,还能抗衰老,乳液的吸收快一些,而面霜吸收比较慢一些,因为液体的吸收速度都比较快。

怎么摘隐形眼镜

怎么摘隐形眼镜
在摘隐形眼镜之前,先用洗手液将手清洗干净,以免将细菌带入眼睛内,对着镜子,用右手中指轻拉眼睛下眼睑,左手中指轻拉眼睛上眼睑,让黑色眼球暴露在空气中,用右手食指和拇指轻触镜片的两边缘部分,向中间推使镜片拱起,再用两手指轻轻捏出镜片即可。

粉饼和散粉的区别

粉饼和散粉的区别
粉饼是呈压缩固体状态,多呈圆形或者方形,散粉则是细腻的粉末状,粉饼遮瑕力会比较强一些,可以湿用做粉底,或者用来补妆,而散粉则是定妆的效果,粉饼通常用在底妆的第一步,而散粉通常用在底妆最后一步。

冷烫和热烫的区别

冷烫和热烫的区别
冷烫和热烫的区别:冷烫对头发的要求是要在保温状态下才能给卷有个好的效果,而热烫是在干和湿的情况下都行,热烫烫出来的头发比较自然明显而有弹力,冷烫的头发风干后基本看不出来,并且发质会有点干。

高品质香水如何鉴别?用三步就可以解决

高品质香水如何鉴别?用三步就可以解决
1、看色泽以天然香料调制而成的高级香水,都有它本来的颜色,且大都是琥珀色或褐色,看起来很像宝石,比如,从茉莉、玫瑰或水仙等天然鲜花中所萃取的精油都呈黄色、褐白或绿褐色;此外,香水中所添加的魅惑香气物性香料也是褐色,苔类中的橡树苔是绿色,从树根或树根脂类中萃取的

如何去除黑眼圈

如何去除黑眼圈
去除黑眼圈首先可以用热毛巾敷眼,然后再用冷毛巾敷,十分钟就能让黑眼圈淡化的不那么严重,其次将去壳后的鸡蛋用无菌纱布包裹住,敷于眼部轻轻转动,可以急救去除黑眼圈,另外抹完眼霜后,用双手顺时针按摩,可以促进血液循环消除黑眼圈。
本文Tag