当前位置: 首页 > news >正文

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

相关文章:

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年中国科学院医学情报所,后来逐步发展到工、农等其 他各个领域。医学科技查新包括立项查新和成果查新两个部分,其中医学立项查新,它是指在医学科研项目申报开题之前&#xff0c…...

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监听数据变化&#xff1a; 在子组件中使用watch来监听父组件传递的数据&#xff0c;一旦数据发生变化&#xff0c;子组件就会重新渲染。 子组件代码示例&#xff1a; <template><div>{{ message }}</div> </template><script> export d…...

先进制造aps专题五 aps软件的排程算法和优化算法介绍

aps软件的核心&#xff0c;主要是数据管理&#xff0c;排程/优化算法&#xff0c;各类甘特图 所有aps软件排程算法都是Heuristics启发式算法&#xff08;如Greedy算法&#xff09;&#xff0c;只是有的aps软件还支持ga遗传算法优化&#xff08;比如sap apo,oracle aps,isuperap…...

【跳坑日记】暴力解决Ubuntu SSH报错: Failed to start OpenBSD Secure Shell server

报错环境说明&#xff1a; 服务器环境&#xff1a;Ubuntu 20.04 错误内容 最近服务器突然报错&#xff0c;提示如下图信息&#xff1a; 搜素了各种问答&#xff0c;国内的回答大多数是用 ssh-keygen -A命令来解决&#xff0c;但最终也无法登录服务器。 最终搜索到ask ubun…...

从需求角度介绍PasteSpider(K8S平替部署工具适合于任何开发语言)

你是否被K8S的强大而吸引&#xff0c;我相信一部分人是被那复杂的配置和各种专业知识而劝退&#xff0c;应该还有一部分人是因为K8S太吃资源而放手&#xff01; 这里介绍一款平替工具PasteSpider&#xff0c;PasteSpider是一款使用c#编写的linux容器部署工具(使用PasteSpider和…...

线性三角化

点的线性三角化 输入一堆的点 [ R w c , t w c , p u c ] [R_{wc},t_{wc},p_{uc}] [Rwc​,twc​,puc​]转化成空间的一系列射线 [ P w i , t w i ] , P w i t w c , t w i R w c p u c [P_{wi},t_{wi}],P_{wi}t_{wc},t_{wi}R_{wc}\times p_{uc} [Pwi​,twi​],Pwi​twc​…...

Golang os.Rename invalid cross-device link的原因

文章目录 背景运行环境 文件系统对比linux下的文件系统mac下的文件系统linux下的mv指令 golang的os.Rename源码os.Renamesyscall.Renamesyscall.RenameatSYS_RENAMEAT是什么 查看系统调用函数文档什么是man pageman page的用法user commandssystem calls renameat不支持跨挂载点…...

Flutter 中的 Badge 小部件:全面指南

Flutter 中的 Badge 小部件&#xff1a;全面指南 在移动应用设计中&#xff0c;徽章&#xff08;Badge&#xff09;是一种常见的UI元素&#xff0c;用于吸引用户注意并展示重要信息&#xff0c;如未读消息数量、新通知等。Flutter 通过各种第三方包提供了徽章小部件&#xff0…...

Java 多线程抢红包

问题需求 一个人在群里发了1个100元的红包&#xff0c;被分成了8个&#xff0c;群里有10个人一起来抢红包&#xff0c;有抢到的金额随机分配。 红包功能需要满足哪些具体规则呢? 1、被分的人数抢到的金额之和要等于红包金额&#xff0c;不能多也不能少。 2、每个人至少抢到1元…...

【PB案例学习笔记】-08 控件拖动实现

写在前面 这是PB案例学习笔记系列文章的第8篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gitee…...

读书笔记整理

1.对天才而言&#xff0c;任何努力都如做游戏般容易和有趣&#xff0c;兴趣是发展的原动力。从这个角度来看&#xff0c;通过普通人的劳动是无法创造天才的。 2.让孩子理解语法是很困难的。苦背不如练才是行之有效的办法。孩子们永远是故事迷&#xff0c;在教孩子们外语时&…...

uniapp蓝牙打印图片

前言 这是个蓝牙打印图片的功能&#xff0c;业务是打印界面固定的demo范围&#xff0c;这里通过html2canvas插件生成的图片base64&#xff0c;然后图片base64绘制到canvas中去后&#xff0c;获取canvas中的像素信息&#xff0c;然后对像素信息进行一个灰度值处理&#xff0c;灰…...