1. 避开输入过滤

输入过滤存在于外部和内部,外部属于web应用防火墙WAF,入侵防御系统IPS,入侵检测系统IDS,内部属于代码中对输入进行过滤

过滤select,insert等sql关键字和' |,等字符

(1)大小写变种:将关键字变为SeLeCt * FrOm UserINFO   由于过滤是针对全大写或者全小写,很少会对大小写做排列组合进行过滤。若单个过滤则会影响用户正常输入。

(2)使用sql注释:php中使用stristr('a','b')判断b在a中第一次出现并返回,通过

判断输入中是否含有关键字,且大小写不敏感且二进制安全。都紧跟空格进行检查

用/**/代替空格    用like代替=

(3)使用URL编码:URL编码是通过浏览器进行,不同浏览器的编码方式不同。IE11使用GB2312,firefox3.2使用UTF-8,解码却是根据服务器的编码模式进行解码,所以经常开发过程会出现中文未对其进行编码处理就会导致乱码问题,就是浏览器编码和服务器解码不一致问题。这样也会产生get和post的区别,get是由浏览器自动编码。但post是由请求头contentType中的charset决定编码模式,并告诉服务器应对应什么方式进行解码。所以在使用URL编码绕过sql过滤且进行get注入的时候要考虑浏览器的编码模式和服务器的解码模式,随便一个页面就能看出服务器的解码模式。JS的AJAX技术也是一样。escape就是针对GB2312的编码,URLencordCompontent是针对UTF-8的。

有的对于中文查询会在前段进行UTF-8编码再进行UTF-8(ISO-8859-1),在服务器端逆序解码。需要双URL编码。

原始注入:c' and if(current_user()='root@localhost',1,0)#ww

c'%2F%2A%2A%2Fand%2F%2A%2A%2Fif%28current_user%u0023%29%3D'root%40localhost'%2C1%2C0)%3B%23ww

(4)使用动态查询:SQLserver允许用exec('')的方式执行sql语句

exec ('select * from sysobjects')

滥用字符连接绕过sql过滤

exec('s'+'e'+'l'+'e'+'c'+'t'+'/**/*/**/f'+'r'+'o'+'m/**/s'+'y'+'s'+'o'+'b'+'j'+'e'+'c'+'t'+'s')

使用CHAR()构造单个字符,不需要引入任何引号。

sqlsever中可直接使用声明变量,赋值为0x的16进制进行

declare @query varchar(100)

set @query=0x73656C656374202A2066726F6D207379736F626A65637473

exec(@query)

(5)使用空字符:很多IDS或者WAF由C++等原生代码编写。对于空字符即是截断就会停止处理。

%00' UNION SELECT PASSWORD FROM TBLUSERS WHERE USERNAME='ADMIN'--

原生代码指的是直接能靠cpu执行的代码,不需要虚拟机沙箱等外部应用库提供支持。

(6)对于剥离字符串:第一次剥离后不会迭代过滤器,所以可以selselectect进行注入

2. 二阶sql注入

(1) 产生原因: 攻击者需要在第一次注入的时候将目标值或者有用的东西存储在数据库中。再通过第二次查询将目标值读取出来。

应用实例:在添加用户的时候将用户名设置为 '+substring(@@version,1,50)+'

数据库在插入语句则如下:insert into userinfo values (''+substring(@@version,1,50)+'','wwww');

这样就将版本信息插入进入了用户名字段,在随意查看用户名就知道了数据库版本号等信息。

重点考虑的是不同数据库的字符串连接符还闭合前后的引号,使得注入语句能被执行且保存在数据库中。

重点考虑的是用户名等信息在被处理的时候的具体处理方式,过滤还是剥离,或通过编码,大小写等方法一

一尝试

在用户名等插入过程中,常常将用户名设置为xxx' union select count(*),count(*) from xxx 等信息来进行二阶注入,在面对有输入过滤的情况下就进行绕过。

(2) 寻找二阶注入点:常用工具无法扫出,只能通过手工注入。

1. 寻找能被用户操作且存储的数据项

2. 检测非法字符注入的可行性

3. 试试用URL编码,大小写转换等技巧绕过输入过滤

4. 针对程序可能暴露出的敏感信息页面的收集

5. 开发代码验证SQL注入,先显后盲。

防御:所有对数据库提供的操作均使用参数化,对查询结果集结构进行固定。

3. 其他思路

(1) 使用混合攻击:使用跨站和sql注入混合攻击,若id是一个容易被注入的参数则有如下语句

id=123' union select 1,'<script>alert(1)</script>',1

(2) 使用验证过的通道:有的sql注入漏洞是需要利用管理员登陆后才有权限访问的点。所以可以先通过跨站点伪造请求。

