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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java集合类详解

目录 1、数组导入: 2、单列集合 List接口 1、ArrayList:数组列表 ArrayList类中的方法 2、LinkedList:链表列表 3、Vector:数组列表 4、list集合的遍历 1、for循环遍历 2、增强for循环 3、迭代器遍历 Set接口 1、Has…

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

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

【线性回归】梯度下降

文章目录 [toc]数据数据集实际值估计值 梯度下降算法估计误差代价函数学习率参数更新 Python实现导包数据预处理迭代过程结果可视化完整代码 结果可视化线性拟合结果代价变化 数据 数据集 ( x ( i ) , y ( i ) ) , i 1 , 2 , ⋯ , m \left(x^{(i)} , y^{(i)}\right) , i 1 ,…

使用 Django Rest Framework 构建强大的 Web API

文章目录 安装 Django Rest Framework创建序列化器创建视图和 URL 路由配置认证和权限测试 API Django Rest Framework(DRF)是一个强大的工具,用于在 Django Web 框架中构建灵活且功能丰富的 Web API。它提供了许多功能,包括序列化…

微服务项目收获和总结---第2,3天(分库分表思想,文章业务)

①分库分表思想 文章表一对一为什么要拆分?因为文章的内容会非常大,查询效率会很低,我们经常操作文章的基本信息,不会很经常查询文章内容。充分发挥高频数据的操作效率。 ②freemarker和minIO 由于文章内容数据量过大&#xff0c…

FreeRTOS_同步互斥与通信_队列集_学习笔记

FreeRTOS_同步互斥与通信_环形buffer、队列_学习笔记 5.5 队列集 要支持多个输入设备时,我们需要实现一个“InputTask”,它读取各个设备的队列,得到数据后再分别转换为游戏的控制键。 InputTask如何及时读取到多个队列的数据?要…

(十)统计学基础练习题四(50道选择题)

本文整理了统计学基础知识相关的练习题,共50道,适用于想巩固统计学基础或备考的同学。来源:如荷学数据科学题库(技术专项-统计学一)。序号之前的题请看往期文章。 151) 152) 153) 1…

React 其他 Hooks

其他 Hooks useRef 可用于获取 DOM 元素 const ScrollRef useRef(null)ScrollRef.current useContext (先回顾一下之前的 Context 知识,借用之前 ppt 和源码) Hooks 中使用 useContext 来获取 context 的值 // 父组件创建 contextexpor…

I/O '24|学习资源焕新,技术灵感升级

2024 年 5 月 15 日凌晨举行的 Google I/O 大会为各地的开发者们带来了新的灵感。面对技术革新,相信各位开发者们都迫不及待想要自己上手试一试。 别急,Google 谷歌今年为中国的开发者们准备了一份特别的学习资源,让开发者们自由探索新知。 G…

WebSocket简介

参考:Java NIO实现WebSocket服务器_nio websocket-CSDN博客 WebSocket API是HTML5中的一大特色,能够使得建立连接的双方在任意时刻相互推送消息,这意味着不同于HTTP,服务器服务器也可以主动向客户端推送消息了。 WebSocket协议是…

【Linux学习】深入理解Linux环境变量与本地变量

文章目录 环境变量的引入环境变量环境变量概念环境变量的特性以及命令行操作本地变量 环境变量的引入 main参数&#xff08;命令行参数&#xff09; 先来看看这样的代码以及运行结果&#xff1a; #include<stdio.h>#include<stdlib.h>#include<unistd.h>int…

【数据库】MySQL

文章目录 概述DDL数据库操作查询使用创建删除 表操作创建约束MySqL数据类型数值类型字符串类型日期类型 查询修改删除 DMLinsertupdatedelete DQL基本查询条件查询分组查询分组查询排序查询分页查询 多表设计一对多一对一多对多设计步骤 多表查询概述内连接外连接 子查询标量子…

【加密与解密(第四版)】第十七章笔记

第十八章 反跟踪技术 18.1 由BeginDebugged引发的蝴蝶效应 IsDebuggerPresent()函数读取当前进程PEB中的BeginDebugged标志 CheckRemoteDebuggerPresent() 反调试总结&#xff1a;https://bbs.kanxue.com/thread-225740.htm https://www.freebuf.com/articles/others-articl…

在生产试验铁地板有许多不足之处,是如何对不足来进行补救的?(北重厂家制造)

北重试验铁地板热处理&#xff1a;这个试验铁地板热处理的过程主要也分为三个步骤&#xff1a;正退火、退火、正火等&#xff0c;热处理主要的作用是为了改变铸件的原始组织&#xff0c;去掉铸件的内应力﹐使得产品的使用性能得到保证&#xff0c;以防铸件产生变形和破坏。 试验…

[数据结构1.0]计数排序

读者老爷好&#xff0c;本鼠鼠最近学了计数排序&#xff0c;浅浅介绍一下&#xff01; 目录 1.统计相同元素出现次数 2.根据统计的结果将序列回填到原来的序列中 3.相对映射计数排序 计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用&#xff0c;是非比较排…

【MySQL】MySQL的安装和基本概念

MySQL的安装和基本概念 一、环境安装1、环境及配置2、下载安装 二、基本概念1、主流数据库2、mysql和mysqld的区别和概念&#xff08;1&#xff09;概念1&#xff1a;了解CS结构&#xff08;2&#xff09;概念2&#xff1a;数据库指的是什么&#xff08;3&#xff09;概念3&…

Vue——开发前的准备和创建一个vue的工程

文章目录 前言安装 Node js1、下载node.js2、安装node.js3、查看是否安装成功 创建 vue 工程Visual Studio Code 配置目录结构 前言 本篇博客主要讲解Vue开发前的环境配置与一些说明。 安装 Node js 环境需要安装配置一个nodejs 的环境。 vue3 最低nodejs 版本要求为 15.0 1…

Golang | Leetcode Golang题解之第107题二叉树的层序遍历II

题目&#xff1a; 题解&#xff1a; func levelOrderBottom(root *TreeNode) [][]int {levelOrder : [][]int{}if root nil {return levelOrder}queue : []*TreeNode{}queue append(queue, root)for len(queue) > 0 {level : []int{}size : len(queue)for i : 0; i < …

Springboot 开发 -- Thymeleaf页面嵌入帆软报表

一、后端代码 Slf4j Controller RequestMapping("/reprot") public class FineReportController {//帆软地址&#xff1a;finereport.urlhttp://localhost:8075/WebReport/ReportServer?reportletValue("${finereport.url}")private String finereportUr…

视频监控管理平台LntonCVS安防管理平台指挥交通应用方案

地铁作为城市交通的关键组成部分&#xff0c;承担着大量乘客流量&#xff0c;因此地铁视频监控系统的建设至关重要。这一系统不仅能够提升地铁运营的安全性&#xff0c;还能有效预防和处理突发事件&#xff0c;保障乘客的出行安全。 首先&#xff0c;地铁视频监控系统实现了对地…