广告
返回顶部
首页 > 资讯 > 数据库 >一文了解pikachu的SQL注入
  • 874
分享到

一文了解pikachu的SQL注入

sql数据库mysql 2023-10-04 13:10:25 874人浏览 安东尼
摘要

前言: 本文章主要讲解关于pikachu的注入方式。 目录 前言: 一、数字型注入(post) 二、字符型注入(get) 三、搜索型注入 四、xx型注入 五、"insert/update"注入 六、"delete"注入 七、"http he

前言:

本文章主要讲解关于pikachu的注入方式。

目录

前言:

一、数字型注入(post)

二、字符型注入(get)

三、搜索型注入

四、xx型注入

五、"insert/update"注入

六、"delete"注入

七、"http header"注入

八、盲注(base on boolian)

九、盲注(base on time)

十、宽字节注入


一、数字型注入(post)

        首先进入靶场

这里界面很简单,我们勾选复选框任意数值点查询用Brupsuite尝试抓包 

 因为POST型会把传参放在请求正文里,所以我们一眼就可以看见当前使用的是id进行传参,由于提示该题为数字型,所以我们可以使用and1=1,and1=2进行测试是否注入

 当and1=1时

当and1=2时

 这时候知道已经注入成功了,就可以使用uNIOn联合查询了,是不是非常简单,既然注入成功了,就是老一套的order by爆裂,然后联合查询union select看回显位,version()看版本,database()看数据库,爆数据了,这里就不再演示了。

二、字符型注入(get)

 进入字符型注入还是老规矩,既然是字符那肯定闭合是必不可少的,所以首先我们测闭合,先尝试输入单引号'测试闭合,然后点击查询

 

 这里提示我们语法有错误,通过url可以得知这个是GET型并且通过name传参的,我们可以尝试着在后面输入 -- a完成闭合,看看是否注入成功,由于我们并不知道该数据库里面究竟有什么username,为了方便测试,我们直接在里面输入order by 5来判断是否注入成功

 

 这里显示找不到5列,这里比较幸运一次就尝试成功了,一般碰到字符型,刚接触的话就多多尝试,这里url里面的+号在url里面代表的空格的意思

三、搜索型注入

 这里还是尝试输入单引号'测试一下闭合

 

 这里看着跟上一关好像是一样的,都是GET型通过name进行传参的,我们直接把上一关的传参拿来用一下好了,直接复制在url里面输入

 这里居然轻松注入了,我也是没有想到

四、xx型注入

 这里还是一样的框,既然是xx型,就说明字符型和数字型猜一猜,我们直接老规矩输入单引号'查找闭合

 

 语法错了提示很多很乱,但是多了个)是什么意思呢?不知道?我也不知道,反正多试试就知道了,我们尝试在单引号后面加上括号呢

 

 这次显示的居然少了很多,那我们尝试这用')注入一次试试呢

 注入成功,没什么难度

五、"insert/update"注入

 到了这关就比较有意思了,因为之前在sqli靶机的时候,没有打过这一关,所以我也是一头雾水,也是查询了一下资料,恍然大悟,其实SQL注入就是一定一定要对SQL语句有很深刻的了解,你才能懂原理是什么,通过什么方式注入的,等你知道了之后你会发现真的挺有趣的。这里上来肯定都是对着这个登录界面一顿操作,这边我建议你先试一遍,然后再看答案。不过想必大家都是试过了不懂了才来查阅资料的,那我就废话不多说了,首先右上角有个小小的tips,大家都是知道的。

这里告诉我们注册账号试一试,说明本道题演示的注入地方是在注册里面,我们直接进入注册界面

 

 这里一共有6个框框,题目提示了这是一个insert方式的注入,那我们要弄明白这道题的话,我们首先就得知道SQL语句中,insert的语法,再Mysql中,插入数据最常见的语句就是:

insert into 表名 values(1,1,1,1),这里为了方便数据我用1来代替

这里没看懂的,我建议重新看一看SQL语句,我们都知道再mysql数据中values里面的值有INT,VARCHAR等类型对吧,那么上面的注册信息,很明显我们能看到前3个,用户,密码,性别里面的值怎么说也是要字符的吧,字符是不是就得用到VARCHAR类型呢。

