前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQLMAP-tamper的寻迹与发现

SQLMAP-tamper的寻迹与发现

作者头像
h0cksr
发布2023-05-17 11:15:09
3180
发布2023-05-17 11:15:09
举报
文章被收录于专栏:h0cksr的小屋h0cksr的小屋

SQLMAP-tamper的寻迹与发现

对tamper的各种绕过可以参考这个文章: sqlmap的tamper详解

对sqlmap框架目录的学习可以参考: SqlMap文件结构介绍

几个常用的简单记录

binary参数指定字符串可以解决字符串比较忽略大小写的问题

COALESCE函数可以说是新的ifwhen...case的替代语句了(感觉最大的收获就是这个了…)

一个新的注释/*!30963AND 2>1*/,里面的and 2>1语句正常生效,详细见modsecurityversioned.py

字段名可以使用字符的方式

空格绕过方法

注意:/*!5位数字的绕过方式是需要注意的,取00000的时候就是里面的语句正常发挥作用,取99999的时候就是忽略语句里面的内容直接拼接后面的语句执行,大概就是取的数值比较小的时候里面的语句正常发挥作用,较大的时候就会忽略里面的数据, 这个临界值的大小与版本有关,例如使用mysql5.7.26的时候对应的数值就是50726,数值<=50726的时候就是正常执行里面的语句,但是到了50727的时候里面的语句就当做注释失效了

有点意思但感觉没啥用的trick

get_lock函数可以通过在一个会话(记为session1)执行get_lock('lock1',10)申请一个名为lock1的锁,第二个参数表示申请这个锁的最大申请等待时间, 这个锁在当前的会话有用, 不能被其他的会话申请使用, 所以当lock1这个锁被另一个会话(记为session2)申请使用, 所以我们可以通过条件竞争的方式,

  1. 先开启一个(或多个)线程疯狂申请一个名为h0cksr的锁
  2. 然后我们在注入的过程中在满足一定条件的时候就可以通过执行get_lock('h0cksr',10)申请名为h0cksr的锁, 并且最大申请时间为10s,因为这个锁已经被我们在之前开启的线程疯狂申请了,所以这里会因为申请失败而延时10s,从而产生sleep(10)的效果 实现难点: 如果想要真的实现延时,那么就需要保持一开始的线程始终保持占用h0cksr这个锁长达10s,否则这个锁一旦释放那么注入的时候就不会继续延时,我在测试之后发现执行一千万次的get_lock('h0cksr',10)也只需要0.78秒,然而我们一般是没有那么长的执行数据的,否则直接通过多次复制之后注入执行也和benchmark一样了 所以很鸡肋….除非可以获得一个能长期维持的会话才有实现的可能,而且在mysql8.x中get_lock不能再使用

NULLIF(expr1, expr2)比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1 ,例如SELECT NULLIF(25, 25);

IFNULL(v1,v2)如果 v1 的值不为 NULL,则返回 v1,否则返回 v2,例如SELECT IFNULL(null,’Hello Word’)

select 2-.1UNION ALL SELECT 2;可以在union的前面加个.1表示2-0.1小数从而union前面不需要空格

下面还有一堆相关的畸形语句

select column_name from table_name的后面可以添加一个垃圾字符串数据,并不会语句的执行,但是不能有空格间隔,也不能有单双引号,以及where等其他关键字语句,只能是一个垃圾字符串

tamper中见到的一些平时常用的替代参考

between.py => between替代>

binary.py => binary避免字母比对大小写忽略

这个很有用,使用binary之后就可以避免字符串比大小的时候忽略大小写的毛病了

commalesslimit.py => limit不使用逗号

commalessmid.py => 逗号过滤的字母切割

greatest.py => greatest替代>

halfversionedmorekeywords.py => /*!0

hex2char.py => char函数获取字符串

ifnull2casewhenisnull.py => ifnull的替代(很鸡肋)

ifnull => 如果 v1 的值不为 NULL,则返回 v1,否则返回 v2

感觉这个有点鸡肋,一般过滤了if的话这个自然就不能用了

least.py => least替代>

misunion.py => union前面的奇奇怪怪

modsecurityversioned.py => /*!30963版本注释

除了/*!30963和下面的/*!00000之外

modsecurityzeroversioned.py => /*!00000版本注释

sleep2getlock.py => get_lock替代sleep函数

space2mssqlblank.py => 一些空格绕过的替代字符

这个代码中有说明是用于mssql的,但是对mysql也是很有参考性的

versionedmorekeywords.py => /*!sqlcommand*/注释

畸形语句的构造

下面的语句来自https://media.blackhat.com/us-13/US-13-Salgado-SQLi-Optimization-and-Obfuscation-Techniques-Slides.pdf

但是感觉好像并没有太多的用处,这些语句主要就是可以在指定select的字段名的时候将要搜索的字段名放在一些让人看着很奇怪的地方,并且可以使用在比如指定字段某个表的字段user.host或者指定搜索的表的时候的mysq.user,可以在指定字段的表名与字段名之间,或者在库名和表名之间,参入一些指定

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-9-20 2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQLMAP-tamper的寻迹与发现
    • 几个常用的简单记录
      • 有点意思但感觉没啥用的trick
        • tamper中见到的一些平时常用的替代参考
          • between.py => between替代>
          • binary.py => binary避免字母比对大小写忽略
          • commalesslimit.py => limit不使用逗号
          • commalessmid.py => 逗号过滤的字母切割
          • greatest.py => greatest替代>
          • halfversionedmorekeywords.py => /*!0
          • hex2char.py => char函数获取字符串
          • ifnull2casewhenisnull.py => ifnull的替代(很鸡肋)
          • least.py => least替代>
          • misunion.py => union前面的奇奇怪怪
          • modsecurityversioned.py => /*!30963版本注释
          • modsecurityzeroversioned.py => /*!00000版本注释
          • sleep2getlock.py => get_lock替代sleep函数
          • space2mssqlblank.py => 一些空格绕过的替代字符
          • versionedmorekeywords.py => /*!sqlcommand*/注释
        • 畸形语句的构造
        相关产品与服务
        云数据库 MySQL
        腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档