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和#中间插入语句即可。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
sql注入原理与实战(三)数据库操作
|
2月前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
128 5
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
67 5
|
1月前
|
SQL 运维 安全
怎样可以找到SQL漏洞:技巧与方法详解
SQL漏洞,特别是SQL注入漏洞,是Web应用中常见的安全威胁之一
|
2月前
|
SQL 安全 数据安全/隐私保护
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
在构建Python Web应用时,安全性至关重要。本文通过三个真实案例,探讨了如何防范SQL注入、XSS和CSRF攻击。首先,通过参数化查询替代字符串拼接,防止SQL注入;其次,利用HTML转义机制,避免XSS攻击;最后,采用CSRF令牌验证,保护用户免受CSRF攻击。这些策略能显著增强应用的安全性,帮助开发者应对复杂的网络威胁。安全是一个持续的过程,需不断学习新知识以抵御不断变化的威胁。
115 1
|
2月前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
在Python Web开发中,构建安全应用至关重要。本文通过问答形式,详细解析了三种常见Web安全威胁——SQL注入、XSS和CSRF,并提供了实用的防御策略及示例代码。针对SQL注入,建议使用参数化查询;对于XSS,需对输出进行HTML编码;而防范CSRF,则应利用CSRF令牌。通过这些措施,帮助开发者有效提升应用安全性,确保网站稳定运行。
47 1
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,但安全挑战不容小觑。本文剖析Python Web应用中的三大安全威胁:SQL注入、XSS及CSRF,并提供防御策略。通过示例代码展示如何利用参数化查询、HTML转义与CSRF令牌构建安全防线,助您打造更安全的应用。安全是一场持久战,需不断改进优化。
46 3
|
1月前
|
SQL 数据处理 数据库
SQL语句优化与查询结果优化:提升数据库性能的实战技巧
在数据库管理和应用中,SQL语句的编写和查询结果的优化是提升数据库性能的关键环节
|
1月前
|
SQL 监控 关系型数据库
SQL语句性能分析:实战技巧与详细方法
在数据库管理中,分析SQL语句的性能是优化数据库查询、提升系统响应速度的重要步骤
|
1月前
|
SQL 关系型数据库 Serverless
sql注入原理与实战(四)数据表操作
sql注入原理与实战(四)数据表操作