web-dev-qa-db-ja.com

pythonスクリプトでのバッファオーバーフロー

学校での課題のバッファオーバーフローを実行するスクリプトを開発しています。しかし、ペイロードがコマンドラインから注入されたが、pythonスクリプトから注入されなかった場合に機能します。

コマンドラインからペイロードを挿入すると、次のようになります。

 user@ubuntu:~/Documents/$ /home/user/Documents/easy $(python -c 'print"AAAAAAAAAAAAAA"\xa0\xf4\xff\xbf"')
 $ exit  //I get the Shell.... 

差出人住所

\xa0\xf4\xff\xbf

環境変数内のNOPスレッドのアドレスです。

ここで、完全に同じコマンドをpythonスクリプトから実行します。

 path = "/home/dvddaver/Documents/easy AAAAAAAAAAAAAA\xa0\xf4\xff\xbf"
 os.system(path);

ただし、pythonスクリプトを実行すると、セグメンテーション違反が発生します。

 user@ubuntu:~/Documents$ python bruteforcer.py
 Segmentation fault (core dumped)
3
user1090614

私はあなたの課題には少し遅れていることを理解しています;)しかし、同様の問題で暗闇の中で模索している可能性がある他の学生のために、ここに行きます...

PythonはCで書かれており、C実行可能ファイルがセグメンテーション違反エラーをスローしています。セグメンテーション違反を理解するには、Python自体をgdb(Linux/Unixを使用していると想定したGNUデバッガー)で実行し、スクリプトをパラメーターとして渡してから、Python用に作成されたCコードをステップ実行する必要があります。

pythonインタープリター内でバッファーオーバーフローが発生し、セグメンテーションエラーが発生した可能性があります(これで問題ありません)。あなたがここで実行している場合、私は確かに言うことはできませんが。

私はPythonの脆弱性の1つを詳細に調査し、それについてブログに書いています。古いバージョンのPython 2および3に影響します。Pythonソースをダウンロードし、デバッグをオンにしてソースをビルドしました。

次に、ビルドされたインタープリターでPythonがどのように機能し、Pythonスクリプトを実行するかを理解し、GDBでそれらをステップ実行しました。

私は自分の仕事をブログにアップロードしました( http://yazadk.wordpress.com/2014/12/10/remotely-exploitable-buffer-overflow-in-python/ )-気にしてもワイルドバッファオーバーフローが利用可能なCプログラムを具体的に探していましたが、たまたまCで記述されたPythonを選択しました。

これにより、あなたや他の誰かが達成しようとしていることについて、基本的な洞察が得られることを願っています。

2
Yazad

環境が異なるため、環境のアドレスが変更された可能性があります。

コアダンプを見て、使用する正しいアドレスを見つけることができます(その後、nopスレッドを使用する必要はありません:))

1
Tohmaxx