目录
- 知识点1
- 知识点2
- 演示案例:
- demo代码段自写和规则写分析
- hsycms-TP框架-不安全写法-未过滤
- weipan21-TP框架-规则写法-内置过滤
知识点1
调试,访问,路由,配置,版本等
知识点2
自写写法:自己写代码,一步步去实现功能的代码,从0到有的代码
不安全写法:在tp开发里面,代码段有一定是按照官方推荐写的,但是它在使用的时候,没有使用比较规矩的写法,就是他有使用官方的写法,然后自己也写了些自己的东西,半吊子的那种感觉
规则写法:完全按照官方开发手册去写,没有自己在单独写一些东西
自写写法:框架是完全没有作用的,他完全还是按照套路来,网站是建立在TP框架,这种情况就按照常规的审计流程,跟我们前面看代码一样,一个个追踪就完事了
不安全写法要跟踪自己写法里面或用官方写法里面有没有一些没有注意到的问题
规则写法,先寻找对应版本,然后在网上寻找一下关于对应版本有没有安全的一些问题,如果没有可以私下进行分析,如果有直接利用网上出现的问题进行测试,规则写法涉及到框架内置过滤问题,其实就是分析框架内置过滤问题,别人挖到的漏洞和自己挖到的漏洞,都是分析他框架内置过滤,就是研究它核心代码的,这是最难的
首先我们要把调式开关开上,找到config.php,把这两个开关设置为true
通过追踪对应的方式去追踪对应网址、对应代码段在那个地方,这也是我们在分析的时候必备的,追踪对应做不了的,后面就不用看了
通过查看三个文件,有些版本可能有,有些版本部分缺失,三个文件里面肯定是有一个存在的,只需要查看对应文件的内容,就能知道当前thinkphp版本,就来到规则写法这里
还有输出调式,在代码中,我们会经常写到关键字来输出当前调式,来看一下代码段网站执行的地址数据是否是接收正常,是否有相关过滤的问题
演示案例:
demo代码段自写和规则写分析
我们需要有一定的代码基础,然后通过查看ThinkPHP V5 完全开发手册,根据他官方推荐写法,对应一下差不多的就是官方写法
我们的写法就是完整的sql语句,而testsqlinl就是按照官方的手册来
我们看一下index进行数据传输
我们看一下数据库监控,发现没有执行相关代码,没有数据库语句出现
有两种原因,第一个是没有监控到,这个时候,我们可以利用调式模式
输入之后,执行的sql语句是没有任何变化的
如果我们用自写写法就是跟常规注入点是一样的,但是用规则写法,我们发现在这里注入的时候,参数传不进去,肯定就注入不了,因为规则写法是用ThinkPHP配置文件里面的过滤,导致语句写进去没有用
规则写法有没有漏洞,需要进行三点分析的
我们看一下当前版本
我们知道版本之后,就能借助网上公开的项目和网上搜索的相关资料,我们可以看一下漏洞介绍,发现有报过这个版本的漏洞
给出了漏洞触发地址,我们可以复制一下,他的实现代码参数给的是user
我们给的是id,我们简单改一下注入就可以实现一下,把每个username改成id,执行
这是他自身的安全问题造成的,核心里面的问题造成的,在使用规则写法的时候,我们无法探针到有没有漏洞,就是我们传入数据
不管我们如何提交,都看不到任何反应的时候,这个时候,我们就需要针对版本有没有相关的安全性问题,在网上搜索
有些ThinkPHP让我们升级,就是升级他的安全问题,那也不代表版本越低,漏洞越多
他的版本是建立在两个方面,一个是基于安全问题的升级,一个是他自己写法的升级,就是他框架自身引起的升级,就和我们windows一样,不是说漏洞在xp上多一些,当然的确是在xp上多一些,但是有些漏洞是不适用的,他是只建立在这个版本上面,就是你这个版本低也不行,高也不行,版本只是他东西的升级,他可能升级内核,保证ThinkPHP在运行网站更快,写法更简洁,同时也会更新安全问题
hsycms-TP框架-不安全写法-未过滤
这个是ThinkPHP开发的一套程序源码
先找到源码段,然后找入口文件同目录下的config.php,开启调式模式
我们分析的时候,需要借助调式模式来便于我们更加了解网站的一些相关问题,如果你不开调式模式的话,有时候即使有错误,他也不报给你,你也不知道那里出问题,调式模式就是更方便知道错误出在哪里,而且他有一些很好的功能,sql语句执行的监控各种各样的,这是一个良好习惯
在入口文件的目录下面,叫route.php,这个是路由文件,它的作用是访问路径的时候如何去分析路径,也就是控制路由的访问方式
我们访问地址信息,通过先查询数据库语句,然后再用这值匹配entitle,在指向文件
你访问地址有下面这些信息的话,这两种信息对应两种文件
点击流程,流程的关键词叫RUN,这里就一步到位帮我们找到网址对应的文件,你就知道网址在执行的时候,代码段处于那里
这种有个缺点不能定位到方法里面,刚才的路由就能直接追踪到方法里面
我们现在开始分析漏洞,很明显150、131是个变量值,这个值不同的时候,新闻就不同
首先第一步追踪文件,他的执行流程,运行的那个方法
我们再看sql语句,这里并没有看到
这个时候就用到客户端的监控工具,代码审计工具自带的监控工具也监控不到
我们执行一下150,在搜索一下
确定了代码段就在这里
我们这里要看input有没有过滤,我们直接测试就完事
在后面加一些东西,看他有没有带入进去,明显有带入进去,就可以测试注入点了
sql语句写得比较规律,但是他接收变量的时候,不规矩,他用的是Input接收
我们看官方的写法,数据接收的东西,他没有按照官方的写法加上这些东西,指定传输方式
也可以使用request写法
其它地方用规矩写法,其它地方就又不规矩了,这种叫半吊子;街溜子,自己写法,自己玩自己的
这三种写法都可能存在漏洞,前面两种会产生漏洞,第三种看版本
如果上面规则写法的sql注入漏洞修复了,我们可以从版本自身漏洞出发去分析漏洞,有就是有,没有你就自己挖
weipan21-TP框架-规则写法-内置过滤
以前违法类的资金盘,虚拟金币的网站,网上很多,都是采用thinkphp开发的
我们先把微盘的载入进去,看微盘的情况
这个源码主要是说思路,对TP框架进行代码审计,进去我们要先看一下入口,调试,路由文件,看完之后,我们要找代码分析,分析三种写法,自写、不安全、规则;如果是自写写法,我们就常规思路来,一步步跟踪变量,针对这三种有通用点,全部可以利用提交测试数据测试是否可控
它这里没有涉及到数据库,这个东西有过滤跟没过滤关系不大,因为它没有涉及到数据库语句或者上传操作这些关键性的东西,它就是地址上面的伪造,所以这个东西有过滤跟没过滤关系不大,因为他没有涉及到数据库语句、上传操作这些东西,就是地址上面的伪造
我们发现他这个写法都是很规矩的,那就要查看对应版本,找找对应资料,找到对应目录base文件
查看github项目地址,查看本地资料
x代表任意
有可以利用网上公开的漏洞利用工具,那就可以利用网上工具进行测试,那这就不是从代码去分析了,完全是利用网上公开工具
其实原则上还是分析了代码,只是说我们没有看代码,只是思路问题
直接把网站复制过来测试就完事了,这边是未检测到漏洞
我把版本找到了符合存在漏洞,但是没有找到漏洞,第一种就是你漏洞没有找全
我们推荐了这个项目,不代表这个项目就是完整的,他可能有些漏洞没有收录到上面,收录的只是高位漏洞,有些低危漏洞没有收录进去,都是收的什么代码执行文件包含这种高危漏洞
thinkphp官方有个更新的地址,然后更新的时候,每次都会有版本的发布说明,当有提到包含一个安全更新,说明在上一个版本有出现安全问题,所以我们可以从版本上判断有没有存在安全问题
我们在网上搜索thinkphp漏洞,你搜到的大部分是危害比较大的漏洞,但是他的漏洞是出了好多个,比如5.1、5.2、5.3、6.1,但是我们在网上没有找到漏洞,因为没有人去分析他或者没有人给出利用代码出来,但是刚好你的审计程序是在这套程序里面,假设6.1,你在网上搜不到任何漏洞,这个时候,我们找他官方地址,看一下他这个版本里面有没有提示关键字
有,那就说明他出过安全漏洞,只是说这个漏洞小,没有人去研究公开出来
你查commits你就知道这个漏洞的大概说明,你就知道漏洞产生在那个地方
这个资料一直在更新,不是说这个漏洞一直在出现, 或者网上有公开,他就是根据官方的更新提示,修改那个地方,然后根据修改的地方去分析,能分析出来,他就把项目增加,分析不出来,即使有漏洞,你也不知道,他也不知道