QQ 1640076782

2009年08月29日

SQL 注入, 进而获取管理员账号的方法(外贸建站网络安全)

Filed under: past — 标签:, — past @ 12:09 上午

SQL 注入, 进而获取管理员账号的方法(外贸建站网络安全)

SQL 注入,一般都是用户提交数据的地方出现,如搜索框、登录(注册)框等。对用户输入的数据类型进行检查,向 MYSQL 提交正确的数据类型,这个时刻要注意的问题,所以,一定要在提交数据之后,执行 SQL 语句之前, 对所提交数据进行转义、过滤。

下面举个简单的入侵办法:

//php code start
$user = $_POST["username"];
$password = $_POST["password"];
$sql = “SELECT * FROM user WHERE username=’$user’ AND password = ‘$password’ LIMIT 0,1″;
if ( $t_hRes = mysql_query($sql) )
{
//略…
} //php code end

<form method=post action=”">
Username: <input type=”text” name=”username” size=30><br>
Password: <input type=text name=”password” size=30><br>
<input type=”submit” name=”login” value=”登录”>
</form>

这个表单,如果用户正常字符则没什么,但若输入的特殊符号而又没转义的话,那就出问题的了。
比如我在 username 字段中输入:user’ OR 1=1 #,在 password 输入 123456,则提交的 SQL 语句变成如下:

SELECT * FROM user WHERE username=’user’ OR 1=1 #’ AND password = ’123456′ LIMIT 0,1

由于 # 是 mysql中的注释符, #之后的语句不被执行,实现上这行语句就成了:

SELECT * FROM user WHERE username=’user’ OR 1=1

就这样绕过验证而登录上去了。 -_-|||

如果知道数据库结构,结果更糟,可以写些 UNION SELECT,那数据库就没有任何秘密可言。你的外贸网站的信用卡信息、订单信息等通通泄漏掉。就这样。

ps:收集了些超级niubility的 SQL 过滤函数,有缘再贴。