サイズ: 2190
コメント:
|
サイズ: 3274
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 4: | 行 4: |
== Tools == | = Tools = |
行 10: | 行 10: |
* nasm | |
行 20: | 行 21: |
== Shellcode == | = x86/x86-64 ABI = チートシート = System call = * システムコールとは * プログラムがカーネルとやりとりする一元化された窓口 * プログラムの動作権限 * ユーザモード * 普通のプログラムが動作 * 基本的にプロセスのメモリ内で計算しかできない. * それ以外のことをするためにはシステムコールを呼ぶ * カーネルモード * カーネルが動作 * 任意の操作が可能 {{attachment:systemcall.png}} = How to call System calls = システムコールの呼び出し方 * x86 * int 0x80 * INTerrupt (ソフトウェア割り込み命令) * システムコール番号: eax * 引数: ebx, ecx, edx, esi, edi, ebp * x86-64 * syscall命令 * システムコール番号: rax * 引数: rdi, rsi, rdx, r10, r8, r9 ||<rowclass="header"> arch || instruction || syscall # || retval || arg1 || arg2 || arg3 || arg4 || arg5 || arg6 || || x86 || int 0x80 || eax || eax || ebx || ecx || edx || esi || edi || ebp || || x86-64 || syscall || rax || rax || rdi || rsi || rdx || r10 || r8 || r9 || = Shellcode = |
行 33: | 行 68: |
== x86/x86-64 ABI == チートシート == System call == システムコールの呼び出し方 == Shellcode(slightly modified) == |
= Shellcode(no /bin/sh) = |
行 41: | 行 70: |
// gcc -z execstack -fno-stack-protector -o baby2 baby2.c | // gcc -z execstack -fno-stack-protector -o baby1 baby1.c |
行 47: | 行 76: |
scanf("%1023s", buf); | fread(buf, 1, 4096, stdin); |
行 53: | 行 82: |
== Return-to-plt == | = Return-to-plt = |
行 59: | 行 88: |
int main() { | int f() { |
行 65: | 行 94: |
int main() { return f(); } | |
行 67: | 行 97: |
== ASLR == | = ASLR = |
行 70: | 行 100: |
== Return-to-libc == | = Return-to-libc = |
行 74: | 行 104: |
int main() { | int f() { |
行 80: | 行 110: |
int main() { return f(); } | |
行 83: | 行 114: |
== Return-to-plt revisited(x86-64) with tiny ROP == | = Return-to-plt revisited(x86-64) with tiny ROP = |
行 89: | 行 120: |
int main() { | int f() { |
行 95: | 行 126: |
int main() { return f(); } | |
行 99: | 行 131: |
== ROP == | = ROP = |
行 103: | 行 135: |
int main() { | int f() { |
行 108: | 行 140: |
int main() { return f(); } | |
行 110: | 行 143: |
= Pwn勉強会(Stack day 2) = | = 実践 = |
行 112: | 行 145: |
= Pwn勉強会(Heap day 1) = やりたいな |
Pwn勉強会(Stack day 1)
Tools
- Disassembler
- udcli / ndisasm
- objdump
- METASM / Hopper / IDA Pro
- Assembler
- nasm
- Pwntools
- METASM?
- Debugger
- gdb-peda
- Pwn toolkit
- Pwntools
- Ruby系でなにか
Python(Pwntools)とRuby(METASM? ctfライブラリ?)好きな方を選んで作業を進めてもらう.
x86/x86-64 ABI
チートシート
System call
- システムコールとは
- プログラムがカーネルとやりとりする一元化された窓口
- プログラムの動作権限
- ユーザモード
- 普通のプログラムが動作
- 基本的にプロセスのメモリ内で計算しかできない.
- それ以外のことをするためにはシステムコールを呼ぶ
- カーネルモード
- カーネルが動作
- 任意の操作が可能
- ユーザモード
How to call System calls
システムコールの呼び出し方
- x86
- int 0x80
- INTerrupt (ソフトウェア割り込み命令)
- システムコール番号: eax
- 引数: ebx, ecx, edx, esi, edi, ebp
- int 0x80
- x86-64
- syscall命令
- システムコール番号: rax
- 引数: rdi, rsi, rdx, r10, r8, r9
arch |
instruction |
syscall # |
retval |
arg1 |
arg2 |
arg3 |
arg4 |
arg5 |
arg6 |
x86 |
int 0x80 |
eax |
eax |
ebx |
ecx |
edx |
esi |
edi |
ebp |
x86-64 |
syscall |
rax |
rax |
rdi |
rsi |
rdx |
r10 |
r8 |
r9 |
Shellcode
Shellcode(no /bin/sh)
Return-to-plt
ASLR
ASLRについて説明
Return-to-libc
Return-to-plt revisited(x86-64) with tiny ROP
ROP
実践
適当な問題を探す