2011-05-16 161 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