那么我们是不是可以猜测到这道题背后的SQL语句是

insert into 表名 values('1','1','1',1,'1','1')也就是

insert into 表名 values('$_用户','$_密码','$_性别',$_手机,'$_地址','$_住址')

这样的结构呢,因为手机号码的话大概率可能是个INT类型。这里没看懂的,我还是建议重新看看SQL语句,不然还是理解不了。

那么通过这个猜测我们是不是可以理解,每个框里输入的值,都对应的插入对应的占位里了呢。

既然我们明白了当前我们输入的数据在后端是以什么样形式进行存储的,我们就可以尝试着去构造闭合,这里办法其实有很多种,我使用的是'#'号闭合,'#'号在Mysql里面代表这注释的作用,比方说我们在第一个用户框里输'#'号,那是不是就是下面这样的效果,这里我们加的参数我用红色标识出来更方便理解

insert into 表名 values('$_用户#','$_密码','$_性别',$_手机,'$_地址','$_住址')

这里是不是'#'号后面的都被我注释掉了呢

那么想要这个语句没有出现语法错误我们是不是该输入正确的SQL语句呢

insert into 表名 values('$_用户')#','$_密码','$_性别',$_手机,'$_地址','$_住址')

这里看不懂的话还是建议多看看SQL语句,你就懂了

这里我们尝试下思路是否正确,我们将')#输进去测试一下

 

 Column count doesn't match value count at row 1,这里翻译一下表示该错误的意思是传入表的字段数和values值的个数不一样

正常我们输入单引号测试闭合时提示的界面是这样的

 

 提示语法错误,说明我们使用')#的思路是正确的

由于我们知道这道题提示的总是错误的信息,除了错误的信息,其它的都是正常显示,那么这里就要用到报错注入了,通过报错信息注入子查询来获取我们要的数据,然后values的语句结构我们要输入第二个传参时需要用到,号,这里逗号是关键,比如

insert into 表名 values('$_用户',())#','$_密码','$_性别',$_手机,'$_地址','$_住址')

这里是我在用户框里输入的语句:a',(updatexml(0x7e,concat(0x7e,version()),0x7e)))#

这里子查询要用()括起来,知道为什么的小伙伴可以在评论区说哦

到这里我们输入的语句在后端就是

insert into 表名 values('a',(updatexml(0x7e,concat(0x7e,version()),0x7e)))#','$_密码','$_性别',$_手机,'$_地址','$_住址')

由于第二个密码框是必选项,可能这是个js语法不能为空,我也没有继续研究,反正已经被我们给注释掉了并不重要,我们随便输入任意值就行了,就像这样

 点击提交

 得到了版本号,注入成功。这里看不懂的建议好好看看SQL报错注入的原理,这里就不多解释了,这里思路很重要,当然这道题不止我这一种办法,尝试这用or也是可以实现的,还是那句话,多多练习,多多尝试,经验都是试出来的

六、"delete"注入

 这里delete注入,顾名思义,从删除中找注入点

这里也提示删除留言存在注入点,那我们不多说直接上手

 

 这里随便输入点击提交

 提交完成点删除,这里我们要用到我们的老伙伴了Brupsuite抓包

 点击删除我们通过抓包知道GET型id传参,那么要知道什么delete注入,还是那句话,先弄明白delete在Mysql数据库中,是什么样的语句,在Mysql里面delete语句如下

delete from 表名 where 条件=什么

没毛病吧。那么我们是不是可以猜测这道题背后的数据库语句是这样的呢

delete from 表名 where id=68,(因为我抓到的包id是68)

是不是我们可以判断传参id=68时,我们留言列表里的123将会被删除,那么如果此时我们通过or语句将id不等于68,那么是不是在Mysql里面,当第一条语句没有执行成功时,会执行另一条语句呢,这里我们尝试在url里面将id=0 or version()小试一下,看看有没有回显信息

 这里显示没有version这一列,那我们尝试用order by 5试试呢

 这里显示语法错误,那会不会是用报错注入呢?尝试用报错注入试试id=0 or updatexml(0x7e,concat(0x7e,database()),0x7e)

