SQL注入攻击
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。SQL注入原理:
web架构通常为三层:
表示层、逻辑层、存储层
SQL注入过程:
转义字符处理不当
// 构造动态SQL语句
$sql = "select * from tbl where field = '$_GET['input']'";
// 执行SQL语句
$res = mysql_query($sql);
测试:
在下边的网址后边加一个单引号,就会报数据库错误
http://testphp.vulnweb.com/artists.php?artist=1
.类型处理不当
// 构造动态SQL语句
$sql = "select * from tbl where field = $_GET['user_id']";
// 执行SQL语句
$res = mysql_query($sql);
Mysql内置了一个命令,可以读取文件
* Union all select load_file('/etc/passwd')--
select * from tbl where userid = 1 union all select load_file('etc/passwd')--
该命令会获取数据库管理员的密码
3.查询语句组织不当
user.php?table=user&
4.错误处理不当
即将站点的错误信息暴漏给用户,这样非常危险。
// 构造动态查询语句
$getid = "select * from tbl where userid > 1";
// 执行SQL语句
$res = mysql_query($getid) or die('<pre>'.mysql_error().'</pre>');
5.多个提交处理不当
// 参数是否是一个字符串
if(is_string($_GET["param"])){}
问题:
1.如果web站点禁止输入单引号字符,是否可以避免SQL注入?
寻找SQL注入的方法:
通过get请求
通过post请求
其他http请求,如cookie
freebuf:o
页:
[1]