2014-01-11 68 views
0

我正在運行一個我購買的網站,我認爲這是相當不容易的。但是,在發起攻擊後,我發現它不是。他告訴我這個漏洞,但是我的問題是用戶輸入的內容是否可以像用戶那樣獲得所有用戶的用戶名?這裏是代碼...黑客sql查詢

$un=$_GET['username']; 
$q=$db->query("SELECT * FROM users WHERE login_name='$un' OR username='$un'"); 

我意識到這是highley hackable。因此,我將網站改爲準備好的語句,以防止這種情況再次發生。我只想知道他可以輸入什麼來獲取所有用戶的用戶名。

有人張貼在GitHub上的腳本,你可以在這裏找到: https://github.com/sat312/Mafia-Game-Script/blob/master/checkun.php

+2

從字面上看,谷歌爲「sql注入php」提出的第一件事是:http://www.php.net/manual/en/security.database.sql-injection.php完整地爲你詳細解釋它 – Deryck

+0

@Deryck你看過這個問題嗎?他正在尋找一個與上面的代碼相匹配的例子...而不是一些通用的描述。 – Brad

+0

你的黑客通知你。多好。 – crafter

回答

2
' OR 1=1; 

在URL:

/yourScript.php?username=%27%20OR%201%3D1%3B 

的想法是,由於數據與命令混合,你可以完成與數據的命令。

+0

是的,但這並沒有產生用戶名列表。一些他如何使用sql注入產生用戶名列表。 – alexander7567

+0

@ alexander7567這是一般形式。你不顯示你的代碼的其餘部分(比如輸出是如何工作的),所以我不能比這更具體。另外,根據配置,您可能必須完成注射中的第二個查詢。 – Brad

+1

@ alexander7567您可以通過集合函數和字符串函數獲得創意,以獲取數據。我不會閱讀你鏈接到的所有代碼......這需要一段時間。我懷疑這個代碼在其他方面也非常脆弱。無論如何,一旦你控制了查詢,你就可以控制輸出。您可能必須對如何彙總數據發揮創意。那有意義嗎?看看這個:http://stackoverflow.com/q/149772/362536 – Brad

2

您從用戶那裏得到$un,所以我可以輸入任何我想要的,它會得到代入您的查詢。這被稱爲SQL Injection攻擊。

比方說$un = ' OR 1 = 1;--然後將查詢變爲:

SELECT * FROM users WHERE login_name='' OR 1 = 1;--' OR username='' OR 1 = 1;--' 

會發生什麼?這被執行:

SELECT * FROM users WHERE login_name='' OR 1 = 1; 

這將返回表中的每一行。

1

他可能在MySql中使用了GROUP_CONCAT語句,它基本上將多行中的一列分成一行(有關更多信息,請參見Can I concatenate multiple MySQL rows into one field?)。他可能已經終止了原始SQL語句或UNIONED,並添加了LIMIT和ORDER BY以確保返回結果並將原始語句的剩餘部分註釋掉。

這是一種可能性,但可能還有其他幾種。