SQL注入漏洞实战演习

简介: SQL注入漏洞实战演习

在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞(在最新的类型中:命令注入、代码注入、xss注入、sql注入等已经合并统称注入漏洞)。一个严重的SQL注入漏洞,可能会直接导致一家公司破产!

原理:SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。

建议阅读:

渗透武器库--sqlmap实战,黑客如何获取你的隐私

渗透武器库--burpSuite实战(最强web安全工具,没有之一)

防御方法:

1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!
本篇文章将讲解如何利用SQL注入漏洞获取数据:

1.数字型注入(POST)
2.数字型注入(GET)
3.搜索型注入
4.xx型注入
5“insert/update”注入
6.“dalete”注入
7.“http header”注入
8.盲注(base on boolian)
9.盲注(base on time)
10.宽字节注入

实战

数字型注入(POST)

1.发现一个选项卡页面如下,主要作用查看邮箱地址。

image.png

2.抓包查看(PS:工具的操作可以查看burpsuite的文章哦!!)

image.png

3.修改包插入or 1=1# 对数据进行遍历,发现可以遍历成功,有漏洞。(PS:输入这条语句在后台中会拼接为select username ,email from member where id=4 or 1=1#)

image.png

数字型注入(GET)

1.发现一个查询框,可以输入字符
image.png

2.直接使用1' or 1=1#走一波查看是否可以直接注入,发现无过滤可以直接注入。

image.png

搜索型注入

1.发现页面有一个搜索框,猜测模糊查询的字段应该是'%查询内容%'

image.png

2.使用%号进行闭合构造1%' or 1=1#试试,成功注入(其实1' or 1=1#也能注入成功图片)

image.png

XX型注入

1.发现一个输入框使用1' or 1=1#进行尝试发现报错,大概意思是说我的语法有错误。

image.png
image.png

2.说我语法错误,使用)号进行构造1') or 1=1#来闭合报错信息

image.png

扩展:基于报错的信息获取
技巧思路:
在mysql中使用一些指定的函数来制造报错,从而从报错信息中获取设定的信息。
select/insert/update/delete
要求:

后台没有屏蔽数据库报错信息,在语法发生错误的时候会输出在前端
updatexml() : 是mysql对xml文档数据进行查询和修改的xpath函数
extractvalue():是mysql对xml文档数据进行查询的xpath函数
floor():mysql中用来取整的函数
updatexml函数的作用就是改变(查找并替换)xml文档中符合条件的节点的值
语法:updatexml(xml_document,XPthstring,new_value)
第一个参数是字符串
第二个参数是指定字符串中的一个位置(Xpath格式的字符串)
第三个参数是将要替换成什么
Xpath定位必须是有效的,否则则会发生错误

“insert/update”注入

1.insert型,发现一个注册页面,点击注册进入

image.png

image.png

2.我们知道insert就是在数据库中添加数据,我们猜测后台的mysql语句应该是insert into user(name,password,sex,phone,address1,address2) value('xxx',123,1,2,3,4) 那我们可以在xxx的位置构造我们的注入语句1' or updatexml(1,concat(0x7e,database()),0) or ' 成功获取数据库名。
image.png

image.png

3.update型,我们先正确注册一个账号,然后登录

image.png

image.png

4.点击修改个人信息,还是和之前一样,我们要想象,后台的mysql语句是怎么执行的,更新我们的信息,需要用到的时候update语句,构造1' or updatexml(1,concat(0x7e,database()),0) or '来获取数据库名。
image.png

image.png

“delete”注入

1.发现一个留言板,既然是delete注入,那肯定是在删除这里。

image.png

2.点击一下删除,使用burpsuite抓包查看,删除使用数字型我们就不用单引号闭合,直接or就行了
image.png

3.构造+or+updatexml(1,concat(0x7e,database()),0)添加到url后面,成功获取到数据库名。
image.png

“http header”注入

1.先登录一下看看。
image.png

2.提示说我的信息被记录了!!!还返回了我的user-agent,那么肯定把我的user-agent记录到数据里了,那我们就从user-agent注入。

