MySQL注射的过滤绕过技巧

SQL注射的绕过技巧较多,此文仅做一些简单的总结。

最好利用的注射点:

支持Union

可报错

支持多行执行、可执行系统命令、可HTTP Request等额外有利条件

若非以上类型,则可能需要暴力猜解。猜解时,可能会遇到一些限制。攻击者要做的,就是将其个个击破。

1. 通过greatest函数绕过不能使用大小于符号的情况

猜解单个字符时,通常使用折半查找。

mysql> select ascii(mid(user(),1,1)) < 150;

+------------------------------+

| ascii(mid(user(),1,1)) < 150 |

+------------------------------+

|                            1 |

+------------------------------+

1

2

3

4

5

6

mysql> select ascii(mid(user(),1,1)) < 150;

+------------------------------+

| ascii(mid(user(),1,1)) < 150 |

+------------------------------+

|                            1 |

+------------------------------+

以上是判断user()第一个字符的ascii码是否小于150. 若小于150,返回true(1),否则返回false(0)。 可以看到,需要使用到大小于符号。

比如,对于一个boolean based注入。尝试:

http://xxx.com/index.php?id=1 and ascii(mid(user(),1,1)) < 150

http://xxx.com/index.php?id=1 and ascii(mid(user(),1,1)) >= 150

上述两个页面返回的内容应该是不同的。

但问题是,有些情形下,我们是不能使用大小于符号的(<>),被过滤了。

此时,可以通过greatest函数绕过。greatest(a,b),返回a和b中较大的那个数。

当我们要猜解user()第一个字符的ascii码是否小于等于150时,可使用:

mysql> select greatest(ascii(mid(user(),1,1)),150)=150;

+------------------------------------------+

| greatest(ascii(mid(user(),1,1)),150)=150 |

+------------------------------------------+

|                                        1 |

+------------------------------------------+

1

2

3

4

5

6

mysql> select greatest(ascii(mid(user(),1,1)),150)=150;

+------------------------------------------+

| greatest(ascii(mid(user(),1,1)),150)=150 |

+------------------------------------------+

|                                        1 |

+------------------------------------------+

如果小于150,则上述返回值为True。

2. 通过substr函数绕过不能使用逗号的情况

不能使用逗号的情况较少,往往是因为逗号有某些特殊的作用,被单独处理了。

通常,猜解都是要用到逗号的,因为需要mid函数取字符呐:

ascii(mid(user(),1,1))=150

1

ascii(mid(user(),1,1))=150

绕过的方法是使用from x for y。语法类似:

mid(user() from 1 for 1)

substr(user() from 1 for 1)

1

2

3

mid(user() from 1 for 1)

substr(user() from 1 for 1)

以上同样是从第一个字符开始,取一位字符。

那么,不带逗号注入的语法,就可以变成:

mysql> select ascii(substr(user() from 1 for 1)) < 150;

+------------------------------------------+

| ascii(substr(user() from 1 for 1)) < 150 |

+------------------------------------------+

|                                        1 |

+------------------------------------------+

mysql> select ascii(substr(user() from 1 for 1)) < 150;

+------------------------------------------+

| ascii(substr(user() from 1 for 1)) < 150 |

+------------------------------------------+

|                                        1 |

+------------------------------------------+

是不是跟mid函数的效果是一样的,又没有用到逗号。

时间: 2024-10-07 04:30:21

MySQL注射的过滤绕过技巧的相关文章

mysql注射的过滤绕过技巧1 by 李劼杰

MySQL注射的过滤绕过技巧[1] By lijiejie on 2014 年 10 月 11 日 转自:http://www.lijiejie.com/mysql-injection-bypass-waf/ SQL注射的绕过技巧较多,此文仅做一些简单的总结. 前文已经提到,最好利用的注射点: 支持Union 可报错 支持多行执行.可执行系统命令.可HTTP Request等额外有利条件 若非以上类型,则可能需要暴力猜解.猜解时,可能会遇到一些限制.攻击者要做的,就是将其个个击破. 1. 通过g

MYSQL注入基础及绕过技巧总结