Http://127.0.0.1/pikachu/vul/sqli/sqli_del.PHP?id=%200%20or%20updatexml(0x7e,concat(0x7e,version()),0x7e)

 得到版本号了,这里主要是为了演示注入思路,还是要多尝试,这里没看懂的还是一样回去看看什么是报错注入

七、"http header"注入

 http头注入我们先看一下提示

账号密码都告诉我们了这不登录进去看看?当然这里老朋友先抓个包

 

 进入发现我的浏览器和操作系统,IP端口等都被获取了,这是通过什么方式获取的呢?我们看刚刚老朋友抓的包和里面告诉我们的有哪些相似之处,首先我们一眼望去就得知

可能是通过这两个传参获取的数据

那么我们做这道题的时候首先就要知道什么是User-Agent

User-Agent 即用户代理,简称“UA”,它是一个特殊字符串头。网站服务器通过识别 “UA”来确定用户所使用的操作系统版本、CPU 类型、浏览器版本等信息。而网站服务器则通过判断 UA 来给客户端发送不同的页面。

那么这里我们是不是可以先尝试在User-Agent修改数据传参来验证我们的猜测呢,还是老方法单引号测闭合

 

 

 

 

 通过这个页面我们猜测可能也是insert插入闭合,在User-Agent后面输入

'or updatexml(0x7e,concat(0x7e,version()),0x7e) or '

注:此处需要修改每个post和get包的user agent来保证最后输出的user agent的参数为你输入的参数

 

 

 

 得到版本号,注入成功

八、盲注(base on boolian)

九、盲注(base on time)

十、宽字节注入

来源地址:https://blog.csdn.net/allintao/article/details/129288675

您可能感兴趣的文档:

--结束END--

本文标题: 一文了解pikachu的SQL注入

