热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

注入测试两则

碰到两个比较特殊的注入

碰到越来越多的注入,有些sqlmap跑不出来,只能进行手工,而手工也会遇到各种各样的情况,碰到两个比较特殊的注入,这里简单的记录一下。

0x01 mysql注入突破php的pdo(order by字段)


0x001 背景

遇到个注入点

传入单引号

出现报错

得到信息如下,如果是空,是正常请求,如果加单引号,就会报错,根据语句,可能是

    select*from table order by x desc limit 0,10


    0x002 遇见PDO

    看到是PDOException,所以后面的代码注释不了,为什么注释不了,下面看代码
    传入'%23或者'--+


    后面的语句没有被注释,这就是pdo的问题

    0x003 尝试突破

    但是,是不是没有办法了,并不是,继续往下看,这里单引号无法进行判断,随便输个数字
    这里参数传入1,报错如下

    这个报错感觉很熟悉
    进入Mysql

    这里是因为test111这个表字段没有11个,所以会报错
    但是因为这里格式为g.xx,想到了别名
    猜测语句可能如下

      select * from(selectfrom test111)g order by g.1 desc limit 0,

      什么情况下这里可以正常输出,当然是g.xx存在的时候
      传入g.id

        select * from(selectfrom test111)g order by g.id  desc limit 0,3

        来到真实环境,这里也盲猜id

        成了!

        和之前正常的响应包时间截然不同(这里的sleep会根据数据库里的条目进行叠加,所以慎用,否则就会跑崩数据库)

        0x004 成功注入

        接下来就是去注出数据
        直接给语句

          select * from(select* from test111)g order by g.id and if(1=1,sleep(0.1),2) desc limit 0,3

          表里总共9条数据

          真实环境


          0x02 mysql奇怪的注入(拼接表名后缀、过滤select、where)


          0x001 背景

          两个参数,A参数是数字,id的值,不存在注入,B参数是表名的后半,存在sql语句拼接
          一个cms的注入,两个例子,第一个很简单就出来了,第二个遇到了点困难

          0x002 第一个例子的注入
          抛出第一个无过滤的注入点,直接给payload

            product+join+(select+updatexml(1,concat(0x23,user()),1))b+where+id='1'--+

            表名为test_product,所以有product这个值


            0x003 常规思路对抗第二个例子注入

            使用刚刚第一个例子成功过的payload在第二个注入点进行尝试

            有过滤,select、where过滤掉了

            语句猜测为

              select * from test_[可控] where id = 'x'

              使用正常的报错语句也不行

                AND UPDATEXML(1,CONCAT('~',(SELECT DATABASE()),'~'),3)

                本地试了,必须前面接where id = 'x'字段,这里不满足


                0x004 误打误撞出数据

                后续在尝试的时候,出了用户名与数据库

                出库名,可以随意输入一个不存在的表名,库名就出来了,原因在于这里是拼接在表名的,所以会查询表名,当表名不存在,就会报数据库的错误,库名就出来了,cxxxxxxx为库名

                也有另外的办法,如之前的文章《sql注入杂谈》中提到过的

                使用数据库中含有的字段进行报错数据库名、表名

                出用户名

                这里是误打误撞弄出来的,id这个表实际不存在的,报的是没有权限的错

                尝试了很久,过滤的绕过,注释符,双写等等,都不行


                0x005 继续深入

                进入正题,误打误撞不是我们的目的,在思考,如果想要直接去注入出数据,有没有办法

                可能有人会说注释后面where条件外加自己的where不就行了,两个原因直接限制了

                1.where会被过滤

                2.sql语句会出现update


                这种情况没有遇到过,初步判断是"变形金刚",就是俺也不知道这咋回事


                后续自己尝试了很久,也是对sql语句的不熟悉导致的

                最后请教了董神,董神nb!

                对于select语句因为加注释符变成update,解释是

                给出的payload:

                  news join information_schema.tables on id=if(ascii(substr(user(),1,1))-114,0,exp(710)) -- #

                  news是表名后缀

                  使用布尔进行注入,实际情况下exp(710)改成updatexml()、extractvalue()也是可以进行报错注入的

                  这里最重要的一个知识点就是join on中的on

                  利用这一点,就可以进行注入

                  本地尝试

                  user()的第一位为r,ascii码为114



                  这里information_schema.tables也可以更换为mysql.user,mysql默认存在的都可以,但是前提是用户有查询权限


                  后面问了红哥,红哥给出的payload也和这个一样,红哥也nb!

                  唯一不同的是没有注释符,本地尝试也是可以的:

                  true

                  false

                  0x03 总结:

                  1.对于注入,如果能猜解出原来的语句,在本地进行执行,会对成功注入有很大的帮助。

                  2.注入可控不仅仅局限于查询的条件字段,也出现在任何有可能拼接的地方,比如这里的表名字段。

                  3.当常规思路无法满足需要的时候,需要去了解一些小众函数与技巧,比如这里的join on,且on和where可以互相替换,就完美避开了where的过滤。

                  4.站在开发者的角度去思考问题,问题有时会很容易想通,比如这里的select、update的"变形金刚"问题。


                  由于笔者知识及水平有限,文中错漏之处在所难免,欢迎交流。



                  推荐阅读
                  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
                  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
                  • 本文详细介绍如何在忘记MySQL服务器密码的情况下进行密码重置,包括具体的步骤和注意事项。 ... [详细]
                  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
                  • PHP 5.5.31 和 PHP 5.6.17 安全更新发布
                    PHP 5.5.31 和 PHP 5.6.17 已正式发布,主要包含多个安全修复。强烈建议所有用户尽快升级至最新版本以确保系统安全。 ... [详细]
                  • 包含phppdoerrorcode的词条 ... [详细]
                  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
                  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
                    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
                  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
                  • 如何撰写适应变化的高效代码:策略与实践
                    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
                  • 本文作为探讨PHP依赖注入容器系列文章的开篇,将首先通过具体示例详细阐述依赖注入的基本概念及其重要性,为后续深入解析容器的实现奠定基础。 ... [详细]
                  • Docker 环境下 MySQL 双主同步配置指南
                    本文介绍了如何在 Docker 环境中配置 MySQL 的双主同步,包括目录结构的创建、配置文件的编写、容器的创建与设置以及最终的验证步骤。 ... [详细]
                  • 微服务优雅上下线的最佳实践
                    本文介绍了微服务上下线的正确姿势,避免使用 kill -9 等粗暴手段,确保服务的稳定性和可靠性。 ... [详细]
                  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
                  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
                  author-avatar
                  司徒琪瑶_186
                  这个家伙很懒,什么也没留下!
                  PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
                  Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有