攻防世界PWN题解答

本文详细介绍了攻防世界PWN题目level3的解决过程,包括程序分析、获取地址偏移、两次调用read函数复写返回地址以实现控制流程,最终执行系统命令。使用ida进行反编译,利用pwntools获取函数地址偏移,并通过plt和got表进行地址操纵,确保连续执行read函数以成功执行系统调用。

level3

程序分析

通过ida打开程序,F5键生成C的代码如下:

int __cdecl main(int argc, const char **argv, const char **envp)
{
   
   
  vulnerable_function();
  write(1, "Hello, World!\n", 0xEu);
  return 0;
}

ssize_t vulnerable_function()
{
   
   
  char buf; // [esp+0h] [ebp-88h]

  write(1, "Input:\n", 7u);
  return read(0, &buf, 0x100u);
}

很明显,vulnerable_functionread函数有注入点,可以复写vulnerable_function的返回地址。

但这题程序中没有system调用,因此要先找到system/bin/sh字符串在内存中的位置。

我们知道,write,read,system,"/bin/sh"虽然每次加载到内存中的位置都是不一样的,但是他们的相对位置是固定的,因此,可以利用write函数打印出writeread在内存中的位置,然后通过偏移值便可以得到system/bin/sh在内存中的位置,通过第二次调用read函数复写返回地址便可以执行system('/bin/sh')

获取地址偏移

from pwn import *
elf = ELF(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值