php代码审计思路,代码审计思路 。小编来告诉你更多相关信息 。
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F46107-0.jpg)
文章插图
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F46107-0.jpg)
文章插图
程序员写在文章前:
上周,程序员小星已经和大家分享了在“php框架代码审计”中自己对兼容模式和path_info模式、命名空间、tp5的正常调用流程等内容的审计思路 。本周我将就“路由动态测试”、“思路总结”、“漏洞来源”、“Nday使用方法”、“扩大攻击面”五大部分与大家继续探讨,并附上我在研究过程中对CTF比赛的一些小心得 。
(一)路由调用动态调试
1. 如下图所示,这里会调用一个Middleware类下run()方法来把闭包函数注册一个中间件 。
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F43454-2.jpg)
文章插图
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F43454-2.jpg)
文章插图
2.继续回到这个app中,调用一个dispatch()的方法 。
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F44427-4.jpg)
文章插图
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F44427-4.jpg)
文章插图
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F4EE-6.jpg)
文章插图
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F4EE-6.jpg)
文章插图
3. 这里的call_user_func回调函数,算是ctf比赛中比较经典的一个代码执行函数,但是因为这里已经把函数写死了,所以我们也不能使用 。但其实我们可以尝试使用反序列化的方式,只是这与我们今天分享的内容无关,所以我们暂且跳过,继续看回resolve() 。
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F45920-8.jpg)
文章插图
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F45920-8.jpg)
文章插图
4. 刚刚我们已经运行到了435行,使用resolve()方法后回调到了这个闭包函数中,所以我们现在又可以回到432行去调用闭包函数中的run()方法 。
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F42093-10.jpg)
文章插图
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F42093-10.jpg)
文章插图
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F413N-12.jpg)
文章插图
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F413N-12.jpg)
文章插图
5.前面进行的部分都是解析,现在才开始我们真正的路由调度,我们从这里直接使用这个exec()方法 。
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F4J01-14.jpg)
文章插图
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F4J01-14.jpg)
文章插图
6. 像监听这一类的方法,我们可以选择忽略不看,直接往主要的调用内容上看,否则恐怕会越调试越偏离 。
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F43603-16.jpg)
文章插图
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F43603-16.jpg)
文章插图
7. 进入一个parseModuleAndClass()方法来解析模块和类 。
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F45a3-18.jpg)
文章插图
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F45a3-18.jpg)
文章插图
8. 我们获取了一个命名空间,通过这命名空间我们就可以去创建一个对象,然后调用他的方法 。从以下这段代码可以看出:
if (false !== strpos($name, \’\\\\\’))
他会把只要是\’\\\’开头的部分都当做一个命名空间的开始,但是一般来说,调用的时候是不会去写\’\\\’,而是去调用这个else,这里解析的就是\’/\’开头,紧接着把解析后的一组东西(包含命名空间)返回到controller方法当中 。
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F42Q4-20.jpg)
文章插图
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F42Q4-20.jpg)
文章插图
9. 用class_exists来判断这个命名空间下的类是否存在,如果存在,就进去调用Container的 get 方法 。
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F4K30-22.jpg)
文章插图
![代码审计思路 php代码审计思路](http://img.zhejianglong.com/230407/053F4K30-22.jpg)
文章插图
比赛心得分享:
1. 这里出现一个Loader.php,他里面有一个include的方法 。在这里,如果你写入一个恶意文件(后缀不限),其实是可以进行代码执行的 。不过,此漏洞在高版本的thinkphp中已经被修复了 。但是,以这个框架的复杂度来看,我们还是可以想办法构造一些poc来调用到这个方法中来进行一些操作 。有时候在一些比赛当中,出题人也会去寻找一些类似这样的奇奇怪怪方法,然后通过改造,让你可以访问,但是我估计大家得通过一些绕圈子的方法后才能绕到这个方法当中 。
推荐阅读
- 电脑详细的蓝屏代码大全 电脑蓝屏代码大全及解决方案
- 王者荣耀空白名字代码复制粘贴有哪些 王者空白代码复制粘贴
- 写编程代码用什么软件 电脑上的编程软件
- win10蓝屏错误的解决方法 蓝屏代码0xc000021a怎么修复
- 新手打野思路和技巧 打野思路和技巧
- 所有空白代码特殊符号大全 王者荣耀网名空白格复制
- 海尔滚筒洗衣机e2故障图解和修理 海尔洗衣机e2是什么故障代码
- 微信社群运营新思路 微信运营怎么做
- 做自媒体的10个赚钱思路 新媒体如何挣钱
- 电脑蓝屏代码大全及解决方法 电脑开机显示蓝屏英文怎么处理