SQL注入:pikachu靶场中的SQL注入通关

news2024/11/25 7:18:12

目录

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的语法:

  1. INSERT语法:
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);

其中,table_name是要插入记录的表名,column1、column2等是表中的列名,value1、value2等是要插入的值。

  1. 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博客

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

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

相关文章

在kaggle中的notebook 如何自定义 cuda 版本以及如何使用自定义的conda或python版本运行项目(一)

问题 第一部分 当前kaggle中带有gpu的notebook 默认的cuda 是12.1版本,如果我要跑一个项目是11.3的,如何将默认的cuda 改为自己需要的cuda 11.3 方法 step1 从官网下载需要的版本cuda run 文件(如cuda 11.3) 在nvidia cuda 下…

小程序丨数据功能如何使用

查询发布完成后,如发现信息有误或想要修改信息,老师可以使用数据功能在线修改已发布的查询内容。 数据功能包含导出、添加、编辑、更多操作,下面来教大家如何使用吧。 📌使用教程 数据功能主要用于在线修改已发布的查询内容&#…

深入探索Kafka:了解其不可或缺的核心组件

🐇明明跟你说过:个人主页 🏅个人专栏:《数据流专家:Kafka探索》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Kafka简介 2、Kafka的应用场景 3、Kafka与其他消…

Unity性能优化工具介绍

文章目录 一.Stats组件1.Audio音频的数据组件:2.图形数据 二.Profiler 性能分析器 一.Stats组件 Unity自带Statistics(统计数据),Game视窗中点击Stats打开 1.Audio音频的数据组件: 1):Level 声音强度 单位是分贝(dB) 表示音频听声音的大小,是闪烁波动的. 2):SDPload 数据信…

CSS基础(第五天)

目录 定位 为什么需要定位 定位组成 边偏移 静态定位 static(了解) 相对定位 relative 绝对定位 absolute(重要) 子绝父相的由来 固定定位 fixed (重要) 粘性定位 sticky(了解&#xff…

C++候捷stl-视频笔记1

认识headers、版本、重要资源 STL的核心思想是泛型编程 新式头文件内的组件封装在命名空间std中: using namespace std; using std::cout;或std::vector vec; 旧式头文件内的组件不封装在命名空间std中 注:不建直接使用using namespace xxx,如果使用的…

文章解读与仿真程序复现思路——电力系统保护与控制EI\CSCD\北大核心《基于改进Q学习算法和组合模型的超短期电力负荷预测》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Llama 3 CPU推理优化指南

备受期待的 Meta 第三代 Llama 现已发布,我想确保你知道如何以最佳方式部署这种最先进的 (SoTA) LLM。在本教程中,我们将重点介绍如何执行仅权重量化 (WOQ) 来压缩 8B 参数模型并改善推理延迟,但首先,让我们讨论一下 Meta Llama 3…

贴片反射式红外光电传感器ITR8307

红外光电传感器ITR8307 ITR8307外形 特性 快速响应时间 高灵敏度 非可见波长 薄 紧凑型 无铅 该产品本身将保持在符合RoHS的版本内 描述 ITR8307/S18/TR8是一种光反射开关,它包括一个GaAs IR-LED发射器和一个NPN光电晶体管,该晶体管具有短距离的高…

基于 Milvus Cloud + LlamaIndex 实现初级 RAG

初级 RAG 初级 RAG 的定义 初级 RAG 研究范式代表了最早的方法论,在 ChatGPT 广泛采用后不久就取得了重要地位。初级 RAG 遵循传统的流程,包括索引创建(Indexing)、检索(Retrieval)和生成(Generation),常常被描绘成一个“检索—读取”框架,其工作流包括三个关键步…

C++实现图的存储和遍历

前言 许多新手友友在初学算法和数据结构时,会被图论支配过。我这里整理了一下图论常见的存储和遍历方式,仅供参考。如有问题,欢迎大佬们批评指正。 存储我将提到四种方式:邻接矩阵、vector实现邻接表、数组模拟单链表实现的前向星…

FFmpeg开发笔记(三十)解析H.264码流中的SPS帧和PPS帧

《FFmpeg开发实战:从零基础到短视频上线》一书的“2.1.1 音视频编码的发展历程”介绍了H.26x系列的视频编码标准,其中H.264至今仍在广泛使用,无论视频文件还是网络直播,H.264标准都占据着可观的市场份额。 之所以H.264取得了巨大…

完美解决原生小程序点击地图markers上的点获取不到对应的坐标信息

需求:地图上有多个markes点,点击每一个获取对应的数据,再根据当前的坐标信息去调用导航。 出现的问题:每次点击的时候获取不到对应的坐标信息,获取到的信息显然不是想要的 原因: 因为你的id不是number类型&…

线上虚拟纪念馆的便利与优势,全天候开放的数字化历史体验

一、搭建线上虚拟纪念馆的意义 在现代社会中,线上虚拟纪念馆越来越受到人们的关注和欢迎。传统纪念馆需要大量的物理空间和资源,而线上虚拟纪念馆则突破了这些限制,提供了更多的可能性和优势。首先,线上虚拟纪念馆能够更好地保存和…

【有手就行】使用你自己的声音做语音合成,CPU都能跑,亲测有效

此文介绍在百度飞桨上一个公开的案例,亲测有效。 厌倦了前篇一律的TTS音色了吗?打开短视频听来听去就是那几个声音,快来试试使用你自己的声音来做语音合成吧!本教程非常简单,只需要你能够上传自己的音频数据就可以(建议…

Mac虚拟机工具 CrossOver 24.0.0 Beta3 Mac中文版

CrossOver是一款在Mac上运行Windows应用程序的软件,无需安装虚拟机或重启计算机,简化了操作过程,提高了工作效率,为用户带来便捷体验。前往Mac青桔下载,享受前所未有的便利和高效。摘要由作者通过智能技术生成 CrossOv…

JVM严镇涛版笔记【B站面试题】

前言 2023-06-19 18:49:33 出自B站 灰灰的Java面试 枫叶云链接:http://cloud.fynote.com/s/4976 JVM面试题大全 Lecturer :严镇涛 1.为什么需要JVM,不要JVM可以吗? 1.JVM可以帮助我们屏蔽底层的操作系统 一次编译&#xff0c…

当代人工智能三教父——深度学习三巨头

文章目录 引言 人物介绍 突出贡献 专业名词解释 引言 今天下午闲来无事翻阅了一下csdn首页的头条文章——《27 岁天才创始人 Joel Hellermark 分享了自己和“AI 教父” Geoffery Hinton 的最新采访》 感觉挺有意思,就从头到尾的看了一遍,里面有很多…

6.1 if语句

计算机语言和人类语言类似,人类语言是为了解决人与人之间交流的问题,而计算机语言是为了解决程序员与计算机之间交流的问题。程序员编写的程序就是计算机的控制指令,控制计算机的运行。借助于编译工具,可以将各种不同的编程语言的…

免费分享一套微信小程序旅游推荐(智慧旅游)系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的微信小程序旅游推荐(智慧旅游)系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序旅游推荐(智慧旅游)系统(SpringBoot后端Vue管理端) Java毕业设计…