SQL注入之WAF绕过总结一、WAF的定义WAF(Web应用防火墙)是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。通俗来说就是WAF产品里集成了一定的检测规则,会对每个请求的内容根据生成的规则进行检测并对不符合安全规则的作出对应的防御处理,从而保证Web应用的安全性与合法性。
二、WAF的工作原理WAF的处理流程大致可分为四部分:预处理、规则检测、处理模块、日志记录
1. 预处理预处理阶段首先在接收到数据请求流量时会先判断是否为HTTP/HTTPS请求,之后会查看此URL请求是否在白名单之内,如果该URL请求在白名单列表里,直接交给后端Web服务器进行响应处理,对于不在白名单之内的对数据包解析后进入到规则检测部分。
2. 规则检测每一种WAF产品都有自己独特的检测规则体系,解析后的数据包会进入到检测体系中进行规则匹配,检查该数据请求是否符合规则,识别出恶意攻击行为。
3. 处理模块针对不同的检测结果,处理模块会做出不同的安全防御动作,如果符合规则则交给后端Web服务器进行响应处理,对于不符合规则的请求会执行相关的阻断、 ...
SQL注入总结1.什么是SQL注入SQL注入是一种通过操纵输入来修改后台SQL语句以达到利用代码进行攻击目的的技术
2.漏洞产生的前提条件参数用户可控:前端传给后端的参数内容是可以被用户控制的参数带入数据库查询:传入的参数拼接到SQL语句,且带入数据库查询
必懂基础知识点:系统函数
1234567891011121314151617system_user()——系统用户名 user()——用户名 current_user()——当前用户名 session_user()——链接数据库的用户名 database()——数据库名 version()——数据库版本 @@datadir——数据库路径 @@basedir——数据库安装路径 @@version_conpile_os——操作系统
字符串连接函数
12345concat(str1,str2,...)——没有分隔符地连接字符串concat_ws(separator,str1,str2,...)——含有分隔符地连接字符串group_concat(str1,str2,...)——连接一个组的所有字符串,并以逗号分隔每一条数据。
–+可以 ...
WEB漏洞—SQL注入之堆叠及WAF绕过注入
堆叠注入查询
Stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆SQL语句(多条一起执行)。而在真实的运用中也是这样的,我们知道在MySQL中,主要是命令行中,每一条语句结尾加一个【;】表示语句结束,这样我们想到了是不是可以多句一起使用,这个叫做Stacked injections
局限
1、堆叠注入需要后端API是否支持多语句执行,数据库引擎是否支持的限制,如果有一个不支持则无法使用
2、如果后端只返回一条数据则在前端是无法查看到第二条注入语句执行结果。
3、局限于部分数据库
4、使用堆叠注入前也需要知道数据表的信息
堆叠注入比UNION注入更加强大,不仅可以拼接查询语句也可以拼接更新/删除语句。
可以看到两个SQL语句一起写,然后两个语句的查询结果就也一起显示出来了。
有什么用处?
注入需要管理员账号密码,密码是加密的,而你无法解密,那么就可以用堆叠注入进行插入数据,用户密码是你自定义的,那么接下来就可以正常解密登陆的(而且可能由于是管理员的注入点,那么你创建的用户也有可 ...
WEB漏洞—SQL注入之SQLMAP绕过WAF在攻防实战中,往往需要掌控一些特性,比如服务器,数据库,应用层,WAF层等,以便我们更灵活地去构造Payload,从而可以和各种WAF进行对抗,甚至绕过安全防御措施进行漏洞利用
1、逻辑问题(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
2、性能问题猜想1:在设计WAF系统时,考虑自身性能问题,当数据量达到一定层级,不检测这部分数据。只要不断的填充 ...
SQL注入扩展—宽字节注入非常好的一篇文章
1https://www.freebuf.com/column/165567.html
在计算机中,字符的表示与存储都离不开编码。例如ASCII,utf-8,gbk2312等。通常字符的表示都只需1字节。但也有如gbk2312这种需要2字节来表示的编码格式,这种我们称之为宽字节。
所谓宽字节注入,可能存在于以gbk编码存储数据的sql数据库中。在实际站点中已经比较少见(常见于学校远古破站),而且修复方案很简单。在CTF中属于入门的sql注入题目。
宽字节注入原理:GBK 占用两字节
ASCII占用一字节
PHP中编码为GBK,函数执行添加的是ASCII编码(添加的符号为“\”),MYSQL默认字符集是GBK等宽字节字符集。
宽字节注入指的是mysql数据库在使用宽字节(GBK)编码时,会认为两个字符是一个汉字(前一个ascii码要大于128(比如%df),才到汉字的范围),而且当我们输入单引号时,mysql会调用转义函数,将单引号变为',其中\的十六进制是%5c,mysql的GBK编码,会认为%df%5c是一个宽字节,也就是’運 ...
WEB漏洞—SQL注入之二次,加解密,DNS等注入加解密加解密:网站在注入的时候,一些值被进行了加密,如果要进行正常的注入,那么也就需要用加密后的注入语句【这里必须是一样的加密方式,比如说如果是base64那么你也就要用base64的方式先将注入语句进行加密】,进行注入
二次注入
二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者即使对用户输入的恶意数据进行转义,当数据插入到数据库中时被处理的数据又被还原,Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。
也就是说一次攻击造成不了什么,但是两次配合起来就会早成注入漏洞。
用sqli-labs/Less24关来说明一下,就用小迪老师上课的操作:首先创建一个正常的用户,但是这个用户名是xxxx ‘ #的形式,然后密码随意,创建好之后,在去登陆,修改刚刚创建的用户的密码,改成123465789,这个时候神奇的事情发生了,修改的并不是xxxx ‘ #,而是原本存在于数据库中xxxx用户,那么为什么?看看源码!
可以看到如果是这样的写法,那 ...
WEB漏洞—查询方式及报错盲注当进行SQL注入时候,有很多注入会出现无回显的情况,其中不回显的原因可能是SQL语句查询方式的问题导致,这个时候我们需要用到相关的报错或者盲注进行后续操作。同时作为手工注入时,提前了解或预知其SQL语句大概写法也能更好的选择对应的注入语句
1234567891011121314151617181920212223242526272829常用sql语句select 查询数据在网站应用中进行数据显示查询效果例: select * from news wher id=$idinsert 插入数据在网站应用中进行用户注册添加等操作例:insert into news(id,url,text) values(2,‘x’,’$t’)delete 删除数据后台管理里面删除文章删除用户等操作例:delete from news where id=$idupdate 更新数据会员或后台中心数据同步或缓存等操作例:update user set pwd=’$p’ where id=2 and username=‘admin’order by 排列数据一般结合表名或列名进行数据 ...
WEB漏洞—SQL注入之oracle,MongoDB等注入
除了access数据库之外,其他的数据库注入的思路都是大差不差
常见数据库有:Access、mssql、mongoDB、postgresql、sqlite、oracle、sybase等
首先是上节课的补充
JSON在进行注入的时候的语法是如上图所示。
复习JSON12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091JSON 语法规则JSON 语法是 JavaScript 对象表示语法的子集。数据在名称/值对中数据由逗号分隔大括号 {} 保存对象中括号 [] 保存数组,数组可以包含多个对象JSON 名称/值对JSON 数据的书写格式是:key : value名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值 ...
WEB漏洞—SQL注入之类型及提交注入
在前期进行注入的时候,需要了解的三个东西,一个是【数据库类型】、【数据类型】、【提交方法】
一个是数据库不同的话,注入的方式也不同
数据类型的话分为:数字, 字符,搜索,JSON等
请求方法主要是:GET、POST、COOKIE、REQUEST、HTTP头等
如果网站的SQL语句是这样写的,那么你在做SQL注入的时候,就需要注意闭合单引号,因为网站这里采用的是字符型,当然有的时候就算是数字,也需要闭合单引号。
还有一种情况就是,搜索型,在MySQL中如果要搜索一个东西,那么具体的SQL语句就是像下面一样,在关键字前后都加上一个百分号,那么你就不仅要闭合单引号还需要闭合百分号,这样才可以做到注入
从上面两个例子,可以总结到,进行SQL注入的时候,需要对目标网站的数据库类型和类型还有提交方式进行一个收集,或者判断
123456789101112131415161718<?php$get=$_GET['g'];echo $get;$post=$_POST['p'];echo $post;$cooki ...
WEB漏洞必懂知识点01:注入漏洞
1)SQL注入(SQL Injection)
由于程序对SQL相关的一些敏感字符缺少过滤or转换,攻击者把SQL命令插入到用户提交的数据中,欺骗服务器执行恶意的SQL命令,非法获取到内部权限和数据。
风险:读取or篡改数据库的数据,获取服务器or管理员权限
类型:
a、数据型
b、字符型
其他注入方式
c、伪静态注入
d、GET & POST注入
e、Cookie注入
2)SQL盲注(SQL Blind Injection)
a.基于布尔的盲注[Boolean-Based]
SQL注入过程中,应用程序仅仅返回True页面和False页面,无法根据应用程序的返回页面得到数据库信息,但可通过构造逻辑条件(如比较大小)向服务端请求后的返回页面来分析判断我们所需要的数据库信息。
b.基于时间的盲注[Time-Based]
注入的SQL代码影响后台数据库的功能,但此时Web的前端页面始终显示True页面,知识页面返回的响应时间有差异,可以根据时间差来推断注入语句中的判断条件真假,继而获取数据库相关的信息。
3)OS命令注入
OS Command Inj ...










