本系列文章將從sql注入基礎講解,面向初學者,循序漸進。
如有不足,敬請指正。
了解sql語言、語法、操作、常用函式
(基本的sql資料庫操作是進行sql注入攻擊的基礎)了解php語言,以及php+sql的常用組合操作
了解**架構、不同資料庫的差異
了解burp suite、sqlmap等工具
了解http基本的get、post方法
本文以假設存在的www.test.com/index.php
注入頁面為例
所謂sql注入,就是通過把sql命令插入到 web表單提交 或 url 或 頁面請求等的查詢字串中,最終達到欺騙伺服器執行惡意的sql命令。
即:將構造的sql語句插入到正常提交的字串中,並使伺服器將字串中的命令解析為可執行命令而不是字串。
e.g.-1
在www.test.com/index.php
的原始碼中有如下的**:
$query="select name from users where id='$_get['id']'
"
以get方式獲取引數id,基於使用者輸入的引數id找到相應的name,正常情況下id為1,2等,比如url為:
此時資料庫執行的命令為:
select name from users where id='1'
但當使用者輸入如下url時:
www.test.com/index.php?id=1' union select database()%23
(『%23』為』#』的url編碼,』#』為mysql注釋符,注釋掉後面的語句)
此時資料庫執行的命令是:
select name from users where id='1'
union
select
database()#'
不僅可以得到id為1的name欄位內容,還可以得到當前資料庫名
e.g.-2
當前資料庫存在名為users的表,其中包含username、passwd兩列,該錶存在一條username為admin,passwd為password的資料。
網頁核心原始碼如下:
$query="select * from users where username='$_post['username']'
and passwd='$_post['password']'
"
以post方式獲取使用者輸入的username和password
正常情況下提交的username為admin
,password為password
方可以驗證成功而登入,且資料庫執行的命令為:
select * from users where username='admin'
and passwd='password'
此時資料庫返回username為admin
,password為password
的資料項,
但是當只知道username為admin
而不知道密碼時怎麼辦呢?
構造username為admin
,password為' or '1'='1
,此時執行的sql語句為:
select * from users where username='admin'
and passwd=''
or'1'='1'
由於'1'='1'
條件恒為真,該語句將返回users表中的所有資料(and優先順序高於or的優先順序,由於表中不存在username='admin' and passwd=''
的資料項,則該條件為假,然後結合or '1'='1'
,條件變為永真,且*為萬用字元,所以該條sql語句變為查詢users表中的所有資料項,由於該錶僅有一條資料項,所以匹配到的就是admin這條資料)
此時雖然不知道密碼,但也可驗證成功而登入。
如果username和password都不知道呢?
其實同理即可
不安全的資料庫配置
這類注入主要特點是不需要考慮引號的閉合,以www.test.com/index.php
為例,核心原始碼類似於:
$query="select name from users where id=$_get['id']"
注意與e.g.-1的不同
正常
'
執行異常
and 1=1
正常
and 1=2
執行異常
此方法也可用於測試某頁面是否存在數字型注入。
這類注入需要注意引號的閉合 ,核心原始碼類似如下:
$query="select name from users where id='$_get['id']'
"
正常
'
執行異常
' and 1=1
執行異常
' and 1=1%23
正常
' and '1'='1
正常
sql注入還有基於報錯型sql注入、基於布林/時間的sql注入、可聯合查詢的sql注入等等
sql注入教程之型別以及提交注入
目錄 這裡說的引數是原始碼中存在注入程式設計客棧的地方。其中引數型別有 數字 字元 搜尋 json等。其中sql語句干擾符號有 等,過濾首先考慮閉合這些符號,再進行注入測試。例如php中的 name get x www.cppcns.com sql select from user where na...
新or注入教程
記得一年前火狐有一位朋友問,如果乙個站過濾了and和 的話,改怎麼注入啊?當時我隨口說了句 or注入 後來又一次看貼的時候,看到他問我該怎麼利用呢?我就寫了幾個簡單的語句給他,叫他自己變換,他很感激我,還說網上沒有這種方法。我到網上查了查,還真沒有or注入專題呢 or 1 1除外 呵呵,所以,一年後...
SQLmap注入教程
一次sqlmap注入點並且dump出賬號密碼全程 判斷注入點 sqlmap.py u 存在注入url 爆出所有資料庫名字 sqlmap.py u 存在注入url dbs 檢視當前使用賬號 sqlmap.py u 存在注入url current user 1 檢視當前資料庫 sqlmap.py u 存...