20169221 2016——2017《网络攻防》SQL注入

准备知识

1.SQL语言
结构化查询语言(Structured Query Language)简称SQL:是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
2.SQL注入
SQL注入:SQL注入能使攻击者绕过认证机制,彻底控制远程服务器上的数据库。SQL是结构化查询语言的简称,它是访问数据库的事实标准。目前,大多数Web应用都使用SQL数据库来存放应用程序的数据。几乎全部的Web应用在后台都使用某种SQL数据库。跟大多数语言同样,SQL语法容许数据库命令和用户数据混杂在一块儿的。若是开发人员不细心的话,用户数据就有可能被解释成命令,这样的话,远程用户就不只能向Web应用输入数据,并且还能够在数据库上执行任意命令了。
3.SQL注入危害
1)非法读取、篡改、添加、删除数据库中的数据。
2)盗取用户的各种敏感信息,获取利益。
3)经过修改数据库来修改网页上的内容。
4)私自添加或删除帐号。
5)注入木马等等。php

环境搭建

1.启动mysql:sudo mysqld_safe
2.启动Apachesudo service apache2 start
3.配置DNS:sudo vim /etc/hosts

4.配置网站文件:sudo vim /etc/apache2/conf.d/lab.conf

5.输入 sudo service apache2 restart 重启服务
6.关闭php配置策略:sudo vim /etc/php5/apache2/php.inimysql

  1. 把magic_quotes_gpc=On 改成 magic_quotes_gpc = Off

实验内容

1.lab1 select语句的sql注入
访问:www.sqllabcollabtive.com;当咱们知道用户而不知道到密码的时候,能够怎么登录?
查看登录验证文件:·sudo vim /var/www/SQL/Collabtive/include/class.user.php·
修改第375行
重启一下
在$user后面加上) # 这样就会只验证用户名,后面的会被#注释
web

2.lab2 update语句的sql注入
Collabtive平台中能够更新用户信息,咱们要实现经过本身的用户去修改别人的用户信息
访问用户编辑连接:http://www.sqllabcollabtive.com/manageuser.php?action=editform&id=1
在Collabtive web应用程序中,若是用户想更新他们的我的资料,他们能够去个人账户,单击编辑连接,而后填写表格以更新资料信息。在用户发送更新请求到服务器,一个UPDATE SQL语句将建造在include/class.user.php。这句话的目的是修改用户表中的当前用户的配置信息。有一个在这个SQL语句中的SQL注入漏洞;sudo vim /var/www/SQL/Collabtive/include/class.user.php
咱们会发现​sql语句为:SELECT ID WHERE name=​'$user',而且company的位置是存在注入漏洞,原理同lab1。这样咱们就能够越权来修改其余用户的信息及密码;咱们使用任意用户,如: bob bob 进行登陆;在编辑用户的位置:user 填 ted 用户;
Company 处填:sql

', pass = '9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684' WHERE ID = 4 # '
注:这里的 9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684 就是pass的md5值;

修改后退出当前用户,使用ted用户登陆,这个时候ted用户的密码就是pass。
数据库

防护策略

1.SQL注入漏洞的根本问题是数据与代码的分离失败,所以咱们能够针对这个缘由进行防护
2.防护转义特殊字符使用,默认开启magic_quotes_gpc,将magic_quotes_gpc值设为On。
3.避免使用特殊字符
MySQL提供一个函数 mysql_real_escape_string(),这个函数能够用来过滤一些特殊字符;如\x00, \n, \r, , ', " and \x1a;
防护策略3--数据与sql语句的分离
经过SQL逻辑分离来告诉数据库究竟是哪部分是数据部分,哪一部分是SQL语句部分;
提供以新的new mysqli()函数, 将这个函数写入config/standary/config.php文件apache

相关文章
相关标签/搜索