sqli-labs 靶场闯关基础准备、学习步骤、SQL注入类型,常用基本函数、获取数据库元数据

Sqli-labs的主要作用是帮助用户学习如何识别和利用不同类型的SQL注入漏洞,并了解如何修复和防范这些漏洞。
它提供了多个不同的漏洞场景,每个场景都代表了一个特定类型的SQL注入漏洞。
用户可以通过攻击这些场景来学习和实践漏洞利用技术,以及相应的修复和防御措施。
Sqli-labs还提供了详细的漏洞说明和解决方案,帮助用户理解漏洞的原理、影响和防御方法。

在这里插入图片描述

Sqli-labs是一个用于学习和练习SQL注入漏洞的开源应用程序。它提供了一系列的漏洞场景和练习环境,帮助用户了解和实践SQL注入漏洞的利用技术。

学习步骤

学习Sqli-labs需要的基础主要包括对SQL语言Web应用程序安全性的基本了解。
对于初学者来说,可以先从学习SQL语言的基础知识开始,了解SQL的基本语法和查询语句。
然后,可以逐渐深入学习Web应用程序的安全性知识,包括常见的Web漏洞类型和防范方法。

在学习Sqli-labs时,建议按照以下步骤进行:

  1. 了解Sqli-labs的基本概念和原理,包括SQL注入漏洞的定义、类型和影响等。
  2. 下载并安装Sqli-labs靶场环境,可以在虚拟机或云平台上进行搭建。
  3. 按照Sqli-labs提供的教程和示例进行学习和实践,了解如何识别和利用SQL注入漏洞,并学习如何修复和防范这些漏洞。
  4. 尝试自己编写SQL注入攻击代码,对Sqli-labs靶场中的漏洞进行攻击,并验证自己的攻击效果。
  5. 学习如何对Web应用程序进行安全性测试和评估,了解如何检测和修复SQL注入漏洞等常见的Web漏洞。

安装步骤

