20169220 <网络攻防实践> 第十二周实验—SQL注入

实验环境

SEED Ubuntu镜像环境配置php

实验须要三样东西,Firefox、apache、phpBB2(镜像中已有):

  • ①运行Apache Server:镜像已经安装,只需运行命令%sudo service apache2 start
  • ②phpBB2 web应用:镜像已经安装,经过http://www.sqllabmysqlphpbb.com访问,应用程序源代码位于/var/www/SQL/SQLLabMysqlPhpbb/
  • ③配置DNS:上述的URL仅仅在镜像内部能够访问,缘由是咱们修改了/etc/hosts文件使http://www.sqllabmysqlphpbb.com指向本机IP 127.0.0.1。若是须要在其余机器访问,应该修改hosts文件,使URL映射到phpBB2所在机器的IP。mysql

    关闭对抗措施

    PHP提供了自动对抗SQL注入的机制,被称为magic quote,咱们须要关闭它。

  • 1.找到/etc/php5/apache2/php.ini
  • 2.找到magic_quotes_gpc = On这一行
  • 3.改成magic_quotes_gpc = Off
  • 4.重启Apache:”sudo service apache2 restartweb

    实验任务

    1.对SELECT语句的攻击

  • 这次任务,你须要经过访问虚拟机内的URL:www.sqllabmysqlphpbb.com。在进入phpBB以前系统会要求你登录。这个登录认证由服务器上的login.php实现,须要用户输入用户名和密码来经过认证。界面以下


    sql

2.对UPDATE语句的攻击

  • 当用户想要在phpBB2中修改他们的资料时,能够点击Profile,而后填写表单修改。用户发送修改请求后,会执行include/usercp_register.php中的一条UPDATE SQL语句。在这条语句中一样有一个SQL注入漏洞,请用它来达到如下目标:在不知道其余人密码的状况下修改其资料。例如:你以Alice登录,你的目标就是修改Ted的资料信息,包括他的密码。攻击成功后你将能够登录Ted的帐号

3.对抗SQL注入

SQL注入漏洞的根本缘由是没有将代码和数据区分开。当组建一个SQL语句时,程序(如PHP程序)知道哪一个部分是代码哪一个部分是数据。不幸的是当SQL语句送往数据库执行时,这个边界被打破,当程序被注入时,SQL解释器看到的边界可能和最初的边界不同。为了解决这个问题,保持服务端程序和数据库看到的边界同样就十分重要。数据库

  • 使用magic_quotes_gpc避开特殊字符。好比修改/etc/php5/apache2/php.ini的magic_quotes_gpc = On,而后重启Apache
  • 使用addslashes()来避开特殊字符
  • 使用mysql_real_escape_string避开特殊字符
  • Prepare Statement
相关文章
相关标签/搜索