• 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)注入木马等等。

    环境搭建

    1.启动mysql:sudo mysqld_safe
    2.启动Apache sudo 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.ini
    7. 把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后面加上) # 这样就会只验证用户名,后面的会被#注释

    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 处填:

    ', 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, , , , ', " and x1a;
    防御策略3--数据与sql语句的分离
    通过SQL逻辑分离来告诉数据库到底是哪部分是数据部分,哪一部分是SQL语句部分;
    提供以新的new mysqli()函数, 将这个函数写入config/standary/config.php文件

  • 相关阅读:
    站内信设计
    python 发送邮件例子
    mysql 索引相关知识
    一、mysql分表简单介绍
    redis 学习笔记三(队列功能)
    redis 学习笔记二 (简单动态字符串)
    redis 学习笔记一
    docker部署asp.net core
    win10安装docker
    页面格式化后台的传过来的
  • 原文地址:https://www.cnblogs.com/sunxing/p/6852948.html
Copyright © 2020-2023  润新知