RoderickChan / pwncli

Do pwn by command line
MIT License
333 stars 22 forks source link

脚本模式调试求助 #34

Closed risuxx closed 1 year ago

risuxx commented 1 year ago

如何在脚本中使用类似gdb.attach(io)来查看交互途中的状态。我是用stop()函数发现他刚开始运行就停在了read函数中,师傅是否封装了别的函数来实现gdb.attach(io)的功能。 image 脚本如下:

#!/usr/bin/env python3
# Date: 2023-05-25 21:57:21
# Link: https://github.com/RoderickChan/pwncli
# Usage:
#     Debug : python3 exp.py debug elf-file-path -t -b malloc
#     Remote: python3 exp.py remote elf-file-path ip:port

from pwncli import *
cli_script()

io: tube = gift.io
elf: ELF = gift.elf
libc: ELF = gift.libc

# one_gadgets: list = get_current_one_gadget_from_libc(more=False)
# CurrentGadgets.set_find_area(find_in_elf=True, find_in_libc=False, do_initial=False)

def cmd(i, prompt):
    sla(prompt, i)

def add(size, content):
    ru("choice :")
    sl("1")
    ru("size is :")
    sl(str(size))
    ru("name is :")
    sl(content)

def dele(idx):
    ru("choice :")
    sl("2")
    ru("Index :")
    sl(str(idx))

def show(idx):
    ru("choice :")
    sl("3")
    ru("Index :")
    sl(str(idx))

add(0x20, 'aaaa')
add(0x20, 'aaaaa')

dele(0)
dele(1)

stop(True)

add(0x10, p64(elf.sym.backdoor))

show(0)

ia()
RoderickChan commented 1 year ago

你这个界面就是在使用gdb调试,stop是为了在add(0x10, p64(elf.sym.backdoor))这条语句执行前停下。看状态的话,切换到右边的gdb窗口,使用相关gdb命令查看即可

risuxx commented 1 year ago

我是用./exp_cli.py de ./girlfriend -t这个命令运行该脚本后,gdb会停在如下位置。脚本并没有执行前面的两次add和dele操作。这里我是只能在程序对应的add和dele操作的位置打断点吗? image 因为add和dele操作没有完成,于是我使用continue让gdb继续往下走,在continue之后add和dele操作才会继续发送数据,但是gdb调试的过程会卡在continue的状态中。也就是如前面提问中的这张图所示。

RoderickChan commented 1 year ago

我是用./exp_cli.py de ./girlfriend -t这个命令运行该脚本后,gdb会停在如下位置。脚本并没有执行前面的两次add和dele操作。这里我是只能在程序对应的add和dele操作的位置打断点吗? image 因为add和dele操作没有完成,于是我使用continue让gdb继续往下走,在continue之后add和dele操作才会继续发送数据,但是gdb调试的过程会卡在continue的状态中。也就是如前面提问中的这张图所示。

  1. 需要打断点才能断在对应的函数
  2. gdb往下走的话,需要先切到右边的面板,键入continue命令,然后切到左边的面板,继续输入即可