2011-05-16 81 views
2

我正在写一个小型的perl工具,它应该可以帮助我在盲目的SQL注入攻击期间加速一些进程(这是一种道德工具,这是我的工作)。在HTTP请求中禁用URL编码

我的脚本管理HTTP请求已经用十六进制值(%xx)进行网址编码。 因此,当我使用HTTP::Request将其发送到Web浏览器时,我的请求会被编码两次。

我用这样的代码:

my $ua = LWP::UserAgent->new; 
my $httpreq = new HTTP::Request GET => 'http://192.168.0.1/lab/sqli.php?id=1%20and%20(select%20ascii(substring(user,3,1))%20from%20mysql.user%20limit%201)>100%23'; 
my $res = $ua->request($httpreq) 

如何禁用我的要求内perl的URL编码?

回答

5

HTTP ::请求不修改提供的URL。

任何URL编码都必须在URL组装完成之前完成—它实际上是编码为—的URL组件,因此HTTP :: Request预期编码已经完成。

>perl -MHTTP::Request -e"print HTTP::Request->new(GET => 'http://192.168.0.1/lab/sqli.php?id=1%20and%20(select%20ascii(substring(user,3,1))%20from%20mysql.user%20limit%201)>100%23')->as_string;" 
GET http://192.168.0.1/lab/sqli.php?id=1%20and%20(select%20ascii(substring(user,3,1))%20from%20mysql.user%20limit%201)%3E100%23 
+1

@ user755743,我说的并不完全正确。如果仔细观察输出,您会看到HTTP :: Request编码为“>”。它这样做是因为“>”在网址中是不允许的。它完全在HTTP :: Request的权限内,并且这样做不会导致任何双重编码。 – ikegami 2011-05-16 18:49:14

+0

嗨,的确。我错了。没有双重编码(我应该多睡一会儿)。 – user755743 2011-05-16 19:14:10