美文网首页
安恒 2018-12 | pwn wp

安恒 2018-12 | pwn wp

作者: fantasy_learner | 来源:发表于2018-12-25 15:49 被阅读0次

    messb0x

    • 32位elf | nx
    • 漏洞: 栈溢出
    • 利用过程 :
      - 利用 puts 获得 puts的加载地址 , 并计算相关libc地址
      - 重复利用栈溢出 ,执行 system("/bin/sh") getshell

    house of orange

    • 64位 elf | stack canary , nx
    • 参考官方wp和别的大佬的博客,学习了一波 house of orange ,但感觉这里的 house of orange 定义 和 ctf-wiki上的house of orange 定义有不同。。。
    • 官方wp中的 考察点 :
      • 1)由于程序编写者在getname函数中没有仔细检查好变量所占内存空间大小,导致对格式化符检测不完整,从而会后续堆溢出创造了条件。
      • 2)题目难点有
        • 1、在格式化漏洞能正确想到修改size变量
        • 2、在the house of house 的使用中能利用爆破得到_IO_list_all的地址。
        • 3、成功获得控制流后能够想到向栈中构造rop,而非常规的直接执行system函数
    • 利用过程 :
        1. 利用 格式化字符串 修改输入长度 | 造成堆溢出
          • 1.1 同时 因为输入未被强制加上 \x00 截断 ,在name 填充满时,可以leak出一个栈地址
        1. FSOP 调用 指定函数
        • 2.1 在堆中输入 fake_io_file 和 fake_vtable 表
        • 2.2 利用 堆溢出 使用 unsorted bin attack 修改 _IO_list_all 为 &unsorted_bin - 0x10
        • 2.3 调用 new , 触发 malloc_printerr , 然后触发 _IO_OVERFLOW (fp, EOF) | _IO_OVERFLOW 和 fp 均为伪造值 , 从而进入 edit 函数
        1. getshell
        • 3.1 ROP leak libc 并且 改写 atoi@got 为 system
        • 3.2 找到一处 atoi( input ) , 从而执行system("/bin/sh\x00") , getshell.本题目中找到一处 getnum函数调用即可.
    • 本题中的 house of orange 注意点:
        1. unsorted bin attack , 覆盖bk的值为 target_addr - 0x10
        1. fsop 伪造表 注意点
        • 2.1 伪造 _IO_FILE 的 chunk 位置应该在 smallbin[4] 的链表表头
        • 2.2 _IO_FILE 伪造 注意点:
            1. fp->_mode <= 0
            1. fp->_IO_write_ptr > fp->_IO_write_base
            1. vtable 指向 fake_vtable
            1. 1 . 2 两条判断 满足后调用 _IO_OVERFLOW (fp, EOF) , _IO_OVERFLOW 函数指针从 vtable中查找 , fp 为伪造表的指针
            1. 本题中注意点,伪造是从 _io_file 结构体的 0x10 处 开始伪造的
        • 2.3 vtable | _IO_OVERFLOW 是 第四个函数指针
        • 2.4 两个伪造表的需求 可以只用一张 伪造表来完成 ,但是需要调整好 vtable 对应的偏移
        1. rop 的 注意点
          • 仅有 0x100长度 的输入, 所以 多次使用 csu_init 调用read , 从而直接 getshell 不可取

    exp

    相关文章

      网友评论

          本文标题:安恒 2018-12 | pwn wp

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