BUUCTF-加固题-ezsql

之前一个网友问了一道加固题,我寻思我没做过这类题,就来做做试试(=。=)

看一下首页

是一个表单,结合题目名称ezsql,想必是存在sql注入漏洞。先测试下,输入万能密码绕过

这道题应该是让我们加固此处来避免被万能密码绕过。

下面先连一下ssh,kali或者Xshell都行

xshell连接:

kali连接:

连接上切换到网站目录,看一下内容:

使用sftp工具拿出index.php看一下:

php代码部分如下:

<?php
error_reporting(0);
include 'dbConnect.php';
$username = $_GET['username'];
$password = $_GET['password'];
if (isset($_GET['username']) && isset($_GET['password'])) {
    $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
    $result = $mysqli->query($sql);
    if (!$result)
        die(mysqli_error($mysqli));
    $data = $result->fetch_all(); // 从结果集中获取所有数据
    if (!empty($data)) {
        echo '登录成功!';
    } else {
        echo "用户名或密码错误";
    }
}
?>

很明显没有对表单输入的数据做任何处理,我们加一个正则过滤一下用户输入的特殊字符即可:

!preg_match("/  \~|\`|\@|\#|\\$|\%|\^|\&|\*|\)|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\  /i",$x)

修改后代码的php部分:

<?php
error_reporting(0);
include 'dbConnect.php';
$username = $_GET['username'];
$password = $_GET['password'];



if (isset($_GET['username']) && isset($_GET['password'])) {
    $r="/  \~|\`|\@|\#|\\$|\%|\^|\&|\*|\)|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\  /i";
    if(!preg_match($r,$username) && !preg_match($r,$password))
    {
        $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
        $result = $mysqli->query($sql);

        if (!$result)
            die(mysqli_error($mysqli));

        $data = $result->fetch_all(); // 从结果集中获取所有数据

        if (!empty($data)) {
            echo '登录成功!';
        } else {
            echo "用户名或密码错误";
        }
    }
    else{echo '输入不正确!';}


}
?>

主要修改就是在第8行对用户名和密码进行了正则过滤,过滤掉了特殊字符。

我们把原来的index.php删除,传上我们加固完的index.php

再回去看看是否成功过滤

过滤成功!check一下:

发现这样check不过,于是跟热(zui)心(kui)网(huo)友(shou)交流了一下,他说他用addslashes()处理了一下就check过拿到flag了。那么我们再改一下代码,不过上面的代码可以看到也是可以防止万能密码绕过登录的

<?php
error_reporting(0);
include 'dbConnect.php';
$username = $_GET['username'];
$password = $_GET['password'];
if (isset($_GET['username']) && isset($_GET['password'])) {
    $username = addslashes($username);
    $password = addslashes($password);
        $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
        $result = $mysqli->query($sql);

        if (!$result)
            die(mysqli_error($mysqli));

        $data = $result->fetch_all(); // 从结果集中获取所有数据

        if (!empty($data)) {
            echo '登录成功!';
        } else {
            echo "用户名或密码错误";
        }
}
?>

7、8行使用了addslashes()函数对输入内容进行了处理,check,然后访问flag

简单的sql注入防护,大佬们看个热闹就好,如有问题欢迎来指点菜鸡(=。=)

    暂无评论

    发送评论 编辑评论

    
    				
    |´・ω・)ノ
    ヾ(≧∇≦*)ゝ
    (☆ω☆)
    (╯‵□′)╯︵┴─┴
     ̄﹃ ̄
    (/ω\)
    ∠( ᐛ 」∠)_
    (๑•̀ㅁ•́ฅ)
    →_→
    ୧(๑•̀⌄•́๑)૭
    ٩(ˊᗜˋ*)و
    (ノ°ο°)ノ
    (´இ皿இ`)
    ⌇●﹏●⌇
    (ฅ´ω`ฅ)
    (╯°A°)╯︵○○○
    φ( ̄∇ ̄o)
    ヾ(´・ ・`。)ノ"
    ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
    (ó﹏ò。)
    Σ(っ °Д °;)っ
    ( ,,´・ω・)ノ"(´っω・`。)
    ╮(╯▽╰)╭
    o(*////▽////*)q
    >﹏<
    ( ๑´•ω•) "(ㆆᴗㆆ)
    😂
    😀
    😅
    😊
    🙂
    🙃
    😌
    😍
    😘
    😜
    😝
    😏
    😒
    🙄
    😳
    😡
    😔
    😫
    😱
    😭
    💩
    👻
    🙌
    🖕
    👍
    👫
    👬
    👭
    🌚
    🌝
    🙈
    💊
    😶
    🙏
    🍦
    🍉
    😣
    Source: github.com/k4yt3x/flowerhd
    颜文字
    Emoji
    小恐龙
    花!
    上一篇
    下一篇