本文链接: https://www.lsjlt.com/news/423407.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 一文了解pikachu的SQL注入
    前言: 本文章主要讲解关于pikachu的注入方式。 目录 前言: 一、数字型注入(post) 二、字符型注入(get) 三、搜索型注入 四、xx型注入 五、"insert/update"注入 六、"delete"注入 七、"http he...
    99+
    2023-10-04
    sql 数据库 mysql
  • 一篇文章了解SQL注入漏洞
    目录SQL注入漏洞原理SQL注入内容注入条件SQL注释符与注入流程SQL注入分类SQLMap 分类接受请求类型区分注入数据类型的区分SQL注入思路手工注入思路SQL 详细注入过程总结...
    99+
    2022-11-13
  • 一文讲解Node+mysql对SQL注入
    虽然现在不会直接使用 原生NodeJS 的方式开发后台,但了解一下 SQL注入 还是很有必要的。本文使用 NodeJS + MySQL 对 SQL注入 进行讲解。SQL注入攻击 是很古老的攻击方式了,自从 web2.0 诞生后就有 SQL注...
    99+
    2022-11-22
    Node.js 后端
  • 一文搞懂SQL注入攻击
    目录1. 前言2. SQL注入简介(1)SQL语言(2)SQL注入3. SQL注入步骤(1)发现漏洞(2)信息收集(3)攻击Web系统(猜解用户名和密码)(4)获取管理员权限4. 防范SQL注入(1)使用参数化查询或存储...
    99+
    2023-04-19
    SQL注入攻击 SQL注入
  • SQL注入报错注入函数图文详解
    目录前言常用报错函数用法详解updateXML()函数实例extractvalue()函数floor()函数exp()函数12种报错注入函数总结前言 报错注入的前提是当语句发生错误时,错误信息被输出到前端。其漏...
    99+
    2022-07-08
    sql注入解决方法 sql注入 报错注入 sql报错注入原理
  • 【MySQL】一文带你了解SQL
    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! ...
    99+
    2023-09-06
    mysql sql 数据库
  • 一文详解嵌入式SQL
    目录嵌入式SQL概述使用嵌入式SQL的注意事项区分SQL语句与主语言语句数据库工作单元和程序工作单元之间的通信协调两种不同的处理方式嵌入式SQL程序的组成程序首都程序体在嵌入式SQL中使用游标检索多个元组游标定义语句游标...
    99+
    2023-01-17
    嵌入式SQL
  • 图文详解HTTP头中的SQL注入
    目录1.HTTP头中的注入介绍2.HTTP User-Agent注入3.HTTP Referer注入4.sqlmap安全测试5.HTTP头部详解总结HTTP头中的SQL注入 1.HT...
    99+
    2022-11-12
  • 一文搞懂Java JDBC中的SQL注入问题
    目录SQL注入✨什么是SQL注入✨SQL注入的效果的演示SQL注入代码SQL注入效果✨如何避免SQL注入PrepareStatement解决SQL注入✨PreparedStateme...
    99+
    2022-11-13
    jdbc sql 注入
  • 一文解析PHP的预处理查询怎么防止SQL注入
    本篇文章给大家带来了关于php的相关知识,其中主要跟大家聊一聊什么是预处理语句?PHP的预处理查询是如何防止SQL注入的?感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。PHP的预处理查询是如何防止SQL注入的?目前最有效的防止 sql ...
    99+
    2023-05-14
    SQL注入 php
  • 一篇文章带你了解Spring AOP 的注解
    目录1、xml 的方式实现 AOP①、接口 UserService②、实现类 UserServiceImpl③、切面类,也就是通知类 MyAspect④、AOP配置文件 applic...
    99+
    2022-11-13
  • 一文带你深入了解Node.js(图文详解)
    本篇文章通过超多代码和图解来带大家深入解析Node.js,主要内容包括模块化处理、包的基本应用、Express、跨域、操作Mysql数据库等,希望对大家有所帮助!一、Node.js简介1.1什么是Node.jsNode.js是一个调用内置A...
    99+
    2023-05-14
    nodejs
  • 一篇文章带你了解mybatis的动态SQL
    目录1、动态SQL:if 语句3、动态SQL:if+set 语句4、动态SQL:choose(when,otherwise) 语句5、动态SQL:trim 语句6、动态SQL: SQ...
    99+
    2022-11-13
  • 一文带你了解SQL的执行计划(explain)
    一. 什么是SQL执行计划 为什么关注sql的执行计划,因为一个sql的执行计划可以告诉我们很多关于如何优化sql的信息 。 通过一个sql计划,如何访问中的数据 (是使用全表扫描还是索引查找?...
    99+
    2023-08-31
    数据库 mysql explain 执行计划分析
  • 一文了解Jackson注解@JsonFormat及失效解决
    背景 项目中使用WRITE_DATES_AS_TIMESTAMPS: true转换日期格式为时间戳未生效。如下: spring: jackson: time-zone: Asia/Shangh...
    99+
    2023-09-02
    java spring json spring boot
  • [BUUCTF][N1BOOK][第一章 web入门]SQL注入-2(详细解析)
    目录 题目链接: 题目解析: 得到flag: 题目链接: https://buuoj.cn/challenges#[%E7%AC%AC%E4%B8%80%E7%AB%A0%20web%E5%85%A5%E9%97%A8]SQL%E...
    99+
    2023-09-15
    php web安全 开发语言 sql
  • 一文带你深入了解Java TreeMap
    目录概述TreeMap介绍构造方法关键方法使用案例核心机制实现原理源码解析成员变量查找get方法插入put方法删除remove方法概述 TreeMap是Map家族中的一员,也是用来存...
    99+
    2022-11-13
  • sql注入的一般流程是什么
    sql注入的一般流程是:判断环境,寻找注入点,判断数据库类型。根据注入参数类型,重构SQL语句的原貌。将查询条件替换成SQL语句,猜解表名以及字段名。在表名和列名猜解成功后,再使用SQL语句得出字段的值。...
    99+
    2022-10-08
  • Mybatis常用注解中的SQL注入实例详解
    目录前言常见注入场景2.1普通注解2.2 动态sql2.2.1 使用< script>2.2.2 使用Provider注解总结前言 MyBatis3提供了新的基于注解的配...
    99+
    2022-11-13
  • 一篇文章带你入门java注解
    目录注解什么是注解内置注解元注解自定义注解实例总结注解 什么是注解 Annotation是从JDK5.0开始引入的新技术 Annotation的作用: ...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作