Sqli-Labs 是一個印度人的開源項目平臺况芒。里面包含了基本的各種注入類型,同時又有get和post類型贸弥,以及一些基本的繞過學習迈螟。
項目地址:https://github.com/Audi-1/sqli-labs
Lesson-3 #Get - Error based - Single quotes with twist string (基于錯誤的GET單引號變形字符型注入)
SQL注入中常用的字符:
注釋符號 : --+
select ...from.... : 用于從表中選取數(shù)據(jù)
order by : 用于對結(jié)果集進行排序
union select : 用于合并兩個或者多個SELECT語句的結(jié)果集
concat : 返回字符串連接的結(jié)果
運行測試環(huán)境:http://localhost/sqli-labs-master/Less-4/
輸入ID參數(shù)1:http://localhost/sqli-labs-master/Less-4/?id=1 ,返回正常猬膨,繼續(xù)測試陸續(xù)輸入2角撞,3,4勃痴,5谒所,6....,均返回正常,而且隨著參數(shù)ID值的改變召耘,頁面返回的name和Password的值也會出現(xiàn)不同百炬。
在參數(shù)中嘗試插入單引號,網(wǎng)站沒有報錯:
在參數(shù)中嘗試插入單引號和括號污它,網(wǎng)站也沒有報錯:
測試一下雙引號剖踊,網(wǎng)站報出錯誤信息:
【You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"1"") LIMIT 0,1' at line 1】
根據(jù)我們的輸入的是1",可以推測出
SELECT username from table where id =("input")
測試一下:
查看網(wǎng)頁代碼:
繼續(xù)查詢表字段的列數(shù):
3的時候顯示正常衫贬,4的時候報錯德澈,說明只有三列,輸入錯誤參數(shù)進一步找到查詢點:
information_schema這張數(shù)據(jù)表保存了MySQL服務器所有數(shù)據(jù)庫的信息固惯。如數(shù)據(jù)庫名梆造,數(shù)據(jù)庫的表,表欄的數(shù)據(jù)類型與訪問權(quán)限等。再簡單點镇辉,這臺MySQL服務器上屡穗,到底有哪些數(shù)據(jù)庫、各個數(shù)據(jù)庫有哪些表忽肛,每張表的字段類型是什么村砂,各個數(shù)據(jù)庫要什么權(quán)限才能訪問,等等信息都保存在information_schema表里面屹逛。
Mysql的INFORMATION_SCHEMA數(shù)據(jù)庫包含了一些表和視圖础废,提供了訪問數(shù)據(jù)庫元數(shù)據(jù)的方式。
元數(shù)據(jù)是關于數(shù)據(jù)的數(shù)據(jù)罕模,如數(shù)據(jù)庫名或表名评腺,列的數(shù)據(jù)類型,或訪問權(quán)限等淑掌。有些時候用于表述該信息的其他術語包括“數(shù)據(jù)詞典”和“系統(tǒng)目錄”蒿讥。
SCHEMATA表:提供了關于數(shù)據(jù)庫的信息。
TABLES表:給出了關于數(shù)據(jù)庫中的表的信息锋拖。
COLUMNS表:給出了表中的列信息诈悍。
STATISTICS表:給出了關于表索引的信息。
USER_PRIVILEGES表:給出了關于全程權(quán)限的信息兽埃。該信息源自mysql.user授權(quán)表侥钳。
SCHEMA_PRIVILEGES表:給出了關于方案(數(shù)據(jù)庫)權(quán)限的信息。該信息來自mysql.db授權(quán)表柄错。
TABLE_PRIVILEGES表:給出了關于表權(quán)限的信息舷夺。該信息源自mysql.tables_priv授權(quán)表。
COLUMN_PRIVILEGES表:給出了關于列權(quán)限的信息售貌。該信息源自mysql.columns_priv授權(quán)表给猾。
CHARACTER_SETS表:提供了關于可用字符集的信息。
COLLATIONS表:提供了關于各字符集的對照信息颂跨。
COLLATION_CHARACTER_SET_APPLICABILITY表:指明了可用于校對的字符集敢伸。
TABLE_CONSTRAINTS表:描述了存在約束的表。
KEY_COLUMN_USAGE表:描述了具有約束的鍵列恒削。
ROUTINES表:提供了關于存儲子程序(存儲程序和函數(shù))的信息池颈。此時,ROUTINES表不包含自定義函數(shù)(UDF)钓丰。
VIEWS表:給出了關于數(shù)據(jù)庫中的視圖的信息躯砰。
TRIGGERS表:提供了關于觸發(fā)程序的信息。
查詢一下dvwa數(shù)據(jù)庫中全部的表名:
- http://localhost/sqli-labs-master/Less-4/?id=-4") union select 1,table_name,3 from information_schema.tables where table_schema='dvwa' limit 2,1--+
LIMIT 子句可以被用于強制 SELECT 語句返回指定的記錄數(shù)携丁。LIMIT 接受一個或兩個數(shù)字參數(shù)琢歇。參數(shù)必須是一個整數(shù)常量。如果給定兩個參數(shù),第一個參數(shù)指定第一個返回記錄行的偏移量李茫,第二個參數(shù)指定返回記錄行的最大數(shù)目揭保。初始記錄行的偏移量是 0(而不是 1): 為了與 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #涌矢。
對比一下數(shù)據(jù)庫掖举,和插入SQL語句查詢的結(jié)果一樣:
也可以通過group_concat()查詢:
group_concat()快骗,手冊上說明:該函數(shù)返回帶有來自一個組的連接的非NULL值的字符串結(jié)果娜庇。
查詢users里面的字段:
*http://localhost/sqli-labs-master/Less-4/?id=-4") union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+
查詢username,password字段里面的內(nèi)容:
*http://localhost/sqli-labs-master/Less-4/?id=-4") union select 1,group_concat(username,password),3 from users --+
*PS:我在這里還遇到一個出錯的情況,我感覺應該是權(quán)限的問題方篮,希望有大神可以解惑名秀,我查詢user_id,first_name字段內(nèi)容的時候出現(xiàn)了錯誤:
利用注入神器sqlmap驗證一下:
進一步測試,DBA權(quán)限哦藕溅,欲知后事如何匕得,請聽以后分解:
SQL Injection:就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執(zhí)行惡意的SQL命令巾表。
具體來說汁掠,它是利用現(xiàn)有應用程序,將(惡意)的SQL命令注入到后臺數(shù)據(jù)庫引擎執(zhí)行的能力集币,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網(wǎng)站上的數(shù)據(jù)庫考阱,而不是按照設計者意圖去執(zhí)行SQL語句。