ログイン
編集不可のページディスカッション情報添付ファイル

2015-04-27 20:48:40時点のリビジョン1

メッセージを消す
ytoku/Slides/Pwn勉強会

MMA

Pwn勉強会(Stack day 1)

Tools

Python(Pwntools)とRuby(METASM? ctfライブラリ?)好きな方を選んで作業を進めてもらう.

Shellcode

   1 // gcc -z execstack -fno-stack-protector -o baby1 baby1.c
   2 // -m32 / -m64 両方やってもらうよ!
   3 #include <stdio.h>
   4 typedef void func();
   5 int main() {
   6     char buf[1024];
   7     fread(buf, 1, 4096, stdin);
   8     ((func *)buf)();
   9 }

x86/x86-64 ABI

チートシート

System call

システムコールの呼び出し方

Shellcode(slightly modified)

   1 // gcc -z execstack -fno-stack-protector -o baby2 baby2.c
   2 // -m32 / -m64 両方やってもらうよ!
   3 #include <stdio.h>
   4 typedef void func();
   5 int main() {
   6     char buf[1024];
   7     scanf("%1023s", buf);
   8     ((func *)buf)();
   9 }

Return-to-plt

   1 // gcc -m32 -fno-stack-protector -o baby3 baby3.c
   2 #include <stdio.h>
   3 #include <unistd.h>
   4 char buf2[128];
   5 int main() {
   6     char buf[32];
   7     system("sleep 1");
   8     gets(buf);
   9     return 0;
  10 }

ASLR

ASLRについて説明

Return-to-libc

   1 // gcc -m32 -pie -fPIE -fno-stack-protector -o baby4 baby4.c
   2 #include <unistd.h>
   3 int main() {
   4     char buf[32];
   5     write(1, buf, 64);
   6     read(0, buf, 1024);
   7     return 0;
   8 }

Return-to-plt revisited(x86-64) with tiny ROP

   1 // gcc -m64 -fno-stack-protector -o baby5 baby5.c
   2 #include <stdio.h>
   3 #include <unistd.h>
   4 char buf2[128];
   5 int main() {
   6     char buf[32];
   7     system("sleep 1");
   8     gets(buf);
   9     return 0;
  10 }

ROP

   1 // gcc -m32 -static -fno-stack-protector -o baby6 baby6.c
   2 #include <unistd.h>
   3 int main() {
   4     char buf[32];
   5     read(0, buf, 1024);
   6     return 0;
   7 }

Pwn勉強会(Stack day 2)

適当な問題を探す

Pwn勉強会(Heap day 1)

やりたいな