# bof

[Dreamhack] 메모리 훅 실습 - hook
🕮 소스 코드⚙️실습 환경Environment64 bit와 little-endian 형식으로 이루어짐Full RELRO : 특정 섹션에서 writable권한이 없음Canary : Buffer Overflow시 canary값을 유지해야함NX enabled : Shel
[Dreamhack] 메모리 Hook
Hook 🔥 hook : 갈고리라는 뜻으로 운영체제가 어떤 코드를 실행하려고 할 때, 이를 낚아채어 다른 코드가 실행되게 하는 것을 Hooking(후킹) 이라고 부른다. Hook Overwrite : Glibc 2.33 이하 버전에서는 malloc()과 free

basic_exploitation_001
Dreamhack_pwnable_basic_exploitation_001 - Buffer Overwrite

Buffer Overflow
📍 Buffer 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역을 의미한다. 📍 Overflow 사전적으로 '용량을 초과하여 넘쳐 흐른다'는 뜻의 용어로, 한정된 메모리 용량을 넘어가는 값이 들어갈 때 발생하는 오류
goblin -> orc
今回は環境変数を使えないそしてRETの最後が\\xbfじゃないとプログラムが終了されるじゃあ、bufferにはシェルコードを入れて、bufferが始まるアドレスを探してそれをRETに上書きすればできるソースコードを再コンパイルしてダンプを作ろうesp-80ぐらいの地点を見てみよう0xbffffcb0
cobolt -> goblin
coboltとは入力方式だけ違う説明なしに攻撃環境変数を作るアドレスを探す今度もアドレスは0xbfffff6e攻撃コマンドクリア
gremlin -> cobolt
ヒントは以下のやつ今度はbufferが16バイトgdbで見てみようstrcpyを呼び出している<main+48>の上に引数がある<main+44>でbufferの位置がebp-16であることをわかった攻撃してみようebpまで16バイト+SFPの4バイト=20バイトを意味なしの文字に上書き
gate -> gremlin
次はヒント。strcpyは文字列の長さチェックをしないため、BOFを引き起こせる。gdbで逆アセンブル。<main+54>でstrcpyを呼び出している。引数はbuffer、argv1。スタックは引数を逆順に並べ替える。したがってebp-256がbufferの位置である。しかしスタックにはeb