Sqli-labs学习
sqli-labs
前言
https://github.com/Audi-1/sqli-labs
第一部分(page-1 Basic Challenges)
Background-1 基础知识
- 注入的分类 - 基于从服务器接收到的响应 - 基于错误的SQL注入
- 联合查询注入
- 堆查询注入
- 盲注(布尔盲注、时间盲注、报错盲注)
 
- 基于如何处理输入的SQL查询(数据类型) - 基于字符串
- 数字或整数为基础的
 
- 基于程度和顺序的注入(哪里发生了影响) - 一阶注入 
- 二阶注入 
 - 一阶注射是指输入的注射语句对 WEB 直接产生了影响,出现了结果;二阶注入类似存 储型 XSS,是指输入提交的语句,无法直接对 WEB 应用程序产生影响,通过其它的辅助间 接的对 WEB 产生危害,这样的就被称为是二阶注入. 
- 基于注入点的位置上 - 通过用户输入的表单域的注射
- 通过cookie注射
- 通过服务器变量注射(基于头部信息的注射)
 
 
- 系统函数 - version() –MySQL版本
- user() –数据库用户名
- database() –数据库名
- @@datadir –数据库路径
- @@version_compile_os –操作系统版本
 
- 字符串连接函数 - 函数具体介绍 http://www.cnblogs.com/lcamry/p/5715634.html - concat(str1, str2, …) – 没有分隔符的连接字符串
- concat_ws(separator, str1, str2, …) – 有分隔符的连接字符串
- group_concat(str1, str2, …) – 连接一个组的所有字符串,并以逗号分隔每一条数据
 
- 一般用于尝试的语句 - ps: - --+可以用- #替换, url提交过程中url编码后的- #为- %23- 1 
 2
 3
 4
 5
 6
 7- or 1=1 --+ 
 ' or 1=1 --+
 " or 1=1 --+
 ) or 1=1 --+
 ') or 1=1 --+
 ") or 1=1 --+
 ")) or 1=1 --+- 一般的代码为: - 1 
 2- $id=$_GET['id']; 
 $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";- 此处考虑两个点,一个是闭合前面你的 - ',另一个是处理后面的- ',一般采用两种思路,闭合后面的引号或者注释掉,注释掉采用–+ 或者 #(%23)
- union操作符的介绍 - UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的 列的顺序必须相同。 - 1 - select column_name(s) from table_name1 union select column_name(s) from table_name2 - 默认地, - UNION操作符选取不同的值。如果允许重复的值,请使用- UNION ALL。- 1 - select column_name(s) from table_name1 union all select column_name(s) from table_name2 - UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名 
- SQL中的逻辑运算 
- 注入流程  
Mysql 有一个系统数据库 information_schema,存储着所有的数据库的相关信息,一般的, 我们利用该表可以进行一次完整的注入。以下为一般的流程。
猜数据库
| 1 | select schema_name from information_schema.schemata | 
猜某库的数据表
| 1 | select table_name from information_schema.tables where table_schema=’xxxxx’ | 
猜某表的所有列
| 1 | Select column_name from information_schema.columns where table_name=’xxxxx’ | 
获取某列的内容
| 1 | Select *** from **** |