1.MYSQL注入原理:用户输入的内容被当作sql语句来执行 2.MYSQL注入实战心得:一试参数,二试类型,三试绕过 一试参数:任何注入参数,都需确定其类型(数字还是字符),此处指的是注入参数的类型(***) 常用测试字符:引号(单双),圆括号,引号加圆括号...... 二试类型:五大类(BEUST):布尔型盲注.报错型注入.UNION联合查询型注入.时间延迟型盲注.堆查询注入 布尔型盲注:and 1=1 , and 1=2 , or 1=1 , or 1=2 ...... 报错型注入: fl

[转载]SQL注入绕过技巧汇总

转载一篇比较好的文章,乘心物游大佬写的. SQL注入的绕过技巧有很多,具体的绕过技巧需要看具体的环境,而且很多的绕过方法需要有一个实际的环境,最好是你在渗透测试的过程中遇到的环境,否则如果仅仅是自己凭空想,那显然是不靠谱的.这篇文章就是总结我在遇到的CTF题目或者是渗透环境的过程中,所使用到的sql注入的绕过技巧,这篇文章随着自己的见识和能力不断的提升,所总结的方法也会变多.1.引号绕过 会使用到引号的地方是在于最后的where子句中.如下面的一条sql语句,这条语句就是一个简单的用来查选得到u

MYSQL 注射精华

前言鄙人今天心血来潮突然想写篇文章,鄙人从来没写过文章,如果有错误的地方请多多指教.本文需要有基础的SQL语句知识才可以更好的理解.建议想学习的人多去了解一下SQL语句和编程语言,知己知彼才能百战百胜.    我不希翼得到读者您的好评,尽管我尽力了;只希望本文能解决您学习过程的障碍,希望您早日掌握有关MYSQL注入方面的知识. 1.MYSQL 注射的产生.    漏洞产生原因 : 程序执行中未对敏感字符进行过滤,使得攻击者传入恶意字符串与结构化数据查询语句合并,并且执行恶意代码.    咱们先创

hibernate设置mysql的timestamp默认值技巧

首先,要想使用数据库中配置的默认值就必须不让hibernate覆盖了默认值,需要配置property insert="false" update="false",告诉hibernate不对该属性执行insert.update操作,这要就不会覆盖我们在数据库中配置的默认值了.除此之外,我们还需要配置hibernate对该表的操作,dynamic-insert="true" dynamic-update="true", 实现动态的

waf绕过技巧

0x00 links waf绕过技巧库: http://wafbypass.me/w/index.php/Main_Page may be a best one https://xianzhi.aliyun.com/forum/attachment/big_size/wafbypass_sql.pdf good http://www.freebuf.com/articles/web/10099.html WAF绕过的奇技淫巧 http://tech-technical.com/index.php

MySQL数据库性能优化的技巧和窍门

数据库表表面上存在索引和防错机制,然而一个简单的查询就会耗费很长时间.Web应用程序或许在开发环境中运行良好,但在产品环境中表现同样糟糕.如果你是个数据库管理员,你很有可能已经在某个阶段遇到上述情况.因此,本文将介绍对MySQL进行性能优化的技巧和窍门. 1.存储引擎的选择 如果数据表需要事务处理,应该考虑使用InnoDB,因为它完全符合ACID特性.如果不需要事务处理,使用默认存储引擎MyISAM是比较明智的.并且不要尝试同时使用这两个存储引擎.思考一下:在一个事务处理中,一些数据表使用Inn

忘记mysql root 密码修改小技巧

首先我说一下我的情况,我并不是忘记了我的root密码,只不过是我在使用phpmyadmin的时候更改密码的时候选择了如图1 的这个方法将密码加密并更改了,然后就再次登录的时候登录不上,所以对于菜鸟级的用户学习mysql来说我推荐我的这个方法. 网上搜索相关的帖子的整体思路都是关闭mysql的进程然后跳过权限设置最后重新设定密码,不过我不是很清楚是不是mysql新版本的问题,mysql根目录/bin下没有mysqld-nt.exe导致很多帖子的相关命令都失效,对于菜鸟又不知道该对应哪些地方才行.于

mysql基础操作、sql技巧和sql的常见优化

一.常见操作 1.复制表结构create table t2 like t1 复制表数据insert into t2 select * from t1 2.mysql索引 alter table用来创建普通索引.unique索引或primary key索引 alter table t add index index_name(column_list) alter table t add unique(column_list) alter table t add primary key(column