pwn加载题目给定的so

Posted 0x636a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pwn加载题目给定的so相关的知识,希望对你有一定的参考价值。

pwn加载题目给定的so

from pwn import *
import sys, os
def change_ld(binary, ld):
    """
    Force to use assigned new ld.so by changing the binary
    """
    if not os.access(ld, os.R_OK): 
        log.failure("Invalid path {} to ld".format(ld))
        return None
 
         
    if not isinstance(binary, ELF):
        if not os.access(binary, os.R_OK): 
            log.failure("Invalid path {} to binary".format(binary))
            return None
        binary = ELF(binary)
 
 
    for segment in binary.segments:
        if segment.header[‘p_type‘] == ‘PT_INTERP‘:
            size = segment.header[‘p_memsz‘]
            addr = segment.header[‘p_paddr‘]
            data = segment.data()
            if size <= len(ld):
                log.failure("Failed to change PT_INTERP from {} to {}".format(data, ld))
                return None
            binary.write(addr, ld.ljust(size, ‘‘))
            if not os.access(‘/tmp/pwn‘, os.F_OK): os.mkdir(‘/tmp/pwn‘)
            path = ‘/tmp/pwn/{}_debug‘.format(os.path.basename(binary.path))
            if os.access(path, os.F_OK): 
                os.remove(path)
                info("Removing exist file {}".format(path))
            binary.save(path)    
            os.chmod(path, 0b111000000) #rwx------
    success("PT_INTERP has changed from {} to {}. Using temp file {}".format(data, ld, path)) 
    return ELF(path)
#example
elf = change_ld(‘./echo2‘, ‘./ld.so‘)
p = elf.process(env={‘LD_PRELOAD‘:‘./libc.so.6‘})
#后续步骤接着写

先用strings libc.so.6 | grep GLIBC 查看自己的glibc是否兼容题目给的libc库

(libc.so.6 是我将题目给的改名的)

注意ld.so 是从安装的glibc 例如按照我的blog(编译glibc)的目录是/usr/glibc223/lib里的ld2.23.so拷贝出来的并且改了下名 libc.so.6 则是题目给的libc库改名的

此脚本需要pwn题 ld.so libc.so.6在一个文件夹

写的好像不太清楚,有问题就问 这破事烦了我两天才给搞好,真是为难新手

参考

https://bbs.pediy.com/thread-225849.htm

以上是关于pwn加载题目给定的so的主要内容,如果未能解决你的问题,请参考以下文章

[NTUSTISC pwn LAB 5]rop入门实验

[NTUSTISC pwn LAB 6]rop&Return to plt实验

[星盟 pwn LAB]ret2libc3(从puts定位system)

pwn----basic_ROP

给定一个文档,选择一个相关的片段

2021强网杯Write-Up真题PWN和RE部分(强推)