freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

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

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

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

FreeBuf+小程序

FreeBuf+小程序

Vulnhub靶机:M87详细攻略
2023-10-13 09:28:38
  • 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安全 # 系统安全
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录