freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Vulnhub靶机:M87详细攻略
Jpkieee 2023-10-13 09:28:38 48383
  • M87靶机IP:192.168.52.135

  • Kali攻击机IP:192.168.52.129

  • 首先使用nmap找到靶机:

nmap -sn -n -PE -T4 192.168.52.0/24

  • -sn 使用ping扫描但不做端口扫描
  • -n 不进行域名解析
  • -PE 使用ping扫描中的Ping-Echo方式
  • -T4 使用时间等级4:假设自己网络良好,加快扫描速度

找到了!192.168.52.146便是靶机IP;

但后续再次扫描发现目标靶机ip有动态变化变成了135;所以192.168.52.135才是靶机ip;

继续使用nmap扫描该ip的端口以及其他信息:

nmap -sV -A -p- -T4 192.168.52.135

  • -sV 扫描端口服务的版本信息
  • -A 使用操作系统检测、版本检测、脚本扫描、路由跟踪
  • -p- 扫描1-65336所有端口开放状态以及服务
  • -T4 加速扫描(偏佛系)

开放了22、80端口,另外还有一个9090端口是https的网站。

去看看80和9090是什么情况。

80http网页是一个登录入口;用gobuster爆破一下目录:

gobuster dir -u http://192.168.52.135/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 100 -k -e -x .txt,.html,.php

  • dir 使用网站目录扫描模式
  • -u 指定要扫描的URL
  • -w 指定用来扫描的路径爆破字典
  • -t 指定线程数
  • -k 跳过SSL验证
  • -e 输出完整的扫描路径
  • -x 指定要扫描的路径后缀,提高效率

扫描到了几个路径去看一下有没有东西:

/admin又一个登录入口

/assets好像只是一个样式文件夹

看完了,貌似没有什么东西能利用到。再用dirb扫描一下,直接dirb 192.168.52.135:

dirb 192.168.52.135

相比于gobuster发现多了一个backup路径,去看看:

又又是一个登录的页面,除此之外应该没什么东西了;去看看9090端口吧:

又又又是一个登录的页面,爆破一下这个目录

用gobuster同样的方法爆破发现报错,网上试了各种方法都不能解决。

那只能换一个网站目录爆破工具了,用dirb试下:

看了下这两个目录,并没有什么东西。

一共有4个登录页面。3个在80端口,1个在9090端口。

使用burpsuite抓包然后给sqlmap跑一下,跑不出东西。

看了下各网站的源码,也没有什么可疑的东西。使用burp做fuzz测试,参数猜解各网站有无价值信息或漏洞:

抓包,发给Intruder

添加payload位置

修改攻击模式为集束Bomb

在payload 1添加参数变量名

Payload 2添加参数可能的值

资源池设置最大请求数为50,跟线程的概念差不多:

直接start跑起来

跑完了我们来看下:

没有长度不一样的回应,说明回显的都是一样的没有成功出东西。

我们继续给下一个页面做参数猜解的fuzz测试,前面几步都一样的我们直接放爆破结果:

发现存在长度不一样的回应,看看是什么参数名与值(payload):

我们发现参数id可以输入值,打开几个对比一下,看看id到底是干嘛的:

顶部回显了sql语言报错!说明参数id可能是sql注入的注入点!去浏览器网页上验证下:

报错了!验证id是sql注入的注入点!直接sql注入一波提取用户名和密码:

使用联合注入攻击拿到了username和password,整理成字典就是这样的:











这里使用到一个vim编辑器中查找替换的命令:

:%s/,/^M/g

  • %s   替换指定字符串

  • ,       要被替换的字符串,这里是逗号

  • ^M  要替换成的字符串,这里是vim里面的回车符

  • g      在当前文件全局使用

简单理解一下就是在文件里找”,”这个字符然后全部替换成回车符!

用户名密码都有了,现在去爆破一下吧!

经过测试,4个登录页面都无法爆破成功,可能缺失关键账户或密码。

查找资料后,发现可以利用sqlmap查看系统文件获取用户名:

sqlmap -r req.txt --file-read /etc/passwd

  • -r 指定请求数据包获取信息
  • --file-read 指定要查看目标机器上的文件路径
  • --batch  全自动交互,自动选择选项

回车直接开始获取靶机上的passwd文件,看看里面有没有多的用户名:

获取成功,倒数第三行表示文件存放在本地的路径;去查看一下并过滤出用户名:

发现有一个没见过的用户名,将它加入到username字典中!

charlotte

保存后去burp再次尝试爆破:

第一个登录页面:





第二个登录页面:




第三个登录页面:




前三个登录页面全部没有成功,还剩最后一个:

最后一个使用了Basic认证,Basic认证是HTTP 中非常简单的认证方式,只使用了Base64加密方式;因为简单,所以不是很安全,不过仍然非常常用。

