【BUUCTF 加固题】Ezsql 速通

 博主介绍

‍ 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】
点赞➕评论➕收藏 == 养成习惯(一键三连)
欢迎关注一起学习一起讨论⭐️一起进步文末有彩蛋
作者水平有限,欢迎各位大佬指点,相互学习进步!


目录

前言

一、访问web网址

二、ssh远程登录

三、加固网站源代码


前言

靶机地址解释: 第一行:目标机器 WEB 服务地址 第二行:目标机器 SSH 地址以及端口 第三行:Check 服务访问地址

修复方法:

  1. SSH 连接上目标机器,用户 ctf,密码 123456。
  2. 对目标机器上的服务进行加固。
  3. 访问 Check 服务的 /check进行 check。
  4. 若返回 True,则访问 /flag 可获得 /flag。
  5. 每次 check 后目标机器会重置。

一、访问web网址

Your flag: flag{c2a05bc6-e9fa-42df-a85f-caef91274706}

发现一个登录页面,像一般出现登录框的,我们可以尝试sql注入和万能密码以及弱口令进行登录尝试。

【BUUCTF 加固题】Ezsql 速通_第1张图片

我们这里利用sql注入万能密码,成功登录进来了,这里的加固题目,就是让我们加固sql,防止sql注入登录进来。

'OR'1'='1

【BUUCTF 加固题】Ezsql 速通_第2张图片

二、ssh远程登录

成功利用kali进行远程ssh登录

┌──(rootkali)-[~/桌面]
└─# ssh [email protected] -p 27133
The authenticity of host '[761c01af-d64d-4dc4-9be2-e7c7859386fb.node5.buuoj.cn]:27133 ([117.21.200.176]:27133)' can't be established.
ECDSA key fingerprint is SHA256:IcIkotEo1ncKwQgZHgbL2vJ7nio6zTWCWWxQhRYCXiU.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[761c01af-d64d-4dc4-9be2-e7c7859386fb.node5.buuoj.cn]:27133,[117.21.200.176]:27133' (ECDSA) to the list of known hosts.
[email protected]'s password: 
Linux web2 4.19.221-0419221-generic #202112141049 SMP Tue Dec 14 11:54:51 UTC 2021 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
$ id
uid=1000(ctf) gid=1000(ctf) groups=1000(ctf)
$ 

/var/www/html目录下,查看index.php,查看网站源代码

【BUUCTF 加固题】Ezsql 速通_第3张图片

三、加固网站源代码

网站的源代码,有危害主要是在下面的php代码中

//SQL 注入攻击:代码中直接使用用户输入的用户名和密码拼接成 SQL 查询语句,这会导致 SQL 注入漏洞。攻击者可以通过在输入中插入恶意的 SQL 代码来绕过认证,甚至获取敏感数据。例如,攻击者可以输入 ' OR 1=1; -- 作为密码,这会使查询条件始终为真,从而实现万能密码登录。

query($sql);
    if (!$result)
        die(mysqli_error($mysqli));
    $data = $result->fetch_all(); // 从结果集中获取所有数据
    if (!empty($data)) {
        echo '登录成功!';
    } else {
        echo "用户名或密码错误";
    }
}
?>




php代码修改成如下代码:

在修改后的代码中,使用了参数化查询来获取用户的输入。首先,使用 prepare() 方法准备了一个带有占位符的 SQL 查询语句。然后,使用 bind_param() 方法将用户输入的变量绑定到查询语句的占位符上,确保了变量值不会被解释为 SQL 代码。最后,使用execute()方法执行查询。

prepare($sql);
    $stmt->bind_param("ss", $username, $password);
    $stmt->execute();

    $result = $stmt->get_result();

    if (!$result) {
        die($mysqli->error);
    }

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

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

    $stmt->close();
}
?>


再尝试利用 'OR'1'='1 进行登录,发现登录不成功了

然后先访问这个目录,进行靶场重置

【BUUCTF 加固题】Ezsql 速通_第4张图片

然后再进行访问/flag ,就可以看到flag值了

【BUUCTF 加固题】Ezsql 速通_第5张图片

你可能感兴趣的:(web,CTF夺旗赛,开发语言,前端,javascript,web安全,html,php,CTF)