【逆向学习记录】Pwntool常用的数据处理方式

    xiaoxiao2024-11-07  111

    1 概述

    偶尔在pwn的题目中,使用pwntool工具,由于不熟练,经常性遗忘,尤其是接收地址的时候,会卡在数据处理上,因此单独起一篇文章,用来记录日常用到的各种语句,后面如果发现了心得,可以继续补充。 参考文章: PwnTools常见用法 Pwntool 官方文档

    2 数据处理方式

    2.1 发送数据

    send(payload) 发送payload sendline(payload) 发送payload,并进行换行(末尾\n) sendafter(some_string, payload) 接收到 some_string 后, 发送你的 payload sendlineafter(some_string, payload) 接收到 some_string 后, 发送你的 payload(末尾\n) # 后面两个经常用,相当于recvuntil

    2.2 接收数据

    recvn(N) 接受 N(数字) 字符 recvline() 接收一行输出 recvlines(N) 接收 N(数字) 行输出 recvuntil(some_string) 接收到 some_string 为止

    2.3 接收到数据之后

    ##如果接受到的是地址,可以使用recv之后,直接进行int强转 data = p.recv("10") libc_start_main_addr = int(data,16) - 247 ##如果接受到的是地址,但是是反向的\x10\x00\x40,可以使用recv之后,直接进行int强转 data = p.recv("10") libc.address = int(data[:6][::-1].encode("hex"), 16) - libc.symbols["read"] libc.address = u64(data[:6].ljust(8,"\x00")) - libc.symbols["read"] #这两种写法都行,其中[::-1]的意思是逆序取字符串,可以使用u64 强制转换 p32/p64: 打包一个整数,分别打包为3264,主要是发送的时候需要打包 u32/u64: 解包一个字符串,得到整数,接收的时候需要解包

    2.4 针对elf的处理

    symbols['a_function'] 找到 a_function 的地址 ##libc.symbols['read'] got['a_function'] 找到 a_function的 got ##elf.got["read"] plt['a_function'] 找到 a_function 的 plt ##elf.plt["read"] next(e.search("some_characters")) 找到包含 some_characters(字符串,汇编代码或者某个数值)的地址 ##libc.next(e.search("/bin/sh")) #

    2.5 关于context,调试log

    context.log_level = 'DEBUG' context(arch='amd64', os='linux') context(os='linux', arch='amd64', log_level='debug')

    2.6 关于gdb,当执行到此时,会弹出一个terminal

    gdb.attach(process)
    最新回复(0)