image.png

3.抓包在user-agent传个’号看看什么情况,发现有报错信息。
image.png

4.构建' or updatexml(1,concat(0x7e,database()),0) or ' 成功获取数据库名。

image.png

盲注(base on boolian)

表现:
1.没有报错信息
2.结果都只显示两种情况(0或1)
1.布尔型麻烦就在于需要多次尝试来测试出正确的注入点,先正常查询看看。

image.png

2.加个‘号看看,无回显

image.png

3.构建vince' order by 2#试试,有回显。

image.png

4.构建vince' order by 3#试试,无回显。

image.png

5.知道了注入点,只能通过真或者假来获取数据或者跑sqlmap,给出一些基本的盲注语句判断库名长度。

判断库名长度
and length(database())=长度数字#
判断库名的组成
and ascii(substr(database(), 1, 1)) = ascii的表中字母对应的数字#(这里11 代表着第一个数据的第一个字母)
猜解表名,猜解列名也是用这个语法
and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=115

盲注(base on time)

1.Kobe' and sleep(5)# 页面会延迟五秒

image.png

  1. kobe' and if ((substr(database(),1,1))='a',sleep=(5),null)#1ms就返回结果 说明不是 "a" 改为”p”不返回 一直到确定数据库的全称,可以直接使用sqlmap跑或者编写脚本。

宽字节注入

宽字节注入使用条件:
1.使用adds lashes()函数(提交的符号用“/”转义)
2.数据库设置编码为GBK格式
原理:

前端输入%df时,首先经过addslashes()转义变成了%df%5c%27,之后,在数据库查询前,因为设置了GBK编码,GBK编码在汉字编码范围内的两个字节都会重新编码为一个汉字,然后Mysql数据库就会对查询语句进行GBK编码,即%df%5c被编成了图片,而单引号就逃逸出来了,从而形成了注入漏洞。

1.抓包构造payload:vince%df%27 or 1=1# 直接遍历出来了。

image.png

2.如果想要爆表爆列只需要在vince%df%27和#中间插入语句即可。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
25天前
|
SQL 安全 数据库
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
127 77
|
25天前
|
SQL 安全 数据库连接
除了使用Django的ORM,还能通过什么方式在Django中避免SQL注入漏洞?
除了使用Django的ORM,还能通过什么方式在Django中避免SQL注入漏洞?
39 17
|
3月前
|
SQL 数据库 UED
SQL性能提升秘籍:5步优化法与10个实战案例
在数据库管理和应用开发中,SQL查询的性能优化至关重要。高效的SQL查询不仅可以提高应用的响应速度,还能降低服务器负载,提升用户体验。本文将分享SQL优化的五大步骤和十个实战案例,帮助构建高效、稳定的数据库应用。
173 3
|
3月前
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
93 2
|
3月前
|
SQL 缓存 监控
SQL性能提升指南:五大优化策略与十个实战案例
在数据库性能优化的世界里,SQL优化是提升查询效率的关键。一个高效的SQL查询可以显著减少数据库的负载,提高应用响应速度,甚至影响整个系统的稳定性和扩展性。本文将介绍SQL优化的五大步骤,并结合十个实战案例,为你提供一份详尽的性能提升指南。
81 0
|
4月前
|
SQL 关系型数据库 MySQL
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
|
4月前
|
SQL 运维 安全
怎样可以找到SQL漏洞:技巧与方法详解
SQL漏洞,特别是SQL注入漏洞,是Web应用中常见的安全威胁之一
|
4月前
|
SQL 数据处理 数据库
SQL语句优化与查询结果优化:提升数据库性能的实战技巧
在数据库管理和应用中,SQL语句的编写和查询结果的优化是提升数据库性能的关键环节
|
4月前
|
SQL 监控 关系型数据库
SQL语句性能分析:实战技巧与详细方法
在数据库管理中,分析SQL语句的性能是优化数据库查询、提升系统响应速度的重要步骤
|
4月前
|
SQL 关系型数据库 Serverless
sql注入原理与实战(四)数据表操作
sql注入原理与实战(四)数据表操作