(3) 使用ORACLE执行OS命令,通过双引号包含表名,包含恶意shell命令的表名的表则被成功创建。再通过SQL*Plus来执行的时候该脚本会去除引号,将!解析为UNIX命令,$则是windows,VMS。

高级sql注入的更多相关文章

  1. [转]高级SQL注入:混淆和绕过

    ############# [0×00] – 简介[0×01] – 过滤规避(Mysql)[0x01a] – 绕过函数和关键词的过滤[0x01b] – 绕过正则表达式过滤[0×02] – 常见绕过技术 ...

  2. WEB安全--高级sql注入,爆错注入,布尔盲注,时间盲注

    1.爆错注入 什么情况想能使用报错注入------------页面返回连接错误信息 常用函数 updatexml()if...floorextractvalue updatexml(,concat() ...

  3. SQL注入专题

    SQL注入专题--整理帖 SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别, 所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被 ...

  4. (非原)SQL注入专题--整理帖 && like 语句拼sql 如何防止注入攻击。

    原地址:blog.csdn.net/lvjin110/article/details/28697695 like 语句拼sql 如何防止注入攻击?http://bbs.csdn.net/topics/ ...

  5. Sqli-labs 搭建SQL注入平台

    sqli-labs是一款学习sql注入的开源平台,共有75种不同类型的注入. 搭建步骤: 1.在Windows系统中安装WAMP 下载地址:https://pan.baidu.com/s/1HY0hF ...

  6. SQL注入攻击三部曲之高级篇

    SQL注入攻击三部曲之高级篇 经过了入门篇和进阶篇的学习,相信诸位想要破解一般的网站是没有什么问题了,但是先别得意.正所谓学海无涯,技术的进步也是没有止境的.SQL注入是一个看起来简单,但是变数很多的 ...

  7. 【渗透攻防Web篇】SQL注入攻击高级

    前言 前面我们学习了如何寻找,确认,利用SQL注入漏洞的技术,本篇文章我将介绍一些更高级的技术,避开过滤,绕开防御.有攻必有防,当然还要来探讨一下SQL注入防御技巧. 目录 第五节 避开过滤方法总结 ...

  8. sql高级手工注入

    非常重要:首先在网站找到管理入口,否则,呵呵就算有用户名和密码,找不到入口,也是白玩.. 注入时,注意通过改变大小写.编码.转换等方式躲过系统检查,顺利执行语句!!! (一)数字型注入 正常步骤: 1 ...

  9. 深入理解SQL注入绕过WAF和过滤机制

    知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...

随机推荐

  1. Wakez计算与压缩的思考

    大部分人认为,比尔盖茨在1981年说过这样一句话:640K ought to be enough for anybody.(640个kB对任何人来说都应该足够了).不过后来比尔盖茨否认自己说过这句话. ...

  2. 文件服务器:FTP服务器详解

    文件服务器:FTP服务器 数据传输原理 功能简介 文件的传输与管理 不同等级的用户身份:user.guest.anonymous 实体用户.权限较完整 匿名用户.下载资源的能力 命令记录与日志文件记录 ...

  3. JS多线程(web work)

    JS多线程JS多线程不允许操作DOM 1. 引用Concurrent Thread.js库用法:Concurrent.Thread.Create(function(){};) 2. Web Workh ...

  4. wap支付宝接口的问题

    今天在支付宝接口开发时,遇到的两个坑 第一个: https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.8nHr4i& ...

  5. 【转】Redis入门

    Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案. Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁盘仅用 ...

  6. 【JavaScript】 Webpack安装及文件打包

    背景 最近开启一个新项目,需要对前端的各类资源文件进行打包,经过多方调研后,决定使用webpack工具.但是网上的教程多是将webpack直接作为服务器使用,而我只是想将其作为单纯的资源打包工具而已. ...

  7. Duilib源码分析(四)绘制管理器—CPaintManagerUI—(前期准备一)

    上节中提到在遍历创建控件树后,执行了以下操作:      1. CDialogBuilder构建各控件对象并形成控件树,并返回第一个控件对象pRoot:     2. m_pm.AttachDialo ...

  8. linux下libuv库安装教程

    下载并编译libuv libuv需要自己手动下载源码,并手动编译. 当前目录为:/home/xlz/test/github,在后面,会用$PATH来代替,我的系统的Debian8,64bit. $gi ...

  9. fatal error LNK1169: 找到一个或多个多重定义的符号

    申明全局变量,全局函数一定要在cpp中申明,其他类引用该全局变量就include该cpp的h文件,然后extern一下就好了.否则容易出现该重复定义错误. 这个"容易"是如何解释的 ...

  10. 使用WCF 创建 Rest service

    REST SERVICE 允许客户端修改url路径,并且web端功过url 请求数据. 他使用http协议进行通讯,想必大家都知道 . 并且我们可以通过设置进行数据类型转换, 支持XML,JSON 格 ...