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

「网络安全」干货SQL注入攻击思路手法总结(上)

toyiye 2024-06-21 12:35 8 浏览 0 评论

一、前言

本文为自己对SQL注入这个攻击手法的理解,跟大家一起分享SQL注入知识。

分上下篇,上篇为攻击手法概括,初稿不会写太多,后面会更新;下篇为防御篇,会把一些常见的,不常见地写进去。

二、概念

SQL注入漏洞之所以会出现就是开发人员针对代码编写开发web应用程序过程中,未对使用者输入的可控参数的合法性进行有效判断和过滤。从而造成被别有用心之人,利用“参数可控”特性将恶意参数带入数据库中执行,造成了恶意的SQL语句对数据库执行行为。

归结出两个条件,引起SQL注入:

1.传入参数可控,使用者可以对传入数据库的参数变量进行操作。

2.应用过滤不当,前端或者web应用、框架等未对使用者做好隐藏执行语句和传入参数的严格过滤。

SQL注入的关联性

其实“注入”这个行为,也是一种对数据库的操作。这个行为的对敏感信息造成泄漏,所以判定成恶意地“注入”,实际上与用户的普通操作别无二致,在开发过程中,应该对用户的“操作”进行过滤和规范,尽量减少SQL注入的出现。

SQL注入的注入点与脚本语言关系不大,只和数据库类型相关。就拿php站点和java站点来说,php站点会爆出更多的漏洞,因为java中存在预编译机制,所以相较来说sql注入更少,这是语言特性决定的。但是语言特性和数据库没有强关联,在漏洞通报中出现SQL注入,不会通报用何种语言编写,只会出现是何种数据库。

所以SQL注入只和数据库类型有关系,脚本语言只是发现注入点的一个门户。

三、注入思路

这里给大家分享一些学习资料及思路大纲可【点击查看】

测试方式

黑盒测试:url、回显、报错、延时、布尔状态等等

白盒测试:代码审计

攻击方式选取

参数类型>>【闭合方式】

数据库类型>>【payload的选择和语句组合】

提交方式>>【传参的方式可以绕过某些防护设备】

数据查询方式>>【是否有回显,回显点;延时注入的模糊判断;二次注入的数据呈现;工具有时候无法对所有数据捕获】

传输时加密>>【要提交对方可以识别的参数】

注入权限>>【拿到的权限是否可以造成威胁、扩大威胁】

攻击方式的选取应该存在多角度,但是一定离不开脚本语言、数据库类型和数据传输。

注入危害

单个数据库拿权>>【考虑低权限提权,查看是否存在可利用函数和扩展】

多个数据库拿权>>【尝试寻找信息泄露多角度提权,尝试使用高级函数、跨库提权】

后台数据泄露>>【寻找、构筑路由,寻找管理员账号、历史配置文件等】

web权限丢失>>【尝试对网站功能点测试】

服务器权限丢失>>【进行横移;站库分离时,从数据库拿到宿主服务器的权限;根据当前数据库类型和服务器的安全性决定】

点到面突破,数据库中可以包含许多信息,这已经不是单纯SQL注入,可以发展到其他攻击面进行渗透。

特点注入

语言只决定SQL注入产生概率>>【确定网站使用的语言,根据不同的语言特性进行注入,提高效率】

数据库类型决定SQL注入的过程>>【每种数据的语句存在差异,这样的差异决定注入的思路】

SQL注入需要人工配合>>【工具存在一定的局限性,部分工具对于数据回传没有判定从而忽略注入点】

存在防护设备下注入>>【判定防护设备,可以尝试“旧瓶装新酒”对旧思路加工再注入;分块、编码、、垃圾数据、带外、中间等注入】

有目的去注入,才会使攻击效率提高。SQL注入通过多维度确定对方信息,能有效选取payload和思路。

四、常见注入方式

1.盲注

所谓盲注,就是我们在注入过程中,无法获得直接的回显或者有效信息去判断注入点是否存在,需要借助一些方法去进行验证和获取返回的数据。

1.布尔盲注:执行SQL语句后,只会存在两种结果。通过构造逻辑表达式判断数据的具体内容。

2.时间盲注:因为数据传输存在时间差,可以利用sleep()函数等,去判断构造的逻辑表达式是否成功获取数据。

3.报错盲注:通过数据库的特殊函数的报错强制使参数在报错页面输出。这种函数往往会带出其他信息,可以扩展打击面。

2.堆叠注入

利用数据库特性,进行多语句执行。

但是限制较大,受API、数据库类型、权限、网站架构等限制。一般多见于CTF比赛中,但是实际渗透中,如果存在多语句可执行,那么可以尝试,也许有意外收获。

已知支持的数据库类型有: mysql、SQL-Server、PostgreSQL。

3.二次注入

二次注入其实就是,先注入数据后再注入,等同于一次注入。攻击者先构造出特定语句存入数据库,当攻击者对存入数据或者语句进行读取时出现注入点,这就是“二次”所在。

其实是一次内鬼之战,攻击者第一次输入的数据被认为是“安全”时,存入数据库内被转移,被转移的数据默认是安全的。然后第二次输入时,调用时即使输入数据没被转移,也可能被判定成“安全”,这时造成二次注入。

4.差异化注入

注入时,需要注意数据库类型和网站架构。不同的数据库类型存在差异,利用这种差异进行注入攻击。

access数据库的偏移注入:知道表名而不知道列名时,利用“*”对其拆解,当到达一定长度时返回正常页面。

mysql数据库的结构利用:因为mysql数据库的特性,库名-表名-列名-数据层层递归,mysql5或以上存在三张特殊的表(information_schema.schemata/tables/colusmn),进行间接查询。

sqlite数据库的隐藏表利用:sqlite文件中存在一张隐藏表格 sqlite_master ,该表格记录下建表时的信息。

Mongodb数据库闭合注入&数组绑定注入:mongodb是一种非关系型数据库,可以利用构造数组后使用ne(等同于>等字符)进行注入。

5.基于场景的注入

host注入:因为不同语言和开发逻辑,获取IP的方法都是不一样的。那么在数据包中有一个HOST字段,如果该字段可控,并且获取到IP地址数据被写入数据库中,那么就有机会存在HOST注入。

XFF注入:这个比较有意思,和XRIP字段一样,用于记录访问者的IP,这个字段记录“真实IP”。但是一旦这个字段被修改,返回中存在“XXIP无法访问该资源”等类似语句时,就代表可控,可控也可以搞一波。

SQL注入本质上也是一种对数据库的操作,获取我们想要的信息。

相关推荐

为何越来越多的编程语言使用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)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码