SQL注入绕过的技巧总结

作者:无名 - 数据库其它 -

前言

sql注入在很早很早以前是很常见的一个漏洞。后来随着安全水平的提高,sql注入已经很少能够看到了。但是就在今天,还有很多网站带着sql注入漏洞在运行。稍微有点安全意识的朋友就应该懂得要做一下sql注入过滤。

SQL注入的绕过技巧有很多,具体的绕过技巧需要看具体的环境,而且很多的绕过方法需要有一个实际的环境,最好是你在渗透测试的过程中遇到的环境,否则如果仅仅是自己凭空想,那显然是不靠谱的。这篇文章就是总结我在遇到的CTF题目或者是渗透环境的过程中,所使用到的sql注入的绕过技巧,这篇文章随着自己的见识和能力不断的提升,所总结的方法也会变多。

一、引号绕过

会使用到引号的地方是在于最后的where子句中。如下面的一条sql语句,这条语句就是一个简单的用来查选得到users表中所有字段的一条语句。

select column_name from information_schema.tables where table_name="users"

这个时候如果引号被过滤了,那么上面的where子句就无法使用了。那么遇到这样的问题就要使用十六进制来处理这个问题了。
users的十六进制的字符串是7573657273。那么最后的sql语句就变为了:

select column_name from information_schema.tables where table_name=0x7573657273

小结:使用十六进制可以绕过引号

二、逗号绕过

在使用盲注的时候,需要使用到substr() ,mid() ,limit。这些子句方法都需要使用到逗号。对于substr()mid()这两个方法可以使用from to的方式来解决。

select substr(database(0 from 1 for 1);
select mid(database(0 from 1 for 1);

对于limit可以使用offset来绕过。

select * from news limit 0,1
# 等价于下面这条SQL语句
select * from news limit 1 offset 0

小结:使用from可以绕过逗号

三、比较符(<,>)绕过

同样是在使用盲注的时候,在使用二分查找的时候需要使用到比较操作符来进行查找。如果无法使用比较操作符,那么就需要使用到greatest来进行绕过了。

最常见的一个盲注的sql语句。

select * from users where id=1 and ascii(substr(database(),0,1))>64

此时如果比较操作符被过滤,上面的盲注语句则无法使用,那么就可以使用greatest来代替比较操作符了。greatest(n1,n2,n3,等)函数返回输入参数(n1,n2,n3,等)的最大值。

那么上面的这条sql语句可以使用greatest变为如下的子句:

select * from users where id=1 and greatest(ascii(substr(database(),0,1)),64)=64

小结:使用greatest()绕过比较操作符。

总结

好了,以上就是关于SQL注入绕过技巧的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

本文内容由IT人知识库(原文链接:http://www.itpeo.net/12848/409012.html)本站为各位整理





OLEDB和ODBC的区别(优缺点)

ODBC是一种连接数据库的开放标准。 ODBC(OpenDataBase Connectivity,开放数据库互连)是微... ...

ADO,OLEDB,ODBC,DAO,RDO的区别说明

一 ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,W... ...

数据库中删除语句Drop、Delete、Truncate的相同点和不同点的比较(实例说明)

数据库删除语句的分别介绍: Delete:用于删除表中的行(注:可以删除某一行;也可以在不删除表的情况下(即意味着表的结... ...

收藏的SQL知识以及SQL语句简单实践通俗易懂

小引 首先说明,这个笔者2年前学习SQL的遗漏下来的笔记,由于参加完腾讯的笔试,内容比较偏向数据机构和编译以及数据库,刚... ...

数据库中的左连接(left join)和右连接(right join)区别

Left Join / Right Join /inner join相关 关于左连接和右连接总结性的一句话: 左连接 w... ...

一些关于数据存储和查询优化的想法

总结如下: 1. 存储过程: sql语句的批处理,面相应用和服务的,将常用的连续操作做成批处理形式。 解决瓶颈问题:大量... ...

数据库建立索引的一般依据小结

建立索引常用的规则如下: 1、表的主键、外键必须有索引; 2、数据量超过300的表应该有索引; 3、经常与其他表进行连... ...

Mssql,Access的sql经典SQL语句大全

下列语句部分是Mssql语句,不可以在access中使用。    SQL分类:    DDL—数据定义语言(CREATE... ...

由拖库攻击谈口令字段的加密策略(数据库加密)

这些事件中最令业界瞠目的是RSA被入侵,这直接导致多家工业巨头遭遇连锁的攻击,很多安全企业本身也使用RSA的令牌。比RS... ...

关于若干数据库数据插入性能的对比分析

本地数据库接触不多,最早用过Access,但现在SQLite功能更加强大--而且,说实在的我不喜欢Access,连带着不... ...

SQL UPDATE 更新语句用法(单列与多列)

Update 语句 Update 语句用于修改表中的数据。 语法: UPDATE 表名称 SET 列名称 = 新值 WH... ...

rfedfre

90%程序员面试会遇到的索引优化问题

前言 本文给大家分享了90%程序员面试都用得上的索引优化,重点提一下,索引基本原理和创建索引的原则是重点,面试基本必问!... ...

rfedfre

数据库的三级模式和两级映射介绍

数据库的三级模式和两级映射 数据库的三级模式两级映射如下图所示 三级模式 外模式:应用程序用到的部分数据的逻辑结构。... ...

经常使用的JDBC连接数据库方式

一、JDBC连接DB2 代码如下:Class.forName("Com.ibm.db2.jdbc.net.DB2Dri... ...

数据库查询性能需注意几点经验

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量... ...

存储过程返回数组对象示例代码

其实就相当于返回List里面放的对象数据,定义如下 1.创建存储过程对象 代码如下: CREATE OR REPLAC... ...

数据库查询优化(主从表的设计)

举一个例子,我现在有一些新闻信息,它包括这些字段;新闻ID,新闻Name,新闻ShortIntro,新闻Detail,新... ...

怎么判断a、b、c三个字段同时为0则不显示这条数据

这样写的 代码如下: select * from table where a<> 0 or b<&g... ...

关于数据库设计中主键问题的思考

在基于关系型数据库设计时候,通常要为每张表指定一个主键,所谓主键就是能够唯一标识表中某一行记录的属性或属性组,一个表只能... ...

HQL查询语言的使用介绍

HQL查询依赖于Query类,每个Query实例对应一个查询对象,使用HQL查询按如下步骤进行: 1.获取Hiberna... ...