Upload
Use After Free 脆弱性攻撃を試す
•
4 likes
•
6,792 views
M
monochrojazz
Follow
Use After Free 脆弱性攻撃をコピペで試す セキュリティ初心者の備忘録ノート
Read less
Read more
Report
Share
Related slideshows
低レイヤー入門
低レイヤー入門
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
目grep入門 +解説
目grep入門 +解説
Report
Share
1 of 16
Download now
Download to read offline
More Related Content
Use After Free 脆弱性攻撃を試す
1.
Use After Free脆弱性攻撃を試す 東海道らぐ@豊橋 2016-04-23 @monochrojazz
2.
自己紹介のようなもの ● @monochrojazz(27) ● セキュリティに興味 が、初心者 ●
致命的な音ゲーマー 音ゲーコントローラを 自作 アプリも自作(Android)
3.
前回
4.
BOF攻撃でroot奪取 BOF実験で攻撃の考え方を習得 (した気でいた)
5.
しかし
6.
BOF UseAfterFree 脆弱性攻撃タイプの変遷 2006 2013 BOF 5%以下 http://www.atmarkit.co.jp/ait/articles/1409/22/news010.html
7.
(; ^ω^)
8.
BOF UseAfterFree 脆弱性攻撃タイプの変遷 2006 2013 代わりにUseAfterFree 50% http://www.atmarkit.co.jp/ait/articles/1409/22/news010.html
9.
Use After Freeって? ・・・ ・・・ 0x084b018 ・・・ ・・・ 1 ヒープに領域確保 ポインタ型保存 2 ・・・ ・・・ 0x084b018 ・・・ ・・・ 領域解放 3 ・・・ ・・・ 0x084b018 ・・・ ・・・ 新たに領域確保 4 ・・・ ・・・ 0x41414141 ・・・ ・・・ 領域に任意アドレス の書込 char
*a 5 ・・・ ・・・ 0x41414141 ・・・ ・・・ ポインタ型を呼出 任意アドレスへ read/write char *a 新規領域位置は 一意 strcpy(a, argv[1])があれば 任意アドレス書込など
10.
Q.そんな都合のいい脆弱性ある? A. ブラウザなど Javascript 攻撃コードサンプル Javascriptは領域確保解放が ユーザ側で自由に可能 ブラウザ脆弱性を利用し 悪性コードを動かせば 制御を奪える もちろんブラウザ側もsandboxなどで いろいろ対策を講じています
11.
今回の目的 UseAfterFreeで任意アドレス書込 printfをsystemに書き換え シェル起動 参考ていうかコピペ: use-after-freeによるGOT overwriteをやってみる http://inaz2.hatenablog.com/entry/2014/06/18/215452
12.
今回のプログラム 領域確保 領域解放 新規領域確保 新規領域書込 UseAfterFree 書き換えターゲット argv[2] 領域位置調整用 argv[3] 書きこみたいアドレス argv[4]
書き込む内容 DEP,SSP有効でコンパイル(デフォルト) ASLR無効環境で実行
13.
まずぶっ壊す 新規領域書込 UseAfterFree 解放済のポインタを呼出 0x42424242(=”BBBB”)アドレスに”EEEE”を書込 BBBBとEEEEを変えれば任意アドレスへの任意入力可能 注)新規領域サイズ次第で 解放済領域の上書きは不可に BBBBより後
14.
GOT Overwrite printf →
systemに書き換え GOT Overwriteの利用 printfのGOT領域 このアドレスの先(printfの実体)の書き換え printf 実行時に書き換えたアドレスに飛ぶ = systemのアドレスに飛ばせる systemのアドレスはgdb-pedaや nm -D /lib/i386-linux-gnu/libc.so.6 | grep " system" などで調査
15.
シェル起動 printfのGOT領域 system関数アドレス argv[3] 書きこみたいアドレス
= printf GOT領域 argv[4] 書き込む内容 = systemアドレス シェル起動成功
16.
制御奪えてないけど? UseAfterFreeは任意アドレス読み書きの手段 制御奪取は追加でStack Pivot 任意アドレスが読めればASLR回避も可能 (アドレスリーク) スタックポインタを ヒープ領域(任意入力可)へ →何でもできる ランダムなlibcベースアドレスを読取 その値から計算したアドレスに飛ばす
Download now