sql注入实战——thinkPHP

news2025/1/10 2:33:29

sql注入实战——thinkPHP

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

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注入语句

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.coloradmin.cn/o/2042504.html

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

相关文章

Containerd详解

一.Containerd概述 1.什么是Containerd Containerd (container Daemon)是一个开源的容器运行时,它提供了一种标准化的方式来管理容器的生命周期。该项目最初是由Docker开发团队创建的,并在后来成为一个独立的项目,被纳入了Cloud Native Comp…

播放视频时黑屏无报错或报错“播放失败,请检查设备及客户端网络”

播放视频时黑屏无报错或报错“播放失败,请检查设备及客户端网络”或该如何解决? 请先使用排障工具排查,获得具体错误码,排障工具操作文档详见: 播放失败自助排障及常见错误码解决方案 - 播放问题 - 萤石社区 - Powered…

Linux下查看各进程的swap

cat /etc/re*se Red Hat Enterprise Linux Server release 6.8 (Santiago) 简单的可以通过top命令查看 top 后 按 f 进入选择列界面 按 p 就会输出swap信息(变为P) 回车返回看到SWAP信息了 再按 F 再按p 按swap排序 再回车后就是各进程按swap排序…

工厂数据采集设备的革新与应用-天拓四方

随着工业4.0和智能制造的快速发展,工厂数据采集设备已成为现代制造业不可或缺的重要组成部分。这些设备不仅提高了生产效率,还通过精准的数据分析为企业的决策提供了有力支持。本文将深入探讨工厂数据采集设备的革新、应用及其在实际操作中的重要性。 一…

论文利器 | 6款论文自动生成免费含摘要文献综述

在学术写作中,选择合适的工具和软件可以大大提高写作效率和质量。本文将重点介绍一款备受推荐的AI原创论文写作平台——千笔-AIPassPaPer,并详细分析其功能和优势。 千笔-AIPassPaPer简介 千笔-AIPassPaPer是一款功能全面且高效的AI原创论文写作平台&a…

注意力机制篇 | YOLOv8改进之引入NAMAttention注意力机制 | 基于标准化的注意力模块

前言:Hello大家好,我是小哥谈。本文提出一种基于归一化的注意力模块(NAM),可以降低不太显著的特征的权重,这种方式在注意力模块上应用了稀疏的权重惩罚,这使得这些权重在计算上更加高效,同时能够保持同样的性能。我们在ResNet和MobileNet上和其他的注意力方式进行了对比…

基于springboot的乐享田园系统

TOC springboot181基于springboot的乐享田园系统 第1章 绪论** 1.1 课题背景 二十一世纪互联网的出现,改变了几千年以来人们的生活,不仅仅是生活物资的丰富,还有精神层次的丰富。在互联网诞生之前,地域位置往往是人们思想上不…

线程的退出、资源回收,互斥锁

创建多个线程,用循环的方式: 一、线程结束方式 1、pthread_exit(void *) 2、pthread_return 3、pthread_cancle:异常退出,无法获得退出状态,只能回收资源。 程序实例: 二、线程资…

异构数据同步 datax (1)

阿里实现异构数据库之间的表数据集同步 Reader & Framework & Writer job 当然好用的框架,自然有很多优点 1)可靠的数据质量监控 2) 丰富的数据转换功能 DataX作为一个服务于大数据的ETL工具,除了提供数据快照搬迁功能之外&#…

Gather在全球隐私保护领域的先锋地位

随着全球数字化进程的加速,隐私保护已成为各国政府、企业以及个人用户的共同关注点。近年来,频发的数据泄露事件和隐私侵害问题,让用户对安全通信和隐私保护的需求愈发强烈。据 IBM Security 统计,2024 年全球数据泄露的平均成本为…

C语言程序设计-[21] 字符串处理函数

C语言程序库中提供了一些专门处理字符串的函数: gets(字符数组); 输入一行字符序列到字符数组puts(字符串); 将字符串输出到终端strcat(字符数组1,字符串2); 字符串连接strcpy(字符数组1,字符串2); 复制字符串strcmp(字符串1, 字符串2); 两个字符串比较s…

【Kubernetes】k8s集群对外服务之Ingress

目录 一.Ingress 概述 1.什么是ingress 2.外部应用访问集群内部服务的方案 3.ingress 组成 4.ingress-Nginx 工作原理 二.部署 nginx-ingress-controller 方式一 方式二 三.总结 一.Ingress 概述 1.什么是ingress service的作用体现在两个方面,①对集群内…

AI初级教程-AI到底有什么样的具体价值

一、开头放重点 一个在国内好用且免费的AI工具,可以让自己的学习或者工作方面,事半功倍! 🔥世界主流大模型集聚地 免魔法 白玩GPT4 AI智能工作流 Codemoss_能用AI 传送门:https://www.nyai.chat/chat?inviteny…

第三方软件测试机构如何通过测试保障软件产品质量?

在当今数字化快速发展的时代,软件的质量直接影响至关重要的业务性能和用户体验。卓码软件测评作为一家专业的第三方软件测试机构,深知高质量软件对企业成功的重要性,那么是如何保障软件产品质量呢?主要有以下方式: 一…

具有重新参数化异构卷积的多分支辅助融合YOLO,用于精确的目标检测(MAF-YOLO)

中英文对照阅读https://yiyibooks.cn/arxiv/2407.04381v1/index.html 摘要 由于多尺度特征融合的有效性能,路径聚合 FPN (PAFPN) 被广泛应用于 YOLO 检测器中。 然而,它不能有效地、自适应地同时集成高层语义信息和低层空间信息。 我们在本文中提出了一…

Spring boot logback日志框架加载初始化源码

##LoggingApplicationListener监听 Overridepublic void onApplicationEvent(ApplicationEvent event) {if (event instanceof ApplicationStartingEvent) {onApplicationStartingEvent((ApplicationStartingEvent) event);}else if (event instanceof ApplicationEnvironment…

java中List列表转成子父集列表

一、前言 在Java中,如果你有一个表示父子关系的列表,并且想要把这个列表转成一个子父集list列表树目录,一般来说想要把list列表转成一个子父集列表,这个对象需要在属性中必须要有几个字段,id(节点id&#x…

机械行业数字化生产供应链产品解决方案(十二)

我们为机械行业提供的数字化生产供应链解决方案通过集成物联网、人工智能和大数据技术,打造了一套智能化的生产和供应链管理系统,实现了从设计、生产到物流的全程数字化、智能化。该系统通过实时数据采集与分析,优化生产计划和资源配置&#…

mybatis批量修改问题

update 表名称 set version version 1, update_time NOW(), basket_price case when id1130254 then 0.00 end, basket_spec_name case when id1130254 then “名称1” when id1130255 then “名称” end where id IN ( 1130254 , 1130255); 为什么 id为 1130255 的 baske…

Halcon 算子汇总

gen_tuple_const(1000,1.5) 生成一个长度为1000,里面每一个数组元素都为1.5的数组 gen_tuple_const(100,chr(ord(a) 1)) 生成一个长度为100,里面每一个数组元素都为b的数组 ord函数是库函数,用于获取字符的ASCII值 chr(ord(a) 1) 结…