PHP和MySQL的环境可以通过PHPStudy安装。[PHPStudy官网](https://www.xp.cn/)
  1. Github官网下载安装并放在指定目录下(假如/var/www是你网站的本地地址文件夹)
  2. 或者,你可以在/var/www文件夹中使用 git 命令。 /var/www 文件夹,然后使用以下命令 git clone https://github.com/Audi-1/sqli-labs.git sqli-labs
  3. 打开 sql-labs 文件夹内的 sql-connections 文件夹下的文件“db-creds.inc”。
  4. 更新您的 MYSQL 数据库用户名和密码。(PHPStudy默认使用 root:toor)
  5. 从浏览器访问 sql-labs 文件夹以加载 index.html
  6. 单击链接 setup/resetDB 创建数据库、创建表并填充数据。
  7. 单击sqli labs页面中的课程编号可打开课程页面。

注入类型

  1. 基于错误的注入(Union Select)
    • String
    • Integer
  2. 基于错误的注入(基于双注入)
  3. 盲注:
    • 基于布尔
    • 基于时间
  4. 更新查询注入。
  5. 插入查询注入。
  6. Header 注入。
    • 基于Referer
    • 基于UserAgent
    • 基于Cookie
  7. 二阶注入
    一阶注入是指输入的注射语句对WEB直接产生了影响,出现了结果;
    二阶注入类似存储型XSS,是指输入提交的语句,无法直接对WEB应用程序产生影响,通过其它的辅助间接的对WEB产生危害.
  8. 绕过WAF
  9. 绕过黑名单过滤器
    • 剥离注释
    • 剥离 OR & AND
    • 剥离空格和注释
    • 剥离 UNION & SELECT
    • 阻抗不匹配
  10. 绕过addslashes()
  11. 绕过 mysql_real_escape_string。 (特殊情况下)
  12. 堆叠式 SQL 注入。
  13. 二次通道提取

MySQL

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
Linux作为操作系统,Apache 或Nginx作为 Web 服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统,被业界称为“LAMP“或“LNMP”组合。

常用基本函数

version

系统函数

  1. USER() 返回当前用户
  2. SESSION_USER() 返回当前用户
  3. SYSTEM_USER() 返回当前用户
  4. CURRENT_USER() 返回当前用户
  5. VERSION() 返回数据库的版本号
  6. DATABASE() 返回当前数据库名
  7. BINARY(s) 将字符串 s 转换为二进制字符串
  8. BIN(x) 返回 x 的二进制编码

字符串函数

  1. UPPER(s) 将字符串转换为大写
  2. UCASE(s) 将字符串转换为大写
  3. TRIM(s) 去掉字符串 s 开始和结尾处的空格
  4. SUBSTR(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串
  5. SPACE(n) 返回 n 个空格
  6. FIELD(s,s1,s2…) 返回第一个字符串 s 在字符串列表(s1,s2…)中的位置
  7. CONCAT_WS(x, s1,s2…sn) 同 CONCAT(s1,s2,…) 函数,但是每个字符串之间要加上 x,x 可以是分隔符
  8. CONCAT(s1,s2…sn) 字符串 s1,s2 等多个字符串合并为一个字符串
  9. GROUP_CONCAT([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])
  10. CHARACTER_LENGTH(s) 返回字符串 s 的字符数
  11. CHAR_LENGTH(s) 返回字符串 s 的字符数
  12. ASCII(s) 返回字符串 s 的第一个字符的 ASCII 码。

数字函数

  1. SUM(expression) 返回指定字段的总和
  2. SQRT(x) 返回x的平方根
  3. SIN(x) 求正弦值(参数是弧度)
  4. SIGN(x) 返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1
  5. ROUND(x) 返回离 x 最近的整数
  6. RAND() 返回 0 到 1 的随机数
  7. POW(x,y) 返回 x 的 y 次方
  8. COUNT(col) 统计查询结果的行数
  9. FLOOR(x) 返回小于或等于 x 的最大整数
or (select 1 from (select count(*),concat(0x7e,(),0x7e,floor(rand(0) * 2))x from information_schema.tables group by x)a)--+

报错注入函数

xpath函数

XPATH(XML Path Language)是一种用于在XML文档中定位元素和属性的语言。
XPATH可以通过路径表达式来选取XML文档中的节点。路径表达式可以是绝对的或相对的。绝对路径从根节点开始,而相对路径从当前节点开始。

xpath

  1. UPDATEXML (XML_document, XPath_string, new_value);返回与XPath表达式匹配的值。如果未找到匹配项,则返回空字符串。
  2. EXTRACTVALUE (XML_document, XPath_string);根据XPath表达式更新XML片段。

XPath_string即为注入点,插入~(ASCII码是0x7e)和^(ASCII码是0x5e)等特殊字符是非法的,也就会产生报错,而这些特殊字符也恰好是报错注入的关键点,
而当报错内容为SQL语句的时候,SQL那边的解析器会自动解析该SQL语句,就造成了SQL语句的任意执行。

GTID

GTID是MySQL数据库每次提交事务后生成的一个全局事务标识符,GTID不仅在本服务器上是唯一的,其在复制拓扑中也是唯一的。
  1. GTID_SUBSET( set1 , set2 ) 若在 set1 中的 GTID,也在 set2 中,返回 true,否则返回 false ( set1 是 set2 的子集)
  2. GTID_SUBTRACT( set1 , set2 ) 返回在 set1 中,不在 set2 中的 GTID 集合 ( set1 与 set2 的差集)
    GTID_SUBSET函数
') or gtid_subset(concat(0x7e,(SELECT GROUP_CONCAT(user,':',password) from manage),0x7e),1)--+

') or gtid_subtract(concat(0x7e,(SELECT GROUP_CONCAT(user,':',password) from manage),0x7e),1)--+

ST

在MySQL数据库中,与空间数据相关的函数通常都以ST_(Spatial Type)为前缀。这些函数用于处理空间数据类型,如点(Point)、线(Line)、多边形(Polygon)等。
ST_前缀用于标识这些函数与空间数据相关。
  1. ST_LatFromGeoHash 从地理哈希值返回纬度
    and ST_LatFromGeoHash(concat(0x7e,(),0x7e))--+
  2. ST_LongFromGeoHash从地理哈希值返回经度
    and ST_LongFromGeoHash(concat(0x7e,(),0x7e))--+
  3. ST_Pointfromgeohash将地理哈希值转换为点值
    or ST_PointFromGeoHash((),1)--+

系统信息

常用命令

show tables

  1. show tables或show tables from database_name; – 显示当前数据库中所有表的名称。
  2. show databases; – 显示mysql中所有数据库的名称。
  3. show columns from table_name from database_name; 或show columns from database_name.table_name; – 显示表中列名称。
  4. show grants for user_name; – 显示一个用户的权限,显示结果类似于grant 命令。
  5. show index from table_name; – 显示表的索引。
  6. show status; – 显示一些系统特定资源的信息,例如,正在运行的线程数量。
  7. show variables; – 显示系统变量的名称和值。
  8. show processlist; – 显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。
  9. show table status; – 显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间。
  10. show privileges; – 显示服务器所支持的不同权限。
  11. show create database database_name; – 显示create database 语句是否能够创建指定的数据库。
  12. show create table table_name; – 显示create database 语句是否能够创建指定的数据库。
  13. show engines; – 显示安装以后可用的存储引擎和默认引擎。
  14. show logs; – 显示BDB存储引擎的日志。
  15. show warnings; – 显示最后一个执行的语句所产生的错误、警告和通知。
  16. show errors; – 只显示最后一个执行语句所产生的错误。
  17. desc; – 获取数据表结构

注释

annotate

  1. #Hash注释
  2. /*C语言风格注释
  3. -- SQL语句注释
  4. ;%00空字节
  5. ` 反引号(只能在语句尾使用)

数据库元数据

information_schema 顾名思义就是一个信息库,是用来存储数据库的元数据(比如数据库,表的名称,列的数据类型、访问权限等),
在每个 MySQL 实例中,information_schema 保存了它维护的所有数据库的信息,这个库中包含了很多只读的表。

information_schema
information_schema数据库

  1. schmata表:存放了所有的库名,存放在此表中 schema_name 字段中
  2. tables 表:存放了所有的表名, table_chema库名 以及对应的 table_name表名
  3. columns表:存放了所有的字段,table_schema库名,table_name表名,column_name字段名

MySQL自带的mysql数据库是存储用户和权限相关信息的重要数据库。

MySQL数据库

  1. innodb_table_stats 存储关于所有InnoDB引擎表的统计数据
  2. innodb_table_index 记录了所有InnoDB表的索引信息

Sys库所有的数据源来自:performance_schema。目标是把performance_schema的把复杂度降低

Sys数据库

  • 字母开头: 适合人阅读,显示是格式化的数
    1. schema_auto_increment_columns 对表自增ID的监控
    2. schema_table_statistics_with_buffer 一个视图总结了表的统计信息,包括InnoDB缓冲池统计信息。
  • x$开头 : 适合工具采集数据,原始类数据
    1. x$schema_table_statistics_with_buffer
    2. x$ps_schema_table_statistics_io

数据库信息

basedir_datadir

  1. SELECT @@port; 输出当前数据库端口号
  2. SELECT @@version; 输出当前数据库版本号
  3. SELECT @@basedir; 输出该服务器数据库安装路径
  4. SELECT @@datadir; 输出数据库中数据的存放路径
  5. SELECT @@server_id;输出数据库标识(一般为IP)
  6. SELECT @@version_compile_os输出操作系统的版本号
  7. SELECT @@innodb_flush_log_at_trx_commit; 事务提交刷新时机
    SHOW VARIABLES LIKE 'innodb_flush%'如记不住也可使用模糊查询

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MDK Keil5调试STM32F407时,Debug后直接运行。原因未找到

前段时间调试STM32F407ZGT6最小系统板,遇到一个情况: 没有问题的简单程序(出现问题之前跑过,烧录在其他板子上也运行正常),在调试的时候,点击Debug按钮后,就直接运行,如下图: 上图&…

【Linux】初识信号及信号的产生

初始信号 初始信号什么是信号站在应用角度的信号查看Linux系统定义的信号列表 信号的常见处理方式信号的产生通过终端按键产生信号什么是core dump?如何开启core dump?core dump有什么用?为什么默认关闭core dump?设置了core文件大小但是没有产生core文…

贪心,CF802B. Heidi and Library

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 802A - Codeforces 二、解题报告 1、思路分析 这个题相当于你有一个容量为K的Cache,然后给你一系列访存序列 当访问缺失时你不得不替换掉Cache中某些块 学过操作系统都很熟悉页面置…

The Isle恐龙岛服务器开服联机教程

服务端区别:The lsle 是测试服 ;The lsle Evrima 是正式服(运行内存需要上到12G才可以运行) 1、购买后登录服务器 进入控制面板后会出现正在安装的界面,安装大约5分钟(如长时间处于安装中请联系我们的客服人…

LeetCode216组合总和3

题目描述 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:只使用数字1到9。每个数字 最多使用一次。返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 解析 递归加剪枝,搜索长度达…

基于 Amazon EC2 快速部署 Stable Diffusion WebUI + chilloutmax 模型

自2023年以来,AI绘图已经从兴趣娱乐逐渐步入实际应用,在众多的模型中,作为闪耀的一颗明星,Stable diffusion已经成为当前最多人使用且效果最好的开源AI绘图软件之一。Stable Diffusion Web UI 是由AUTOMATIC1111 开发的基于 Stabl…

【数字孪生平台】光幻示例解析

本文在线示例查看。更多精彩内容尽在数字孪生平台,关注公众号:sky的数孪技术,技术交流、源码下载请添加VX:digital_twin123 地形构建 我们目的要搭建一个中间平坦、两侧有凹凸山脉效果并且能够一直绵延不断的地形,接下来我们通过三个问题来进行分析。 采用什么样的几何图…

Vue——模板引用(不建议使用,了解)

文章目录 前言测试案例 前言 模板引用,在官方文档中也有很详细的描述。 虽然 Vue 的声明性渲染模型为你抽象了大部分对 DOM 的直接操作,但在某些情况下,我们仍然需要直接访问底层 DOM 元素。 个人理解为: 在vue中,依据…

Scrum团队在迭代中如何处理计划外的工作

认为 Scrum 团队不做计划其实是一个误区,实际上很多 Scrum 团队在冲刺计划会议以及在细化工作项时均会进行详细规划。此外,他们还会创建一个路线图,以便显示他们在多个冲刺中的计划。 Scrum 团队需要经常进行计划,以便在不断变化…

本地 Java API 访问云上 HDFS 集群的问题与解决

前言 这篇文章默认是已经在云上配置好了 Haoop 集群,因此本文主要是记录一些可能会出现错误的地方。 如果还不会配置 Hadoop 集群,那么可以参考本专栏的另一篇文章:云上配置 Hadoop 集群详解 另外在进行本文的学习之前也建议先看看该文章&…

创意设计新伙伴:StartAI PSAI插件,让设计工作更轻松!

在设计的世界里,灵感与效率是设计师的双翼。但有时候,面对复杂的设计任务和紧迫的截止日期,即使是最富有经验的设计师也会感到力不从心。StartAI,一款革命性的PS AI设计插件。 StartAI:设计工作的加速器 StartAI是一款…

超分辨重建——SRGAN网络训练自己数据集与推理测试(详细图文教程)

💪 专业从事且热爱图像处理,图像处理专栏更新如下👇: 📝《图像去噪》 📝《超分辨率重建》 📝《语义分割》 📝《风格迁移》 📝《目标检测》 📝《暗光增强》 &a…

Linux——简单指令汇总

Linux,一般指GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯本纳第克特托瓦兹(Linus Benedict Torvalds)于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个…

笔记-python操作kafka实践

1、先看最简单的场景,生产者生产消息,消费者接收消息,下面是生产者的简单代码。 #!/usr/bin/env python # -*- coding: utf-8 -*- import json from kafka import KafkaProducerproducer KafkaProducer(bootstrap_serversxxxx:x)msg_dict …

浅测 长亭雷池 WAF “动态防护”

本文首发于 Anyeの小站 前言 雷池 WAF 社区版的更新速度是真快啊,几乎一周一个小版本,俩月一个大版本,攻城狮们真的狠啊,没法测了。 废话不多说,前两天看到了 这篇文章,对雷池的“动态防护”功能挺感兴趣…

二人订单共享模式:新零售电商盈利新秘诀

电商江湖日新月异,竞争如火如荼,如何脱颖而出,赢得消费者?二人订单共享模式,这是一种全新的商业模式,旨在打造爆款产品,迅速吸引大量客源,并激发消费者重复购买欲望。 首先&#xf…

期权懂带你懂50etf认沽期权和认购期权有什么区别?

今天带你了解期权懂带你懂50etf认沽期权和认购期权有什么区别?在金融市场中,期权是一种允许持有者在未来某个时间以特定价格买入或卖出基础资产的金融衍生品。 50etf认沽期权和认购期权有什么区别? 50ETF认沽期权和认购期权的主要区别在于它…

从报名到领证:软考高级【网络规划设计师】报名考试全攻略

本文共计10551字,预计阅读35分钟。包括七个篇章:报名、准考证打印、备考、考试、成绩查询、证书领取及常见问题。 不想看全文的可以点击目录,找到自己想看的篇章进行阅读。 一、报名篇 报名条件要求: 1.凡遵守中华人民共和国宪…

淘宝电商接口获取商品数据,该怎么获取?

淘宝电商接口(也称为淘宝开放平台API)允许开发者通过编程方式获取淘宝平台上的商品数据、订单数据等。然而,直接获取淘宝的商品数据并不是一件简单的事情,因为淘宝对API的使用有一定的限制和要求,包括权限申请、接口调…

项目-双人五子棋对战: websocket的讲解与使用 (1)

项目介绍 接下来, 我们将制作一个关于双人五子棋的项目, 话不多说先来理清一下需求. 1.用户模块 用户的注册和登录 管理用户的天梯分数, 比赛场数, 获胜场数等信息. 2.匹配模块 依据用户的天梯积分, 实现匹配机制. 3.对战模块 把两个匹配到的玩家放到同一个游戏房间中, 双方通…