SQL注入:pikachu靶场中的SQL注入通关
目录
1、数字型注入(post)
2、字符型注入(get)
3、搜索型注入
4、XX型注入
5、"insert/update"注入
Insert:
update:
6、"delete"注入
7、"http header"注入
8、盲注(base on boolian)
9、盲注(base ontime)
10、宽字节注入
最近在学习SQL注入,这里使用pikachu靶场中的SQL注入来复习+练习一下SQL注入的方法
进入SQL模块中可以看到有好几种注入的类型,我们先点击到概述:

可以看到是这样介绍SQL注入的:
哦,SQL注入漏洞,可怕的漏洞。
在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞。
一个严重的SQL注入漏洞,可能会直接导致一家公司破产!
SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!
1、数字型注入(post)
点击来到第一个模块这里,可以看到是一个下列选项,选择不同的id会返回不同的用户的信息:
但是url中没有显示,是POST型的传参,因此这里我就使用Burpsuite抓包查看,可以看到传入的id=1返回页面如下

下面尝试使用 and 1=1 和 and 1=2测试:

可以看到两个页面显示的不同,说明存在注入点,那么下面就可以尝试使用联合查询,查询数据库中的列数和数据库名称:


通过多次尝试就会发现数据库是两列的,那么下面查询数据库名称和用户名称:

可以看到成功的查询出了数据名称和用户名称,后面就可以通过information_schema数据库查询出数据库中的表名,列明,数据
2、字符型注入(get)
来到第二关,可以看到是一个输入框,判断应该是字符型注入
尝试输入输入查询一下看看结果,结果如下:

尝试闭合:

可以看到闭合后报错了说明是存在注入点的
下面就是判断列数了:




通过反复尝试也可以判断出列数是2列的
下面就可以尝试对数据库名称和用户名进行注入了:

可以看到成功的查询出了数据名称和用户名称,后面就可以通过information_schema数据库查询出数据库中的表名,列明,数据
3、搜索型注入
来到搜索注入页面可以看到也是有一个输入框让我们搜索,然后查看提示发现%%,这说明在闭合时需要用到%

尝试搜索:

尝试闭合:



可以看到报错了,并且从报错信息中可以看到,闭合字符时%,那么下面还是先尝试判断数据库中的列数:
通过多次尝试就会发现数据库的列数是3列
那么下面就可以尝试注入出数据库名称和用户名称了:

可以看到成功的查询出了数据名称和用户名称,后面就可以通过information_schema数据库查询出数据库中的表名,列明,数据
4、XX型注入
下面来到了XX型注入这一关,可以看到也是一个输入框

尝试查询:

尝试闭合:
输入'可以看到报错了,这里报错的信息中可以看到闭合是')
尝试查询列数:



通过不断地尝试就可以发现数据库的列数为2列
查询数据库名称和用户名称:
可以看到成功的查询出了数据库的名称和用户名称
5、"insert/update"注入
来到这一关,可以看到如下页面,是一个登录框

首先来复习一年mysql中的insert和update的语法:
- INSERT语法:
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
其中,table_name是要插入记录的表名,column1、column2等是表中的列名,value1、value2等是要插入的值。
- UPDATE语法:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
其中,table_name是要更新记录的表名,column1、column2等是要更新的列名和对应的值,condition是更新记录的条件。
Insert:
既然是insert注入,插入数据,那么一般就在网数据库新增数据时会使用到,因此我们点击注入页面
对该页面进行抓包尝试寻找漏洞点:

通过测试发现在username/password/sex/phonenum/email/add/中任意一个变量后面加'都会导致数据库报错
那么下面就可以尝试对数据进行查询了,但是从上面的操作可以看出来,注册页面是没有sql结果回显的,而且毕竟也不是select语句,也不能采取联合查询注入了。
不过从上一步的操作可以看出来,注册的时候如果sql语句有问题是会报错的,因此报错注入行得通。
这里可以在再回忆一下报错注入:SQL注入:报错注入-CSDN博客
下面就可以利用报错注入,注入出数据库名称和用户:

