54 代码审计-TP5框架审计写法分析及代码追踪

news2024/9/27 15:24:44

目录

    • 知识点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你就知道这个漏洞的大概说明,你就知道漏洞产生在那个地方
在这里插入图片描述

这个资料一直在更新,不是说这个漏洞一直在出现, 或者网上有公开,他就是根据官方的更新提示,修改那个地方,然后根据修改的地方去分析,能分析出来,他就把项目增加,分析不出来,即使有漏洞,你也不知道,他也不知道
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1310123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyQt6 简单介绍与安装

前文,参考文章: 参考文章一 参考文章二 PyQt6 简单介绍与安装 1、简单介绍2、PyQt6安装3、PyQt6版本查看4、PyQt6模块4.1 界面承载部分( 控件 )4.2 界面框架部分(布局)4.3 界面组件部分(其实也是Widget类&#xff0…

Json数据报文解析-Gson库-JsonObject类-JsonParse类-JsonArray类

一、前言 本文我们将介绍如何解析Json数据,主要通过Gson库中的相关类来实现。 二、详细步骤 首先,我们要拿到一个基础的Json数据,这里将以下面的Json数据作为示例: {"code":"1","msg":"ok&q…

电脑监控软件丨老板的“管理神器”?员工的“噩梦伊始”?

不得不承认,老板们都很喜欢用电脑监控软件来管控员工的工作情况。但是面对这个话题,他们却又有不一样的感受。 老板的“管理神器”?——首先来说老板 不得不说,老板确实很喜欢用域之盾软件--电脑管控功能https://www.yuzhidun.cn…

mfc140u.dll丢失的解决方法的详细介绍,六种解决mfc140u.dll丢失的方法

今天的这篇文章将向各位分享一个有关电脑出现关于丢失mfc140u.dll错误的弹窗问题,这是一个很常见的问题。无论你是一名大学生还是其他身份,都可能会遇到这个问题。下面我会对mfc140u.dll丢失的解决方法进行详细的介绍。 一.六种解决mfc140u.dll丢失的方法…

浪潮信息大突破:全面开源1026亿参数模型源2.0

近日,浪潮信息发布了一项重大成就,宣布全面开源其1026亿参数的基础大模型——源2.0。该举措在AI产业界引起了广泛关注,被视为推动生成式人工智能产业快速发展的关键一步。 源2.0模型概览 源2.0是一个多参数级别的大模型,提供了1…

‘BLEUUID‘ does not name a type错误怎么解决?

摘要:arduino环境下对esp32蓝牙编程时会遇到BLEUUID does not name a type错误,本文介绍解决方法。 硬件设备是安信可ESP32-S模组。 错误发生在代码最开始的地方,include了一个蓝牙设备头文件,然后定义了UUID,注意看&a…

Conda 使用教程大全来啦

什么是 Conda? Conda 是一款功能强大的软件包管理器和环境管理器,您可以在 Windows 的 Anaconda 提示符或 macOS 或 Linux 的终端窗口中使用命令行命令 Conda 可以快速安装、运行和更新软件包及相关依赖项。Conda 可以在本地计算机上创建、保存、加载和…

人工智能改变医疗保健:人工智能如何革命医学

人工智能(Artificial Intelligence, 简称AI)的快速发展正逐渐改变着我们的生活方式和社会结构。在医疗保健领域,AI的应用不仅提供了更准确、高效的诊断和治疗手段,还为医生和患者之间的交流提供了新的途径。本文将探讨人工智能如何…

计算机组成原理-ATT格式vsIntel格式

文章目录 AT&T格式 vs lntel格式 x86汇编语言是lntel格式,还有一种汇编语言格式是AT&T AT&T格式 vs lntel格式 lntel格式中取主存地址内容未指明长度默认为32位,对应下图中第四行右边的指令 百分号 美元符号 小括号 可用于计算机结构体数组…

有意思!40小时工作制来了,996再见

​在中国,加班文化已经深入人心。工资越高加班越多,“996”已成为一些行业标签,月薪30k以上的职场人中超过86%经常加班。所以今天我就来说一下这40小时工作制到底是从何而来,感兴趣的往下看看吧! 40小时工…

2023自动化测试框架的设计原则你都知道吗?快来看!

1.代码规范 测试框架随着业务推进,必然会涉及代码的二次开发,所以代码编写应符合通用规范,代码命名符合业界标准,并且代码层次清晰。特别在大型项目、多人协作型项目中,如果代码没有良好的规范,那么整个框架…

安装LLaMA-Factory微调chatglm3,修改自我认知

安装git clone https://github.com/hiyouga/LLaMA-Factory.git conda create -n llama_factory python3.10 conda activate llama_factory cd LLaMA-Factory pip install -r requirements.txt 之后运行 单卡训练, CUDA_VISIBLE_DEVICES0 python src/train_web.py…

MagicAnimate:Temporally consistent human image animation using diffusion model

1.Introduction 本文研究了任务形象动画人物,旨在根据特定的运动序列生成一个具有特定参考身份的视频。现有的人物图像动画的数据驱动方法可以基于所使用的生成主干模型分为两类,1.基于GAN,通常使用变形函数将参考图变形为目标姿态&#xff0…

Linux-----6、文件操作管理

# 文件操作管理 重要:Linux下,一切皆文件!!! 说在前面: 接下来所有的命令需要在一个载体上执行,这个载体就叫做终端。 终端上所有命令都需要一个东西翻译解析一下,计算机才能理解…

同义词替换工具在论文降重中的应用 神码ai

大家好,今天来聊聊同义词替换工具在论文降重中的应用,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧: 标题:同义词替换工具在论文降重中的应用 一、引言 在撰写论文时&#xff0c…

LeetCode力扣每日一题(Java):67、二进制求和

一、题目 二、解题思路 1、我的思路(残缺版) 好家伙,又是一道我盯着屏幕看了半天还没思路的题目 我只有一部分残缺的思路,在这里先写下来吧 我们可以先创建一个空字符串(后文称新字符串),用…

Linux-----5、文件系统

# 文件系统 # 终端的基本操作 ㈠ 打开多个终端 ㈡ 快速清屏 新建标签:command T 新建窗口:command N 关闭标签:command Q 关闭窗口:command W 放大:command 缩小:command - 清屏&#xff…

API绘画API:分分钟让你成为创作艺术家

引言 近几年,AI技术已经取得了显著的进步,尤其是在绘画领域。现在,通过使用API绘画API,普通人也可以像专业艺术家一样创作出令人惊叹的艺术作品。本文将向你介绍API绘画API的工作原理、如何使用它以及它对艺术创作的影响。 一、…

Java面向对象思想以及原理以及内存图解

文章目录 什么是面向对象面向对象和面向过程区别创建一个对象用什么运算符?面向对象实现伪代码面向对象三大特征类和对象的关系。 基础案例代码实现实例化创建car对象时car引用的内存图对象调用方法过程 成员变量和局部变量作用范围在内存中的位置 关于对象的引用关系简介相关…

js Intl.DateTimeFormat() 格式化时间利器

效果 案例 const options { year: numeric, month: 2-digit, day: 2-digit, hour: 2-digit, minute: 2-digit, second: 2-digit, hour12: false }; const now new Intl.DateTimeFormat(zh, options).format(new Date()).replace(/[/]/g,"-") console.log("当…