🍬 博主介绍👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!
目录
前言
一、访问web网址
二、ssh远程登录
三、加固网站源代码
前言
靶机地址解释: 第一行:目标机器 WEB 服务地址 第二行:目标机器 SSH 地址以及端口 第三行:Check 服务访问地址
修复方法:
- SSH 连接上目标机器,用户 ctf,密码 123456。
- 对目标机器上的服务进行加固。
- 访问 Check 服务的 /check进行 check。
- 若返回 True,则访问 /flag 可获得 /flag。
- 每次 check 后目标机器会重置。
一、访问web网址
Your flag: flag{c2a05bc6-e9fa-42df-a85f-caef91274706}
发现一个登录页面,像一般出现登录框的,我们可以尝试sql注入和万能密码以及弱口令进行登录尝试。
我们这里利用sql注入万能密码,成功登录进来了,这里的加固题目,就是让我们加固sql,防止sql注入登录进来。
'OR'1'='1
二、ssh远程登录
成功利用kali进行远程ssh登录
┌──(root💀kali)-[~/桌面]
└─# ssh ctf@761c01af-d64d-4dc4-9be2-e7c7859386fb.node5.buuoj.cn -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.
ctf@761c01af-d64d-4dc4-9be2-e7c7859386fb.node5.buuoj.cn's password:
Linux web2 4.19.221-0419221-generic #202112141049 SMP Tue Dec 14 11:54:51 UTC 2021 x86_64The 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
,查看网站源代码
三、加固网站源代码
网站的源代码,有危害主要是在下面的php代码中
//SQL 注入攻击:代码中直接使用用户输入的用户名和密码拼接成 SQL 查询语句,这会导致 SQL 注入漏洞。攻击者可以通过在输入中插入恶意的 SQL 代码来绕过认证,甚至获取敏感数据。例如,攻击者可以输入 ' OR 1=1; -- 作为密码,这会使查询条件始终为真,从而实现万能密码登录。
<?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 "用户名或密码错误";}
}
?>
php代码修改成如下代码:
在修改后的代码中,使用了参数化查询来获取用户的输入。首先,使用
prepare()
方法准备了一个带有占位符的 SQL 查询语句。然后,使用bind_param()
方法将用户输入的变量绑定到查询语句的占位符上,确保了变量值不会被解释为 SQL 代码。最后,使用execute()
方法执行查询。
<?php
error_reporting(0);
include 'dbConnect.php';$username = $_GET['username'];
$password = $_GET['password'];if (isset($username) && isset($password)) {// 使用参数化查询来防止 SQL 注入$sql = "SELECT * FROM users WHERE username = ? AND password = ?";$stmt = $mysqli->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 进行登录,发现登录不成功了
然后先访问这个目录,进行靶场重置
然后再进行访问/flag ,就可以看到flag值了