可以看到成功的注入出了数据库名称和用户名
update:
既然是update,一般在修改信息处,因此这里需要先登录到系统中才能修改信息,我们先登录到系统中:
这里登录那就使用上面刚刚注册页面先注册一个admin用户呗,登录完成后的页面如下:

点击修改个人信息也就是在数据库中使用update修改了,我们对修改信息页面抓包:
可以看到修改信息页面如上,我们尝试对可控字段进行闭合:

通过测试可以发现,定义sex,phponenum、add、email四个字段后面添加'都会导致数据库报错,都存在SQL注入的风险,因此我们尝试注入,这里因为还是数据还是没有回显,因此使用报错注入:


可以看到,成功的注入出了数据库名称和用户名
6、"delete"注入
来到这一关可以看到如下页面,是一个留言板
还是首先来看看Mysql中delete的语法:
DELETE FROM table_name WHERE condition;
其中,table_name是要删除记录的表名,condition是删除记录的条件。
知道了delete的语法后,我们来看看这一关有什么可疑的地方:
在点击删除时抓包查看:

可以看到这里有id,尝试闭合:

可以看到报错了,说明可能存在注入,但是尝试查询发现无回显,这里尝试使用报错注入注入出数据库名称和用户名称:

通过多次尝试就可以看到成功的注入出了数据库名称和用户名称
7、"http header"注入
来到这一关,可以看到如下页面时一个登录框:
这里再介绍一下http header:HTTP头是HTTP请求或响应的一部分,包含有关请求或响应的元数据,例如发送的内容类型、内容长度、使用的编码以及其他相关信息。HTTP头由Web服务器和浏览器使用,用于在通过互联网发送和接收数据的过程中进行通信和交换信息。
知道了http header是啥了后,现在来找找这一关有什么可疑的地方:
(点击提示,可以看到登录账号密码为admin 123456)
登录后的页面:

可以看到页面显示出了ip user agent http accept 和端口号,既然可以显示在页面那么我们就可以尝试对其进行注入看是否可以从将数据回显到这些字段中
user agent:

accept:

可以看到对这两个字段进行闭合都成功报错了,都可以注入,尝试注入数据库:


可以看到两个字段都成功的注入出了数据库
8、盲注(base on boolian)
来到这一关,可以看到是一个查询框

这一关怎么闭合,数据库都无法报错,因此之前的联合查询,报错注入都无法使用了,这里需要使用SQL盲注


可以看到输入用户名存在是返回用户的信息,不存在时返回“您输入的username不存在,请重新输入”,可以利用这一点来进行布尔盲注
可以判断数据库长度延时一下:


通过不同的显示可以知道数据库的长度是7
后面就可以通过盲注来注入出数据库名称和其他数据
9、盲注(base ontime)
来到这一关可以看到,还是一个查询框

这里尝试输入用户名查询,发现无论输入任何的用户都只会输出:

因此这里布尔盲注也无法使用了,只能使用时间盲注了,就是通过不同的判断条件来判断页面是否延时显示来判断是否存在注入点:
admin' and if(1=1,sleep(2),1)#

后面就可以通过盲注来注入出数据库名称和其他数据
10、宽字节注入
来到SQL注入的最后一关,是宽字节注入,这个是“中文”限定的SQL注入方法
可以看到页面如下,依旧是一个查询框

不知道宽字节注入是什么的小伙伴可以参考:SQL注入:宽字节注入_sql宽字节注入-CSDN博客
简单来说:
一个gbk编码汉字,占用2个字节。
一个utf-8编码的汉字,占用3个字节。
addslashes函数的作用就是让'变成\',让引号变得不再是原本的“单引号”,没有了之前的语义,而是变成了一个字符。那么我们现在要做的就是想办法将'前面的\给它去除掉,那就是在前面加上一个字符让其与吼吼的转义字符组合成一个汉字就逃过了addslashes函数的过滤
那么在pikachu靶场中看一看:
尝试进行闭合发现灭有报错,这时因为我们输入的'被过滤了

