sql注入实战——thinkPHP

ops/2024/9/23 9:19:28/

sql注入实战——thinkPHP

  • sql注入实战——thinkPHP
    • thinkPHP前期环境搭建
    • 创建数据库
    • 开始寻找漏洞点
      • 输入SQL注入语句
      • 漏洞分析
    • 实验错误

sqlthinkPHP_2">sql注入实战——thinkPHP

thinkPHP前期环境搭建

下载thinkPHP文件
在这里插入图片描述
解压,将framework关键文件放到think-5.0.15中,改名为thinkphp
在这里插入图片描述
再将think-5.0.15放到WWW文件夹中

输入localhost/WWW/think-5.0.15/public/index.php,访问应用入口文件
在这里插入图片描述
在这里插入图片描述
搭建完成

创建数据库

登入mysql
在这里插入图片描述
创建数据库
在这里插入图片描述

修改数据库连接文件 \phpstudy_pro\WWW\think-5.0.15\application\database.php
在这里插入图片描述
编写控制器——编写一个get传参,传参uesrname,默认值为a
在这里插入图片描述
将上面get传参获得的username插入到数据库users里面

db('users')->insert(['username' => $username]);

在这里插入图片描述

开始寻找漏洞点

输入SQL注入语句

sql">http://localhost/think-5.0.15/public/index.php?username[0]=inc&username[1]=updatexml(1,concat(0x7e,user(),0x7e),1)&username[2]=1  

在这里插入图片描述
注入成功

漏洞分析

官方发布的5.0.16版本更新说明中,发现其中提到了该版本修复了一个漏洞
在这里插入图片描述
查阅commit记录,发现其修改的Builder.php文件代码比较可疑 从官网的更新日记中可以看到(绿色为新添加补丁)漏洞大概率出于此处
在这里插入图片描述接着我们直接跟着上面的攻击payload看看漏洞原理。首先payload数据经过thinkphp内置方法的过滤后直接进入了$thik->builder的insert方法,所以从insert函数开始
在这里插入图片描述
在这里插入图片描述

断点下到insert语句,可以看到username传参1个数组,分别是我们输入的三个变量

  • username[0]=inc
  • username[1]=updatexml(1,concat(0x7e,user(),0x7e),1)
  • username[2]=1

之后走到db类中的insert方法
在这里插入图片描述
这是数据库的连接,跳出,来到insert函数
在这里插入图片描述

此处的$data中一个数组,三个变量即

  • username[0]=inc
  • username[1]=updatexml(1,concat(0x7e,user(),0x7e),1)
  • username[2]=1
    在这里插入图片描述

来到sql语句,传递data,options,replace三个传参
data:一个数组三个变量,同上
options:表名table=“users”

进入builder的insert方法中
在这里插入图片描述
而 Mysql类继承于 Buider 类,即上面的this->builder->insert()最终调用的是 Builder 类的 insert方法。在 insert 方法中,我们看到其调用 parseData方法来分析并处理数据,而 parseData方法直接将来自用户的数据val[1]进行了拼接返回。我们的恶意数据存储在val[1]中,虽经过了 parseKey 方法处理,当丝毫不受影响,因为该方法只是用来解析处理数据的,并不是清洗数据。

进入parseData
在这里插入图片描述

data = [username=array(3)]
key = “username”
val = array(3)=

  • array(0)=“inc”
  • array(1)=“updatexml(1,concat(0x7e,user(),0x7e),1)”
  • array(2)=“1”

往下滑,找到补丁处
在这里插入图片描述
在这里插入图片描述
从上面可以看到直接将用户数据进行拼接,然后再回到Builder类的insert方法,直接通过替换字符串的方式,将data填充到sql语句中,造成sql注入漏洞

break跳出,得到result
在这里插入图片描述

退出insert函数
在这里插入图片描述

keys和values的处理
在这里插入图片描述
在这里插入图片描述

最后进行sql的拼接,其中values等于我们的报错注入语句,所以漏洞出现,完成sql注入
在这里插入图片描述
在这里插入图片描述

实验错误

找不到用户
在这里插入图片描述
原因:新建的数据库内没有创建表和用户

创建表users,里面有两列username和password
在这里插入图片描述

查看表格和内部结构
在这里插入图片描述

向表内插入用户
在这里插入图片描述

查看表内用户数据
在这里插入图片描述

创建用户成功
在这里插入图片描述
成功报错


http://www.ppmy.cn/ops/92730.html

相关文章

数据跨境传输的安全合规风险如何规避?获取免费解决方案白皮书

在全球化的背景下,企业进行有 效的资源整合,学习海外市场的先进技术和管理经验,寻找新的增长点,实现业务的多元化和 可持续发展,不仅有利于开辟新市场,更有助于巩固和增强企业在全球中的地位。在这种前景 下…

【c语言】预处理、宏定义相关知识

预处理和宏定义是C/C编程中重要的基础概念。在C/C编程中,预处理和宏定义是两个不可或缺的概念,它们在源代码编译之前起到关键的作用。 预处理阶段的编程流程: 1.编辑 2.编译 gcc main.c //a.out 3.运行 4.调试 其中编译过程: …

基于springboot3实现单点登录(二):认证服务端搭建

前言 上文我们介绍了oauth2.0的相关理论和流程,本文我们继续实现。 Oauth2协议中有个很重要的概念,叫做”端点“, 以下整理了一些常用的端点及其参考访问路径及使用场景的信息,供参考。 这些端点在oauth2.0协议的整个生命周期…

爬虫分布式框架PySpider

介绍 PySpider是一个基于Python的分布式爬虫框架,它以其强大的功能和灵活性在数据爬取领域得到广泛应用。以下是对PySpider的详细介绍: 一、PySpider的特点 分布式部署:PySpider支持分布式部署和任务调度,可以通过配置多个爬虫…

LLM - 使用 Ollama + OpenWebUI 在 Linux 服务器中高效部署大语言模型

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/140992533 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Ollama 是一个开源的大型语言模型(LLM)服务工具,目的是简化本地运行…

初学java第一天:写一下熟悉的猜数字小游戏

初学java,不知道bug多不多,为了整理凌乱的思绪,写一个实践一下,跟C好像啊 简单来说,初学java确实有一点难度,但是大部分知识和思想和C语言和python相似,所以写起来还行,注意是对一些…

大数据应用型产品设计方法及行业案例介绍(可编辑110页PPT)

引言:随着信息技术的飞速发展,大数据已成为推动各行各业创新与变革的重要力量。大数据应用型产品,作为连接海量数据与实际应用需求的桥梁,其设计方法不仅要求深入理解数据特性,还需精准把握用户需求,以实现…

haproxy实例

什么是haproxy Haproxy是一款提供高可用性,负载均衡以及基于tcp和http的的应用交付控制器的开源软件。它由法国人威利塔罗使用c语言开发的。它广泛用于管理和路由网络流量,并确保应用程序的高可用性和高性能。 haproxy的功能 提供第4层(TCP层…