我们把Basic加密字符串设为payload;爆破模式设置为Sniper:

payload类型设置为Custom Iterator(自定义迭代器),

position1设置加载username,position2设置为一个“:“字符,position3设置加载password;

设置好后在下方payload processing添加base64的编码加密方式:

设置好后直接start attack开始爆破!

发现存在状态码500的回复包,查看详细后网页回显内存缓冲区错误(memory buffer error):

无法正常的爆破出密码,可能是默认开启的url encode选项会把“=”编码导致的。关闭当前攻击窗口,去payload栏关掉url encode复选框:

关掉后再次尝试start attack;这一次就不一样了:

有一个长度507的说明这个账户和密码的组合是正确的账户和密码,其余的长度都是3705且状态码都是401(未经身份验证)。

去看看这个payload是哪个账密组合:

果然,账户是之前在passwd里找到的那个。使用这个账号密码去登录最后那个登录页面:

登录成功!进入到管理页面,且下方工具一栏有个终端,直接getshell。

用nc反弹shell到kali;Kali使用nc监听4444端口:

靶机网页终端使用nc连接到Kali并打开/bin/sh:

连接成功!然后使用python调用pty模块,打开交互式shell:

已经getshell了,接下来就是提权拿到root目录下的flag文件!先看下系统内核版本看看有没有相关漏洞:

uname -a

4.19版本;去searchsploit搜索一下:

能找到exp,保存下来查看发现需要目标机器上存在gcc,去看下有没有,不然搞半天最后发现是没有gcc那就尴尬了:

漂亮!还真没有。那这些exp都无法起到作用……

去看看sudo -l有没有能利用的:

好吧也没有,看看SUID文件有无可利用:

find / -perm -u=s 2>/dev/null

看看exim4的版本在不在漏洞范围内:

4.94不在漏洞范围里,再找找其他的漏洞吧;

看看getcap有没有可以利用的相关权限:

发现old这个东西有setuid权限,看看old到底是什么东西:

old只是一个2.7的python,但是它有setuid权限。这就好办了,先导入os模块;然后setuid为0,再然后直接os.system(“/bin/sh”)就能提权:

成功提权到root用户!flag:

整体来说还是比较简单的,难的就是在一些小知识点的了解;如果不会fuzz测试参数猜解的话根本做不出来;另外还有就是通过sql注入读取目标机器文件;以及Basic认证、Capabilities机制权限管理getcap列出、python拥有setuid权限时的提权方法:python -c 'import os;os.setuid(0);os.system("/bin/sh")'。

总结:

涉及到的知识点:

  1. 模糊测试(fuzz testing)是网络安全测试中的一种常见技术,使用随机或半随机数据生成器进行输入端口/协议的测试,其目标是检测系统或应用程序(这里是Web应用程序)对不正确或非预期输入的响应。这里使用的是fuzz测试中的参数猜解(parameter guessing)得到了一个sql注入的注入点。
  2. Basic认证是Web身份验证中使用最广泛的一种方法。其原理是客户端向服务器需要身份验证的资源发起请求,服务器将返回401状态码和WWW-Authenticate首部字段;客户端发送带有Authorization首部字段的新请求,在此字段中包含base64编码的username:password;通过验证后运行访问相应资源。
  3. Capability是一种细粒度权限控制的方法,可以允许进程/用户仅获取它们需要的特定权限,而不是完整的root权限。这里涉及到的capabilities权限是cap_setuid+ep;+e(Effective)是在执行的时候拥有的权限,+p(Permitted)是可执行文件或进程在运行的过程中拥有的权限。 Linux中相关的命令由setcap(设置文件capabilities)、getcap(查找文件capabilities)。


涉及到的相关命令:

nmap -sn -PE -n -T4 192.168.52.0/24 | grep -I for

只做靶机存活扫描,且过滤出靶机ip;

namp -sS -sV -A -p- 192.168.52.135

使用SYN扫描方式扫描目标的服务、版本、系统、路由信息;

gobuster dir -u http://192.168.52.135 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .html,.txt,.php -t 100 -k -e

使用gobuster利用字典爆破网站目录;

sqlmap -r req.txt --file-read /etc/passwd

使用sqlmap从注入点获取目标机器文件;

getcap -r / 2>/dev/null

从根目录开始查找有capabilities的权限文件;

python -c 'import os;os.setuid(0);os.system("/bin/sh")'

使用具有setuid权限的python提权。

# 渗透测试 # web安全 # 系统安全
本文为 Jpkieee 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
Jpkieee LV.1
重生之我是中专生但逆天改命入门网络安全年薪百万
  • 1 文章数
  • 0 关注者
文章目录