那么现在尝试“吃掉”\:

可与看到,利用宽字节成功的注入出了数据库名称和用户名
到此,pikachu靶场中的SQL注入相关知识就学习完毕了!

参考链接:pikachu SQL注入 (皮卡丘漏洞平台通关系列)_pikachusql注入闯关hackbar-CSDN博客
相关文章:
SQL注入:pikachu靶场中的SQL注入通关
目录 1、数字型注入(post) 2、字符型注入(get) 3、搜索型注入 4、XX型注入 5、"insert/update"注入 Insert: update: 6、"delete"注入 7、"http header"注入 8、盲…...
springsecurity入门登录授权
①我们需要自定义登陆接口,也就是在controller目录新建LoginController类,在controller方法里面去调用service接口,在service接口实现AuthenticationManager去进行用户的认证,注意,我们定义的controller方法要让Spring…...
医学科技查新中对查新点的撰写方法!附案例讲解!
我国的科技查新工作最早是从医学领域开始的,始于1985年中国科学院医学情报所,后来逐步发展到工、农等其 他各个领域。医学科技查新包括立项查新和成果查新两个部分,其中医学立项查新,它是指在医学科研项目申报开题之前,…...
2024最新流媒体在线音乐系统网站源码| 音乐社区 | 多语言 | 开心版
2024最新流媒体在线音乐系统网站源码| 音乐社区 | 多语言 | 开心版 https://download.csdn.net/download/huayula/89347742...
回溯算法05(leetcode491/46/47)
参考资料: https://programmercarl.com/0491.%E9%80%92%E5%A2%9E%E5%AD%90%E5%BA%8F%E5%88%97.html 491. 非递减子序列 题目描述: 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素…...
Transformer,革命性的深度学习架构
Transformer 是一种革命性的深度学习架构,专门设计用于处理序列数据,特别是在自然语言处理(NLP)任务中表现卓越。它由 Vaswani 等人在 2017 年发表的论文《Attention is All You Need》中首次提出,打破了当时基于循环神经网络(RNN)和卷积神经网络(CNN)的序列建模常规,…...
实验五:实现循环双链表各种基本运算的算法
实验五:实现循环双链表各种基本运算的算法 一、实验目的与要求 目的:领会循环双链表存储结构和掌握循环双链表中各种基本运算算法设计。 内容:编写一个程序cdinklist.cpp,实现循环双链表的各种基本运算和整体建表算法(假设循环双链表的元素类型ElemType为char),并…...
ElasticSearch IK分词器的安装、词典扩展与停用
🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:云原生与服务部署-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 目录 编辑 1. 前言 2. IK分词器安装 3. IK分词器词典扩展与停用 4. 总…...
代码随想录训练营总结
为期两个月的代码随想录训练营今天结束了,我想我的收获是非常大的。进到训练营的大群里,令我有种安心的感觉,原来世界各地有这么多与我一起努力的伙伴。更令人安心的是知识星球对于学习进度的规划,细化到每一天每道题,…...
深度学习-转置卷积
转置卷积 转置卷积(Transposed Convolution),也被称为反卷积(Deconvolution),是深度学习中的一种操作,特别是在卷积神经网络(CNN)中。它可以将一个低维度的特征图&#x…...
Unity性能优化工具介绍
文章目录 一.Stats组件1.Audio音频的数据组件:2.图形数据 二.Profiler 性能分析器 一.Stats组件 Unity自带Statistics(统计数据),Game视窗中点击Stats打开 1.Audio音频的数据组件: 1):Level 声音强度 单位是分贝(dB) 表示音频听声音的大小,是闪烁波动的. 2):SDPload 数据信…...
Math之向上向下取整
有时我们会遇到向上和向下取整的操作,这时我们可以使用Math类来进行操作。 1、向上取整 Math.ceil() 方法返回大于或等于指定表达式的最小整数(即向上取整)。如果参数是一个整数,那么结果就是这个整数本身。 示例: …...
MPP架构
MPP架构,即Massively Parallel Processing(大规模并行处理)架构,是一种用于处理大规模数据的并行计算架构。它通过将数据和计算能力分布在多个处理节点上,利用并行处理技术来加速数据处理和分析的速度。 在MPP架构中&…...
These relative modules were not found:* ../../../constant in
这个错误信息表明,你的项目在尝试加载一个相对路径模块 ../../../constant 时遇到了问题。具体来说,它在 ./node_modules/cache-loader/dist/cj 这个路径下找不到这个模块。 这里有几个可能的原因和相应的解决方案: 路径错误:首…...
2024最新彩虹聚合DNS管理系统源码v1.3 全开源
2024最新彩虹聚合DNS管理系统源码v1.3 全开源 聚合DNS管理系统可以实现在一个网站内管理多个平台的域名解析,目前已支持的域名平台有:阿里云、腾讯云、华为云、西部数码、DNSLA、CloudFlare。 本系统支持多用户,每个用户可分配不同的域名解…...
在Go语言中如何实现变参函数和函数选项模式
在Go语言编程中,我们经常会遇到需要给函数传递可选参数的情况。传统的做法是定义一个结构体,将所有可选参数作为结构体字段,然后在调用函数时创建该结构体的实例并传递。这种方式虽然可行,但是当可选参数较多时,创建结构体实例的代码就会变得冗长และ不太直观。 Go语言的一个…...
Spring Boot中的 6 种API请求参数读取方式
使用Spring Boot开发API的时候,读取请求参数是服务端编码中最基本的一项操作,Spring Boot中也提供了多种机制来满足不同的API设计要求。 接下来,就通过本文,为大家总结6种常用的请求参数读取方式。如果你发现自己知道的不到6种&a…...
Linux基础命令[27]-gpasswd
文章目录 1. gpasswd 命令说明2. gpasswd 命令语法3. gpasswd 命令示例3.1 不加参数3.2 -a(将用户加入组)3.3 -d(从组中删除用户)3.4 -r(删除组密码)3.5 -M(多个用户一起加入组)3.6 …...
机会约束转化为确定性约束-- 样本均值法
当涉及到新能源消纳的机会约束规划时,我们需要深入理解其背后的原理和采用的方法。以下是对上文内容的更详细且更贴切的展开解释: 机会约束转化为确定性约束-- 样本均值法代码获取戳此处代码获取戳此处代码获取戳此处 新能源消纳的机会约束 新能源&…...
uniapp中,当页面显示时触发子组件的重新渲染
使用watch监听数据变化: 在子组件中使用watch来监听父组件传递的数据,一旦数据发生变化,子组件就会重新渲染。 子组件代码示例: <template><div>{{ message }}</div> </template><script> export d…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...
React核心概念:State是什么?如何用useState管理组件自己的数据?
系列回顾: 在上一篇《React入门第一步》中,我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目,并修改了App.jsx组件,让页面显示出我们想要的文字。但是,那个页面是“死”的,它只是静态…...
C#中用于控制自定义特性(Attribute)
我们来详细解释一下 [AttributeUsage(AttributeTargets.Class, AllowMultiple false, Inherited false)] 这个 C# 属性。 在 C# 中,Attribute(特性)是一种用于向程序元素(如类、方法、属性等)添加元数据的机制。Attr…...
codeforces C. Cool Partition
目录 题目简述: 思路: 总代码: https://codeforces.com/contest/2117/problem/C 题目简述: 给定一个整数数组,现要求你对数组进行分割,但需满足条件:前一个子数组中的值必须在后一个子数组中…...
