CTF网络安全大赛web题目:just_sqli

这道题目是bugku的web题目
题目的 描  述: KosenCTF{}

原文链接: CTF网络安全大赛web题目:just_sqli - 红客网-网络安全与渗透技术

题目Web源代码:

<?php

$user = NULL;
$is_admin = 0;

if (isset($_GET["source"])) {
    highlight_file(__FILE__);
    exit;
}

if (isset($_POST["username"]) && isset($_POST["password"])) {
    $username = $_POST["username"];
    $password = $_POST["password"];

    $db = new PDO("sqlite:../database.db");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    try {
        $db->exec("CREATE TABLE IF NOT EXISTS users (username TEXT UNIQUE, password TEXT, is_admin BOOL);");

        $q = "username, is_admin FROM users WHERE username = '$username' AND password = '$password'";
        if (preg_match("/SELECT/i", $q)) {
            throw new Exception("only select is a forbidden word");
        }

        $rows = $db->query("SELECT " . $q, PDO::FETCH_ASSOC);
        foreach ($rows as $row) {
            $user = $row["username"];
            $is_admin = $row["is_admin"];
        }
    }
    catch (Exception $e) {
        exit("EXCEPTION!");
    }


}

?>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Just SQLi</title>
</head>
<body>
    <h1>Just SQLi</h1>    
    <div><a href="?source=1">view source</a>

    <?php if ($user) { ?>
    <div>Nice Login <?= $user ?></div>
        <?php if ($is_admin) { ?>
        <div>And Nice to Get the Admin Permission!</div>
        <div> <?= include("../flag.php"); ?></div>
        <?php } ?>
    <?php } ?>

    <form action="" method="POST">
        <div>username: <input type="text" name="username" required></div>
        <div>password: <input type="text" name="password" required></div>

        <div>
            <input type="submit" value="Login">
        </div>
    </form>

</body>
</html>

从给定的PHP代码中,有几个关键的安全问题可以被利用来进行SQL注入。但首先,需要注意的是代码中尝试使用preg_match来防止"SELECT"关键词的使用,然而这种尝试是无效的,因为它并没有在构造完整的SQL查询时应用此检查。

下面是一个可能的SQL注入攻击步骤,来绕过身份验证并获取管理员权限:

 原文链接: CTF网络安全大赛web题目:just_sqli - 红客网-网络安全与渗透技术

  1. 用户名注入:由于用户名和密码直接插入到SQL查询中,我们可以尝试在用户名字段中注入SQL代码。但是,由于preg_match检查,我们不能直接包含"SELECT"。但我们可以尝试其他方法,如注释掉原查询的剩余部分。
  2. 构造注入语句:在用户名字段中,我们可以尝试使用SQL注释(-- 在SQLite中是有效的)来截断原始查询的其余部分,并附加我们自己的查询条件。由于代码尝试直接构造一个片段并添加到SELECT查询中,我们可以利用这一点。
  3. 绕过preg_match:由于preg_match只检查$q变量(这只是一个片段,不是完整的SQL查询),我们可以构造一个不包含"SELECT"的片段,但在实际执行时,它将成为完整的SELECT查询的一部分。

下面是一个可能的注入攻击示例(请注意,这只是一个示例,实际情况可能有所不同):

在用户名字段中输入:

' OR '1'='1' --

在密码字段中输入任意值(例如"password123")。

提交表单后,生成的SQL查询将是:

SELECT username, is_admin FROM users WHERE username = '' OR '1'='1' --' AND password = 'password123'

由于--是SQL注释,所以查询的剩余部分(包括密码验证部分)将被忽略。这样,查询将返回表中的所有用户,无论他们的密码是什么。

然而,为了获取管理员权限,我们可能还需要进一步利用其他漏洞或尝试其他注入方法,因为此查询仅返回用户名和is_admin字段,而不直接修改它们。

但请注意,这种攻击是违法的,并且只应在法律允许和道德接受的环境(如安全培训或测试环境)中进行。在实际环境中尝试此类攻击可能导致法律责任和其他后果。

 原文链接: CTF网络安全大赛web题目:just_sqli - 红客网-网络安全与渗透技术

我们开始对这个题目进行sql注入吧
一开始我们先盲注,构造查询语句

admin'or 1=1 -- 

发现行不通
接着我们开始联合查询

admin'union select 1,2#

发现还是不行
看了下代码, preg_match("/SELECT/i", $q这个对select进行了处理。
接着我们开始下一个方法就是用values进行替换select就行了

admin'union values('password',1) -- 

屏幕截图 2024-05-15 135422.png


也是成功拿到答案

红客网(blog.hongkewang.cn)

 原文链接:

CTF网络安全大赛web题目:just_sqli - 红客网-网络安全与渗透技术

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CTF(Capture The Flag)网络安全大赛题库是一个用于培训和测试网络安全技能的平台,它包含了各种类型的题目,如逆向工程(Reverse)、Web安全、密码学(Crypto)、杂项(Misc)等。在这个题库中,你可以找到多种类型的题目,比如:【RE】:Reverse_Checkin、SimplePE、EzGame;【Web】:f12、ezrunner;【Crypto】:MD5、password、看我回旋踢、摩丝;【Misc】:爆爆爆爆、凯撒大帝的三个秘密、你才是职业选手等。其中,每个题目都有不同的难度和挑战,可以帮助参赛者提升网络安全技能和解决问题的能力。如果你想进一步了解这些题目,可以访问网络信息安全攻防学习平台hackinglab.cn,其中包含了更多的题目和学习资源。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [长春理工大学第六届CTF网络攻防大赛题解(文末有题目下载链接)](https://blog.csdn.net/m0_64659074/article/details/123853255)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [网络信息安全攻防学习平台CTF练习-基础篇](https://blog.csdn.net/weixin_49349476/article/details/130601581)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值