美文网首页
Web安全-SQL注入 基本了解

Web安全-SQL注入 基本了解

作者: dawsonenjoy | 来源:发表于2019-09-28 22:37 被阅读0次

介绍

SQL注入攻击,是指通过在前台上传的字符当中嵌入sql语句,从而篡改后台的SQL语句,以达到获取的数据库当中的数据、篡改数据等目的。比如一个用户表中存放着各个用户的账号密码,通过前台输入正确用户名密码,就可以正常登录,那么正常来说,我们输入的就应该是自己的用户名和密码,此时也是正常登录的,如果输错了,肯定是登录失败才对。但是突然有人输入了像这样的用户名和密码:

用户名:用户名
密码:错误的密码' or 1=1 #

可以看出这个人输入的内容不寻常,并不像是单纯的输入了用户名,然后我们再看假如人家后台判断登录用户是否存在的代码是这样的:

"select * from user where username='" + username + "' and password='" + password + "'"

将这个人输入的用户名和密码拼上去以后就变成了这样:

"select * from user where username='用户名' and password='错误的密码' or 1=1 #'

那么我们可以看得出这个SQL语句因为后面的or 1=1一定为真,此时不论密码是啥,都将能够正确的查到这个人的用户信息,结果只要有这个人的用户名,不需要知道密码就能够登录了,这显然是件极其危险的事。
下面我们再来模拟一个简单的SQL注入导致的数据泄露场景(为了简易模拟,本文的后端功能都由flask实现):

简单示例

数据库内容

假设我们创建一个数据库名为:test,里面有三个字段,分别是:name/password/money,分别表示用户名、密码和存款,然后里面存放着数据

被攻击的网站x(端口:5000)
from flask import Flask, request
import os
import pymysql

app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def set():
    html = """
        <form action="/" method="post">
        name:<input type="text" name="name">
        <input type="submit">
        </form><br>
        result:<br>
        """
    if request.method == 'GET':
        return html
    else:
        name = request.form.get("name")
        conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123456", db="test")
        cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
        sql = "select money from user where name='{}'".format(name)
        print("sql:", sql)
        effect_row = cursor.execute(sql)
        row_3 = cursor.fetchone()
        return html + str(row_3)

if __name__ == '__main__':
    app.run(debug=True)
模拟测试
  • 步骤一:现在来同时运行网站x和网站y,然后进入网站x的主页:127.0.0.1:5000/,然后在输入框里依次输入并提交以下语句:
dasdas' union select database()r#

结果可以发现我们的数据库名暴露了出来

dasdas' union select group_concat(name, "-", password) from user#
# #号在sql语句中是注释掉后面的意思

结果可以发现我们的user表里所有的账号密码会被一一列出来

  • 步骤二:可以看看网站后台输出的SQL语句,并把它放到SQL命令行中执行,看看有什么效果?

SQL注入危害

  • 数据库数据泄露
  • 数据库数据被篡改
  • 被删库而跑路
  • ...(反正跟数据库能扯上关系的都可能会产生问题)
  • ...

SQL注入类型

SQL注入攻击的类型特别多,是一个及其危险而又普遍的漏洞攻击,常见的介绍如下:

  • 直接注入
  • 盲注
  • POST注入
  • 堆叠注入
  • ...(反正就是基于sql语句的各种方式注入)

SQL注入防御

上面的示例就是一个简单的SQL注入攻击场景,为了防御这种攻击,应该怎么做呢?下面列出几种常见的防御方法:

  • 过滤、阻止一些如单引号、双引号之类可能导致SQL注入攻击的代码
  • SQL语句避免用字符串形式拼接
  • 可以使用ORM映射操作数据库
  • 对字符进行预编译
  • 注意各种操作数据库的地方是否有这类危险
更多关于SQL注入的内容可以看我以前写过的这方面专题(最早写的,都没怎么整理,可能写的会比较乱)

https://www.jianshu.com/nb/27869366

相关文章

  • Web安全-SQL注入 基本了解

    介绍 SQL注入攻击,是指通过在前台上传的字符当中嵌入sql语句,从而篡改后台的SQL语句,以达到获取的数据库当中...

  • 2020-07-29

    安全渗透测试-sql注入 总目标: 1、sql注入介绍 2、web安全渗透测试分类 3、sql注入原理 4、sql...

  • 跟我一起学NodeJS之安全

    安全 本篇介绍web server (Nodejs)层面上存在的安全问题,并解决 sql注入 sql注入就是我们我...

  • SQL 注入

    什么是SQL注入 SQL注入攻击(SQL Injection),简称注入攻击,是Web开发中最常见的一种安全漏洞。...

  • 关于SQL注入与避免

    什么是SQL注入 SQL注入攻击(SQL Injection),简称注入攻击,是Web开发中最常见的一种安全漏洞。...

  • 避免SQL注入

    什么是SQL注入 SQL注入攻击(SQL Injection),简称注入攻击,是Web开发中最常见的一种安全漏洞。...

  • web安全测试(2)

    本章主要介绍常见web安全漏洞。 一、SQL注入 SQL注入(SQL Injection),是最常见影响非常广泛的...

  • 前端安全

    web安全性测试 SQL注入 所谓SQL注入,就是通过把SQL命令插入到 Web表单提交 或输入域名或页面请求的查...

  • web安全之SQL注入

    2018/07/06 23:41 慕课网web安全之SQ之注入课程学习笔记 什么是SQL注入? 如何寻找SQL注入...

  • 谈谈sql注入之注入工具介绍(六)

    SQL注入攻击是最为常见的Web应用程序攻击技术。同时SQL注入攻击所带来的安全破坏也是不可弥补的。那么sql注入...

网友评论

      本文标题:Web安全-SQL注入 基本了解

      本文链接:https://www.haomeiwen.com/subject/ujfjuctx.html