sql注入-技巧

Posted wd404

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql注入-技巧相关的知识,希望对你有一定的参考价值。

1、union联合注入

如果sql语句是select结构,可以尝试联合注入获取信息。

(1)order by n确认查询字段数,n从1开始递增,只有当n等于当前select查询字段数才正常执行sql语句

(2)union select 1,2,3...n,默认查询,确认有输出前端的字段。

  • 如果确定是单查询,那么需要将union前的条件置为false
  • 如果响应不包含union后的查询,那么推测是单查询,需要将union前的条件置为false

(3)union select version(),user(),database(),查询基本信息

(4)查询具体的数据库表数据

2、布尔盲注

如果无法直接输出查询数据到前端,但是根据条件的不同会有其它不同的状态输出,那么可以进行布尔盲注,利用响应中的反应进行判断。

对于获取的信息,可以作为一个字符串,进行逐字符判断,从而获取整体内容。

3、时间盲注

与布尔盲注原理基本一致,区别在于不是根据响应内容判断,而是根据响应的时间进行判断。

主要利用if函数和sleep函数

4、错误注入

如果服务端将sql应用执行sql语句的sql异常输出到前端,可以利用updatexml等函数输出信息

5、堆栈注入

对于sql语句,通过;关闭当前语句,然后在其后另写sql语句执行。

注意这种方法,后者的sql语句一般不会输出影响前端,所以并不写入select语句。

6、其他

6.1 二次注入

如果某处存在sql注入漏洞,但是因为防护墙等因素无法在该sql语句中写入敏感字符或关键字。而在另外一处可以将敏感字符或关键字写入保存到数据库中,同时在存在sql注入处,有读取保存的数据作为变量使用,因此结合利用。

$sql = "UPDATE users SET PASSWORD=\'$pass\' where username=\'$username\' and password=\'$curr_pass\' ";

6.2 宽字节注入

一般,网站程序和mysql都是统一使用utf-8编码,不会出现宽字节注入。

但是如果两者不一致,那么就有可能在网站程序中检查输入是作为宽字节被允许,但是数据库中是单字节编码,造成被允许的宽字节字符拆分成多个单字节字符,就有可能在sql语句中突然出现单引号、双引号、空格等敏感字符

这个 SQL 技巧或注入是啥意思?

【中文标题】这个 SQL 技巧或注入是啥意思?【英文标题】:What does this SQL trick or injection mean?这个 SQL 技巧或注入是什么意思? 【发布时间】:2015-10-21 18:19:30 【问题描述】:

我创建这个是因为一些用户试图把它放在我的 sql 中

但使用 mysql_real_escape_string 它实际上保存了我的网站..

我只是想问一下这段代码到底做了什么.. 非常感谢;)

    (select(@) from (select (@:=0x00),(select (@) from (TABLE) where (@) in (@:=concat(@,0x0a,col1,0x3a,col2,0x3a,col3))))a)

【问题讨论】:

【参考方案1】:

在隔离的测试环境中,针对干净的数据库执行它,看看它做了什么。它还有助于查看normal sql 语句的外观,以便将其与恶意版本进行比较。附带说明一下,使用准备好的语句来防止 sql 注入情况。

始终限制输入。验证应用程序的所有输入的类型、长度、格式和范围。

【讨论】:

好吧..我试图测试它..但它给了我错误,我认为mysql_real_escape_string改变它..所以现在我不知道:(? 我没有看到任何会导致您的数据更改的更新声明。我建议您提供完整的 sql 并将其发布到数据库论坛...同时,请按照我的建议采取预防措施,以保护您的网站免受 sql 注入

以上是关于sql注入-技巧的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入绕过技巧汇总

这个 SQL 技巧或注入是啥意思?

sql注入-技巧

sql手工注入时的探测技巧汇总

我要悄悄的注入,然后惊艳所有人!(SQL快速注入漏洞技巧)

SQL注入绕过技巧