Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

slide.pdf

Avatar for m412u m412u
August 10, 2019

 slide.pdf

Avatar for m412u

m412u

August 10, 2019
Tweet

More Decks by m412u

Other Decks in Programming

Transcript

  1. 2 準備 (1/2) • Pwntools • https://github.com/arthaud/python3-pwntools より • $

    apt-get update • $ apt-get install python3 python3-dev python3-pip git • $ pip3 install --upgrade git+https://github.com/arthaud/python3- pwntools.git • gdb + peda • $ git clone https://github.com/longld/peda.git ~/peda • $ echo "source ~/peda/peda.py" >> ~/.gdbinit
  2. 3 準備 (2/2) • 問題サンプルプログサンプルプログラムのクロヌンのクロヌンクロヌン • $ git clone https://github.com/m412u/classic

    • ディレクトリ構成構成 • classic • classic ・・・バむナリ構成ファむル • libc-2.23.so ・・・Cラむブラリ構成 • example ・・・解答䟋集 • exp_step{0..5}.py ・・・挔習甚プログラムプログラムのクロヌン
  3. 4 はじめに • 目的 • Pwnを解くフロヌを䜓解くフロヌを䜓隓すフロヌを解くフロヌを䜓䜓隓するする • 題材 • SECCON

    2018 Online CTF • Classic Pwn (121 pt, 197 solves) • Pwnでよくフロヌを䜓隓す甚プログラムいられる手法を䞀床に孊べるを解くフロヌを䜓䞀床に孊べる問題に孊べる問題孊べる問題べる問題 • 質問等はその郜床しおはそのクロヌン郜床に孊べる問題しおもらっお倧䞈倫ですです
  4. 7 動的解く流れ析 • 実行暩限の付䞎のクロヌン付䞎 • $ chmod +x classic •

    動䜜させおみるさせおみ立おる • 暙準入力から入力を受けから入力から入力を受けを解くフロヌを䜓受け付けお終了け付けお終了付け付けお終了お終了
  5. 9 ディスアセンブリしおみるしおみる • IDA, radare2, objdump
 • 倧たかな凊理を぀かむ凊理の奪取を解くフロヌを䜓぀かむ • 䜿甚プログラムされおいる関数

    • 分岐凊理の奪取な凊理を぀かむどな凊理を぀かむど... • 気になった点が重に孊べる問題な凊理を぀かむった点が重芁点が重芁が重芁重芁
  6. 15 libc ずは (1/3) • よくフロヌを䜓隓す利甚プログラムされるC蚀語の関数が集めらのクロヌン関数が重芁集められた点が重芁ものクロヌン • printf, fgets, read,

    write, system... • プログラムのクロヌン実行時にメモリぞマッに孊べる問題メモリ構成ぞマッピングされマッピングされる
  7. 20 PLT ず GOT(1/2) • libcに孊べる問題存圚する関数ぞのアする関数ぞマッピングされのクロヌンアドレスを解くフロヌを䜓呌び出す床に蚈算び出す床に蚈算す出す床に蚈算すす床に孊べる問題に孊べる問題蚈算しおみるす るのクロヌンは効率が悪いが重芁悪いい • 関数のクロヌン初回呌び出す床に蚈算び出す床に蚈算す出す床に蚈算すし時にメモリぞマッに孊べる問題アドレスを解くフロヌを䜓蚈算しおみるしお保存しおお け付けお終了ば凊理の奪取が重芁少なくおすむな凊理を぀かむくフロヌを䜓隓すおすむ

    • GOT(Global Offset Table) • 解決枈みアドレスを保み立おアドレスを解くフロヌを䜓保存しおおくフロヌを䜓隓すテヌブル • PLT(Procedure Linkage Table) • プログラムのクロヌンずGOTを解くフロヌを䜓぀な凊理を぀かむぐゞャンプ台ゞャンプ台
  8. 22 ret2plt • PLTに孊べる問題存圚する関数ぞのアする関数な凊理を぀かむら GOTを解くフロヌを䜓経由するのでするのクロヌンでサンプルプログASLRを解くフロヌを䜓 気になった点が重に孊べる問題せず呌び出すこずが呌び出す床に蚈算び出す床に蚈算す出す床に蚈算すすこずが重芁でき換えるたでのオる • libcに孊べる問題関するアドレスが重芁手に孊べる問題入ればサンプルプログlibc内のクロヌン関数を解くフロヌを䜓呌び出す床に蚈算 び出す床に蚈算す出す床に蚈算すすこずが重芁可胜 •

    リ構成ヌクでき換えるたでのオそうな凊理を぀かむアドレスサンプルプログそのクロヌンた点が重芁めに孊べる問題䜿えそうな凊理を぀かむ関数 はな凊理を぀かむいか...?
  9. 23 ROP(1/2) • x64で関数が重芁呌び出す床に蚈算び出す床に蚈算す出す床に蚈算すされる堎合サンプルプログ匕数は決められた点が重芁レゞ スタを入力しおみるに孊べる問題栌玍されるされる • 第1匕数・・・rdi • 第2匕数・・・rsi •

    第3匕数・・・rdx • 匕数に孊べる問題枡したいデヌタをした点が重芁いデヌタを入力しおみるを解くフロヌを䜓レゞスタを入力しおみるに孊べる問題倀を解くフロヌを䜓栌玍されるしな凊理を぀かむけ付けお終了れば な凊理を぀かむらな凊理を぀かむい → gadgetず呌び出す床に蚈算ばれるコヌドのクロヌン断片を䜿甚するを解くフロヌを䜓䜿甚プログラムする