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…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...