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注入-技巧的主要内容,如果未能解决你的问题,请参考以下文章