Web-SQL注入入門

Web表單遞交,輸入域名或頁面請求的查詢字符串中插入SQL命令,從而欺騙服務器執行惡意的SQL命令

SQL是一種ANSI的標準計算機語言
SQL標準外,大部分SQL數據庫程序都有自己的私有擴展
RDBMS(關係型數據庫管理系統)是SQL的基礎,也是所有現代數據庫系統的基礎

MySQL注入基本流程

  1. 判斷sql注入
  2. 數據庫權限判斷
  3. 判斷字段數
  4. 查詢庫名
  5. 查表名
  6. 查字段
  7. 查數據

判斷sql注入

  1. 提交單引號':判斷是否爲字符型
  2. 加法和減法:區別是數字型還是字符型的注入.
  3. 判斷搜索型注入的方法:keywords% 'and 1=1 and '%'='keywords% 'and 1=2 and '%'='

數據庫權限判斷

and ord(mid(user(),1,1))=114判斷ROOT權限
and (select count(*) from mysql.user)>0判斷讀寫權限

判斷字段數

UNION SELECT,order by

大部分程序只會調用數據庫查詢的第一條數據就返回,而UNION SELECT的數據在第二條數據
兩種方法,第一種是讓第一條數據返回假,第二種是使用limit

查詢庫名

and ord(mid(version(),1,1))>51,確認數據庫版本
使用mysql自帶函數database()查詢得到數據庫名
得到所有的數據庫名schema_name

查表名

MySQL中,表名在information_schema數據庫下tablestable_name字段,對應庫名table_schema
字符型可以使用'+and+(select+count(*)+from+表名)>0+and+''='猜解
搜索型%'and(select count(*)from admin)>0 and '%'='

查字段

MySQL中,字段名存放在information_schema數據庫下columnscolumn_name字段

查數據

用前面獲得的信息即可

常見的SQL注入

  1. 數字型
  2. 字符型
  3. 搜索型(POST/GET)
  4. 堆疊注入

數字型

$sql = "SELECT * FROM sqltest WHERE id=$id";

字符型

字符型SQL注入的關鍵:單引號的閉合

MySQL數據庫對於單引號的規則:
1. 單引號必須成對出現,否則數據庫就會報錯.
2. 如果兩個單引號之間內容爲空,數據庫自動忽略.

字符型注入與數字型注入的區別
數字型:SELECTFROMWHERE 數字型列=值
字符型:SELECTFROMWHERE 字符型列=’值’

$sql="select * from user where username = '$name'";

搜索型

分爲POST/GET,GET型一般用在網站的搜索,POST則用在用戶名的登錄,從form表單的method="get"屬性區分.又稱爲文本框注入.

GET

$sql="select * from user where password like '%$pwd%' order by password";

POST類似字符型,中間用and連接

堆疊注入

原理:SQL中,分號;是用來表示語句的結束.在;結束一條sql語句後繼續下一條語句.這就是堆疊注入.但使用有侷限性

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章