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 ...
WEB漏洞—SQL注入之简要SQL注入
SQL注入原理:Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。
SQL注入产生的原理条件:
第一个是用户能够控制输入
第二个是原本程序要执行的代码,拼接了用户输入的数据然后进行执行
可控变量,带入数据库查询,变量未存在过滤或过滤不严谨
如题,以上地址可能存在注入的有哪几个
第一个就是常规的地址,可控变量,所以可能存在
第二个是存在可控变量
第三个是存在多个参数
第四个其实也有可能存在注入,因为如果是POST注入的话,那么就不会在URL地址栏显示,而是在数据包中进行体现
题目:参数X有注入,以下哪个注入测试正确?
第一个不正确,原因没有将x带入,因为a选项判断的是y的注入点,而不是x
第二个正确,原因跟上题不一样,这里将x带入了,判断的是y和x的注入点
第三个正确,和第二题一样,只不过是换了一个表达形式,同样也是判断y和x的注入点
第四个不正确,原因题目是要求x的注入点,而这里连x的参数都没有
靶场sqli-labs安装 ...
WEB漏洞—SQL注入之MySQL注入首先要知道的是,root用户和普通用户看到的数据是不一样,如果SQL注入成功之后得到的是root用户的权限那么就可以实现跨库查询,也就是如果当前是在A数据库,可以跨库访问B数据库的内容。
在进行跨库注入的时候,如果查询到的表名信息是admin,那么这个时候就需要注意了因为大多数数据库中都有admin这个表,那么进行注入的时候就需要加上一个条件,这个条件就是指定目标数据库的admin表,例如:
http://219.153.49.228:48354/new_list.php?id=-1 union select 1,group_concat(column_name),3,4 from Information_schema.columns where table_name=’StormGroup_member’ and table_schema=目标网站【这里用的是墨者学院的那个注入路径,这里主要讲的是一个思路】
那么查询列名要加条件,查询列名下的数据自然也需要加上条件,同样用墨者学院的例子举例:
http://124.70.64. ...