前言:sql-libs是专门用来练习SQL注入的开源学习平台,我们常常在CTF的WEB题型中遇到SQL注入的题目类型,各种注入类型让我们难以解题,哪怕是面向WP解题也常常看不懂大佬们的payload,到底什么是盲注?什么是堆叠注入?什么是联合查询?如何根据回显得知哪些被过滤了......所有的这些种种,我们都希望能够搞明白:为什么? 在经历了一段时间的休整和对我之前的博客进行整理之后,我现在得以有一些时间去填我之前的坑,我们来系统,细致的去学习这些内容和知识点。
Sqli-labs的安装教程在这里:sqli-labs的安装 这里建议安装WAMP/MAMP(Windows/Mac版本)这里一系列的安装教程参考我之前的教程:安装教程
好 现在一切就绪,然我们开始吧! 为了做题方便和payload直观,这里就用HackBar,打开WAMP/MAMP,在浏览器上输入:
代码语言:javascript复制Windows:127.0.0.1/sql/Less-1/ #这里安装的时候sql命名任意,根据命名在地址栏上输入
Mac: localhost/sql/Less-1/
这里我们先不做题,先来聊聊基础知识
一.注入的分类
1.基于从服务器接收到的响应
2.基于如何处理输入的SQL查询(数据类型)
3.基于程度和顺序的注入(哪里发生了影响)
一阶注射是指输入的注射语句对WEB直接产生了影响,出现了结果;二阶注入类似于存储型XSS,是指输入提交的语句无法直接对WEB应用程序产生影响,通过其它的辅助间接对WEB产生危害,这就是二阶注入。
4.基于注入点的位置上的
二.系统函数
介绍几个常用的函数:
代码语言:javascript复制1. version() --MySQL版本
2. user() --数据库用户名
3. database()--数据库名
4. @@datadir --数据库路径
5. @@version_comlipe_os--操作系统版本
三.字符串连接函数
函数的具体介绍(这又是另外一个坑,这里我不再展开细说,大家去看我另外一篇文章)
代码语言:javascript复制1. concat(str1,str2,...) --没有分隔符地连接字符串
2. concat_ws(separator,str1,str2,...)--含有分割符地连接字符串
3. group_concat(str1,str2,...)--连接一个组的所有字符串,并以逗号分隔每一条数据
四.一般用于尝试的语句
代码语言:javascript复制重点: -- 可以用 # 代替,URL提交过程中编码后的 # 为 #
or 1=1--
'or 1=1--
"or 1=1--
)or 1=1--
')or 1=1--
") or 1=1--
")) or 1=1--
一般代码为:
代码语言:javascript复制$id=$_GET['id'];
$sql="SELECT * FROM uesrs WHERE id='$id' LIMIT 0,1";
此处考虑两个点,一个是闭合前面的 ' 另一个是处理后面的 ' ,一般采用两种思路: 闭合后面的引号或者注释掉,注释掉采用 -- 或者 # (#)
五.union操作符的介绍
UNION操作符用户合并两个或多个SELECT语句的结果集。UNION内部的SELECT语句必须拥有相同数量的列。列必须也拥有相似的数据结构。同时,每条SELECT语句中的列的顺序必须相同 SQL UNION语法:
SELECT column_name(s)