• MySQL注射绕过技巧(三)


    在测试一次注入的时候发现过滤了逗号 所以找到这个思路

    第一次遇到的时候是看key哥挖洞  遇到后就想记录下来

    正文

    过滤了逗号  利用join来逐步查询

    select*from(select 1)a join (select 2)b join (select 3)c;
    

      例如下图

    逐步查询user()

    user() @@basedir

    user() @@basedir version()

    也可以和mid函数组合使用

    mysql报错信息

    利用方法是使用数学运算函数在子查询中报错,比如exp函数(参考 EXP(X) ),  MySQL会把子查询的中间结果暴露出来。

    select exp(~(select*from(select user())a))
    

      

    可以看到子查询的结果出来了

    这样我们就得到了当前user()是root@localhost。

    exp(x)函数的作用:

    取常数e的x次方,其中,e是自然对数的底。

    ~x 是一个一元运算符,将x按位取补。

    这条查询会出错,是因为exp(x)的参数x过大,超过了数值范围。分解到子查询,就是:

    1. (select*from(select user())a) 得到字符串 root@localhost

    2. 表达式’root@localhost’被转换为0,按位取补之后得到一个非常的大数,它是MySQL中最大的无符号整数:

    3. exp无法计算e的18446744073709551615次方,最终报错,但是MySQL把前面 1) 中子查询的临时结果暴露出来了

    了解了MySQL的这个特点,其实我们就还可以精心构造其他的一元运算符,让MySQL查询在没有逗号的情况下报错

    比如:

    select !(select*from(select user())x)-~0;
    

      

    原因如下:

    select 1 – 18446744073709551615;
    

      

    这个例子是bigint超过数值范围,手法类似。

  • 相关阅读:
    bzoj3295
    bzoj1135
    [luoguP1328] 生活大爆炸版石头剪刀布(模拟)
    考后总结
    [luoguP1970] 花匠(DP)
    [POJ3463] Sightseeing(次短路 Heap + Dijkstra)
    [luoguP2885] [USACO07NOV]电话线Telephone Wire(DP + 贪心)
    [luoguP2709] 小B的询问(莫队)
    [luoguP1972] [SDOI2009]HH的项链(莫队 || 树状数组 || 主席树)
    [luoguP2617] Dynamic Ranking(树状数组 套 主席树 + 离散化)
  • 原文地址:https://www.cnblogs.com/wh4am1/p/6580868.html
Copyright © 2020-2023  润新知