1. 程式人生 > >【滲透攻防WEB篇】SQL注入攻擊初級

【滲透攻防WEB篇】SQL注入攻擊初級

前言
不管用什麼語言編寫的Web應用,它們都用一個共同點,具有互動性並且多數是資料庫驅動。在網路中,資料庫驅動的Web應用隨處可見,由此而存在的SQL注入是影響企業運營且最具破壞性的漏洞之一,這裡我想問,我們真的瞭解SQL注入嗎?看完本篇文章希望能讓你更加深刻的認識SQL注入。

目錄

第一節 注入攻擊原理及自己編寫注入點

1.1、什麼是SQL?
1.2、什麼是SQL注入?
1.3、SQL注入是怎麼樣產生的?
1.4、編寫注入點

第二節 尋找及確認SQL注入

2.1、推理測試法
2.2、and大法和or大法
2.3、加法和減法

正文

第一節 注入攻擊原理及自己編寫注入點

1.1、什麼是SQL?
SQL 是一門 ANSI 的標準計算機語言,用來訪問和操作資料庫系統。SQL 語句用於取回和更新資料庫中的資料。SQL 可與資料庫程式協同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他資料庫系統。

1.2、什麼是SQL注入?
看起來很複雜,其實很簡單就能解釋,SQL注入就是一種通過操作輸入來修改後臺SQL語句達到程式碼執行進行攻擊目的的技術。

1.3、SQL注入是怎麼樣產生的?
構造動態字串是一種程式設計技術,它允許開發人員在執行過程中動態構造SQL語句。開發人員可以使用動態SQL來建立通用、靈活的應用。動態SQL語句是在執行過程中構造的,它根據不同的條件產生不同的SQL語句。當開發人員在執行過程中需要根據不同的查詢標準來決定提取什麼欄位(如SELECT語句),或者根據不同的條件來選擇不同的查詢表時,動態構造SQL語句會非常有用。

在PHP中動態構造SQL語句字串:

$query = "SELECT * FROM users WHERE username = ".$_GET[“ichunqiu”];

看上面程式碼我們可以控制輸入引數ichunqiu,修改所要執行SQL語句,達到攻擊的目的。

1.4、編寫注入點
為了照顧一下新人,這裡先介紹一下涉及到的基礎知識:

SQL SELECT 語法
SELECT 列名稱 FROM 表名稱
符號 * 取代列的名稱是選取所有列
WHERE 子句
如需有條件地從表中選取資料,可將 WHERE 子句新增到 SELECT 語句。
語法
SELECT 列名稱 FROM 表名稱 WHERE 列 運算子 值
下面的運算子可在 WHERE 子句中使用:

瞭解了以上基礎知識就讓我們來自己編寫注入點把。

第一步:我們使用if語句來先判斷一下變數是否初始化