前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【注入练习】SQLi-Labs过关全攻略

【注入练习】SQLi-Labs过关全攻略

作者头像
HACK学习
发布2019-08-07 10:12:46
2.8K0
发布2019-08-07 10:12:46
举报
文章被收录于专栏:HACK学习

SQLI,sql injection,我们称之为 sql 注入。何为 sql,英文:Structured Query Language, 叫做结构化查询语言。常见的结构化数据库有 MySQL,MS SQL ,Oracle 以及 Postgresql。Sql语言就是我们在管理数据库时用到的一种。在我们的应用系统使用 sql 语句进行管理应用数 据库时,往往采用拼接的方式形成一条完整的数据库语言,而危险的是,在拼接 sql 语句的 时候,我们可以改变 sql 语句。从而让数据执行我们想要执行的语句,这就是我们常说的 sql注入。

此处介绍一些 mysql 注入的一些基础知识。

(1)注入的分类---仁者见仁,智者见智。

下面这个是阿德玛表哥的一段话,个人认为分类已经是够全面了。理解不了跳过,当你完全 看完整个学习过程后再回头看这段。能完全理解下面的这些每个分类,对每个分类有属于你 的认知和了解的时候,你就算是小有成就了,当然仅仅是 sql 注入上。 基于从服务器接收到的响应

▲基于错误的 SQL 注入

▲联合查询的类型

▲堆查询注射 ▲SQL 盲注

•基于布尔 SQL 盲注

•基于时间的 SQL 盲注

•基于报错的 SQL 盲注 基于如何处理输入的 SQL 查询(数据类型)

•基于字符串

•数字或整数为基础的 基于程度和顺序的注入(哪里发生了影响)

★一阶注射 ★二阶注射 一阶注射是指输入的注射语句对 WEB 直接产生了影响,出现了结果;二阶注入类似存

储型 XSS,是指输入提交的语句,无法直接对 WEB 应用程序产生影响,通过其它的辅助间 接的对 WEB 产生危害,这样的就被称为是二阶注入. 基于注入点的位置上的

▲通过用户输入的表单域的注射。 ▲通过 cookie 注射。 ▲通过服务器变量注射。 (基于头部信息的注射)

(2)系统函数

介绍几个常用函数: 1. version()——MySQL 版本 2. user()——数据库用户名 3. database()——数据库名 4. @@datadir——数据库路径 5. @@version_compile_os——操作系统版本

(3)字符串连接函数

函数具体介绍 http://www.cnblogs.com/lcamry/p/5715634.html

1. concat(str1,str2,...)——没有分隔符地连接字符串 2. concat_ws(separator,str1,str2,...)——含有分隔符地连接字符串 3. group_concat(str1,str2,...)——连接一个组的所有字符串,并以逗号分隔每一条数据 说着比较抽象,其实也并不需要详细了解,知道这三个函数能一次性查出所有信息就行了。

(4)一般用于尝试的语句

Ps:--+可以用#替换,url 提交过程中 Url 编码后的#为%23 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 users WHERE id='$id' LIMIT 0,1"; 此处考虑两个点,一个是闭合前面你的 ‘ 另一个是处理后面的 ‘ ,一般采用两种思 路,闭合后面的引号或者注释掉,注释掉采用--+ 或者 #(%23)

(5)union 操作符的介绍

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的 列的顺序必须相同。 SQL UNION 语法

SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2 注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。 SQL UNION ALL 语法

SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2 另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

(6)sql 中的逻辑运算

这里我想说下逻辑运算的问题。 提出一个问题 Select * from users where id=1 and 1=1; 这条语句为什么能够选择出 id=1 的内容,and 1=1 到底起作用了没有?这里就要清楚 sql 语句执行顺序了。 同时这个问题我们在使用万能密码的时候会用到。 Select * from admin where username=’admin’ and password=’admin’ 我们可以用 ’or 1=1# 作为密码输入。原因是为什么? 这里涉及到一个逻辑运算,当使用上述所谓的万能密码后,构成的 sql 语句为: Select * from admin where username=’admin’ and password=’’or 1=1#’ Explain:上面的这个语句执行后,我们在不知道密码的情况下就登录到了 admin 用户了。 原因是在 where 子句后,我们可以看到三个条件语句 username=’admin’ and password=’’or 1=1。三个条件用 and 和 or 进行连接。在 sql 中,我们 and 的运算优先 级大于 or 的元算优先级。因此可以看到 第一个条件(用 a 表示)是真的,第二个条件(用 b表示)是假的,aand b=false,第一个条件和第二个条件执行and后是假,再与第三 个条件 or 运算,因为第三个条件 1=1 是恒成立的,所以结果自然就为真了。因此上述的语 句就是恒真了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HACK学习呀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档