Advertisement

蓝帽杯初赛作品集(第19届)

阅读量:

escape_shellcode

编写一个Shellcode脚本并启用内存保护模式(PIE),该脚本仅能执行读取与写入操作(read and write)。在执行脚本时会清除除寄存器RIP外的所有寄存器。目前程序已将flag值存入bss段中,并启用了PIE机制,在这种情况下我们无法预知其具体内存地址位置。然而由于Shellcode代码本身位于内存堆上(heap),因此我们可以利用寄存器RIP来获取堆地址。由于启用了内存保护机制(PIE),堆上存在一个被加载的内存保护库(memory protection library)入口点地址。通过调用该入口点我们可以获取到libc库的整体基址(libc address)。在libc基址处查找位于environ变量中的栈基址信息后,在栈区中找到 pie 的偏移量(offset)。最后根据该偏移量可以直接定位到 flag 的存储位置并进行赋值操作即可完成任务

复制代码
    from re import L 
    from ctypes import * 
    from pwn import * 
    
    #context.log_level = 'debug' 
    context.arch='amd64' 
    io=process("./escape_shellcode") 
    
    elf=E

全部评论 (0)

还没有任何评论哟~