2016-08-18 26 views
-2

我在其中設立了發展本地XAMPP服務器,我有一個表像這樣:如何對此代碼執行SQL注入攻擊?

CREATE TABLE `entries` 
(

`id` int(10) UNSIGNED NOT NULL, 

`title` varchar(100) NOT NULL, 

`entry` text NOT NULL, 

`date_entered` datetime NOT NULL 

) 

爲了學習如何保護我的查詢對SQL注入,我想誘使一個(我故意不使用預準備語句)。我有一個查詢插入此表中的條目像這樣:

$sql = 'insert into entries (title , entry , date_entered) ' 
    . 'values("' 
    . $postTitle 
    . '","' 
    . $postEntry 
    . '","' 
    . $dateEntered 
    . '")'; 

它的工作原理(它插入表中的條目),但我沒能誘導針對它的SQL注入攻擊。以下是我試圖在$postEntry字段插入:

;drop table entries; 
;drop table entries;' 
';drop table entries;' 
`;drop table entries;' 
q';drop table entries; 
q","e");drop table entries; --' 
q","e");drop table entries;-- 

對於最後一個值的SQL查詢變成了:

insert into entries (title , entry , date_entered) values("r","q","e");drop table entries;--","2016-08-18 10:35:36") 

儘管如此條目表完好!

我修改了SQL字符串使用單引號,像這樣:

$sql = 'insert into entries (title , entry , date_entered) ' 
    . ' values(\'' 
    . $postTitle 
    . '\',\'' 
    . $postEntry 
    . '\',\'' 
    . $dateEntered 
    . '\')'; 

然後嘗試:

q','2016-5-5');drop table entries; --' 

但仍然沒有運氣!我應該如何產生SQL注入攻擊呢? 注意:建議的副本不重複,甚至沒有答案。這個問題的關鍵在於演示expoite,以確保安全措施的正常運行。

+0

嘗試使用子查詢而不是多個逗號分隔。 –

+0

mysqli_multi_query();執行由半(;)分隔的多個查詢冒號 – JYoThI

+0

爲了學習如何保護您的查詢免受SQL注入的影響,您必須學習如何保護您的查詢。而任何注入東西都完全不相關的保護。 –

回答

1

Mysql不允許在一個Query中使用多個語句。這就是Drop語句被忽略的原因。

對於多個查詢使用mysqli_multi_query()

你仍然可以在這裏使用其他注射。

嘗試使用

http://sqlmap.org/

來檢查你的代碼的漏洞。

1

您可能會插入多個值併發送垃圾郵件,但正如某人所說,您無法在單個查詢中運行多個語句。

因此,例如,您可以通過在單個帖子中追加大量額外提交來擴展表格。您需要在這方面努力,但在想你可以嘗試設置$後補是:

poo'),'2016-5-6'),('poo','poooo','2016-5-5'),('poo','poooo 

的想法是,在$後補字符串的開頭第一兩端正確的原始查詢,然後附加了額外的價值和然後結束於原始查詢將圍繞$ postEntry的值附上單引號的位置。您需要將$ postEntry設置爲我輸入的內容。我想.. :)

1

我不打算再添加到我的答案中,因爲我不想讓你認爲我是一個黑客:|但我想幫助您瞭解黑客如何濫用您的代碼,我可以通過其他方式向您展示。

例如,假設我想了解更多關於系統以及我如何(可能)顯示密碼,卡數據等的信息,我們假設我已經發現了一個像您創建的那樣的弱點。

基本前提是,我在博客文章屏幕上發現了一個弱點,我發佈的任何內容都是我自己發佈的帖子,或者發佈後可以在網站上看到。

因此,我幾乎可以使用postEntry字段作爲輸出,通過操作postTitle的值來顯示任何SQL查詢的結果。

注意:我可能錯過了單引號或某處的某個地方,因爲我只是基於我知道可以工作的方式輸入此信息,因此您需要稍微理解該理論。我很確定,雖然我的代碼示例可以被複制和粘貼。

步驟1)。顯示可供查詢的表的列表。 設置$ postTitle(不進入)如下:

poo',SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEME.TABLES),'2016-5-5'),'poo 

提交一個(假設你正在服用我給我看我的文章頁面)主哨區域應包含逗號分隔的表列表從後數據庫

步驟2)。清理 複製列表並立即刪除我的帖子,以減少任何人觀看的警報狀態。

步驟3)。獲取表列名稱 使用完全相同的方法創建一個SELECT語句,該語句從我現在知道的名稱的特定表中獲取所有COLUMN名稱。我得到一個帖子,其中包含該表格的逗號分隔列。

步驟4)。再次清理

步驟5)。你現在可以看到它現在的位置 所以現在我可以通過運行select語句並在我的文章中查看輸出來從任何表中選擇我想要的任何數據。