网络安全-SQL注入实战

简介: 网络安全-SQL注入实战

SQL注入简介

SQL注入是web程序对用户输入数据的合法性没有进行判断,在管理员不知情的情况下进行非法操作。攻击者可以通过提交数据库查询代码,通过程序返回的结果,获取数据库中的信息。SQL注入攻击会导致数据库风险,其中包括刷库、脱裤、撞库。它是目前最危险的Web应用程序漏洞之一。

SQL注入漏洞产生的原因是网站应用程序在编写时未对用户提交至服务器的数据进行合法性校验,即没有进行有效地特殊字符过滤,导致网站服务器存在安全风险

漏洞危害:机密数据被窃取;核心业务数据被篡改;网页被篡改;数据库所在服务器被攻击从而变为傀儡主机,导致局域网(内网)被入侵。

 

修复建议

在网页代码中对用户输入的数据进行严格过滤;(代码层)

部署Web应用防火墙;(设备层)

对数据库操作进行监控。(数据库层)

代码层最佳防御sql漏洞方案

采用sql语句预编译和绑定变量,是防御sql注入的最佳方法。

原因

采用了PreparedStatement,就会将sql语句: "select id, no from user where id=?" 预先编译好,也就是SQL引擎会预先进行语法分析,产生语法树,生成执行计划,也就是说,后面你输入的参数,无论你输入的是什么,都不会影响该sql语句的 语法结构了,因为语法分析已经完成了,而语法分析主要是分析 sql命令 ,比如 select ,from ,where ,and, or ,order by 等等。所以即使你后面输入了这些 sql命令 ,也不会被当成 sql命令 来执行了,因为这些 sql命令 的执行, 必须先的通过语法分析,生成执行计划,既然语法分析已经完成,已经预编译过了,那么后面输入的参数,是绝对不可能作为 sql命令 来执行的,只会被当做字符串字面值参数,所以sql语句预编译可以防御sql注入。

 

实战:



后台界面,最简单的方式就是在登陆后台页面

直接进行注入,系统用户,用户名可直接测试admin,一般系统管理员最常见的用户名就是admin,在添加用户名的地方输入1’,用bp抓包查看返回的参数

惊喜的发现成功报错并没有过滤掉,返回的信息是输入的SQL语法错误。这里存在注入,下面直接把抓取到的post包进行复制,存放在123.txt里。接下来直接用sqlmap进行跑,爆出如下数据库。

接下来选择数据库进行爆表,常见的工具为sqlmap,当然还有别的工具可以使用,但是个人建议

学习的时候还是以手动注入为主要手段,工具进行辅助。

Sqlmap可以直接跑出相关数据库以及相关数据,那么sql注入到底是如何完成这些操作的呢,让我们来详细解释一下sql注入的核心原理。

比如我们使用的登录接口:在登录界面包括用户名和密码输入框,以及提交按钮,输入用户名和密码,提交。

       登录时调用接口/user/login/ 加上参数username、password,首先连接数据库,然后后台对请求参数中携带的用户名、密码进行参数校验,即sql的查询过程。假设正确的用户名和密码为ls和123456,输入正确的用户名和密码、提交,相当于调用了以下的SQL语句。

SELECT * FROM user WHERE username = 'ls' AND password = '123456'

       sql中会将#及--以后的字符串当做注释处理,如果我们使用“' or 1=1 #” 作为用户名参数,那么服务端构建的sql语句就如下:

select * from users where username='' or 1=1#' and password='123456'

       而#会忽略后面的语句,因此上面的sql也等价于:

select * from users where username='' or 1=1复制代码

       而1=1属于常等型条件,因此这个sql便成为了如下,查询出所有的登陆用户。

select * from users

       其实上面的sql注入只是在参数层面做了些手脚,如果是引入了一些功能性的sql那就更危险了,比如上面的登陆接口,如果用户名使用这个“' or 1=1;delete * from users; #”,那么在";"之后相当于是另外一条新的sql,这个sql是删除全表,是非常危险的操作,因此 如果一个系统存在sql注入,那即可通过sql查询这个系统里面的任何数据,当然也可以修改任何数据,这对于一个系统是非常不安全的。

当然这只是最简单的sql注入实例,大部分的时候,简单的sql注入很有可能被转换掉或者被过滤。下一期介绍sql注入绕过和伪装

相关文章
|
1月前
|
机器学习/深度学习 PyTorch TensorFlow
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic,深度学习探索者。深耕TensorFlow与PyTorch,分享框架对比、性能优化与实战经验,助力技术进阶。
|
1月前
|
监控 Linux 测试技术
C++零拷贝网络编程实战:从理论到生产环境的性能优化之路
🌟 蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕C++与零拷贝网络编程,从sendfile到DPDK,实战优化服务器性能,毫秒级响应、CPU降60%。分享架构思维,共探代码星辰大海!
|
5月前
|
运维 Kubernetes 前端开发
如何用 eBPF 实现 Kubernetes 网络可观测性?实战指南
本文深入探讨了Kubernetes网络观测的挑战与eBPF技术的应用。首先分析了传统工具在数据碎片化、上下文缺失和性能瓶颈上的局限性,接着阐述了eBPF通过零拷贝观测、全链路关联和动态过滤等特性带来的优势。文章进一步解析了eBPF观测架构的设计与实现,包括关键数据结构、内核探针部署及生产环境拓扑。实战部分展示了如何构建全栈观测系统,并结合NetworkPolicy验证、跨节点流量分析等高级场景,提供具体代码示例。最后,通过典型案例分析和性能数据对比,验证了eBPF方案的有效性,并展望了未来演进方向,如智能诊断系统与Wasm集成。
199 1
|
1月前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
2月前
|
机器学习/深度学习 人工智能 算法
卷积神经网络深度解析:从基础原理到实战应用的完整指南
蒋星熠Jaxonic带你深入卷积神经网络(CNN)核心技术,从生物启发到数学原理,详解ResNet、注意力机制与模型优化,探索视觉智能的演进之路。
340 11
|
8月前
|
SQL 运维 监控
SQL查询太慢?实战讲解YashanDB SQL调优思路
本文是Meetup第十期“调优实战专场”的第二篇技术文章,上一篇《高效查询秘诀,解码YashanDB优化器分组查询优化手段》中,我们揭秘了YashanDB分组查询优化秘诀,本文将通过一个案例,助你快速上手YashanDB慢日志功能,精准定位“慢SQL”后进行优化。
|
4月前
|
机器学习/深度学习 人工智能 PyTorch
零基础入门CNN:聚AI卷积神经网络核心原理与工业级实战指南
卷积神经网络(CNN)通过局部感知和权值共享两大特性,成为计算机视觉的核心技术。本文详解CNN的卷积操作、架构设计、超参数调优及感受野计算,结合代码示例展示其在图像分类、目标检测等领域的应用价值。
241 7
|
5月前
|
存储 监控 网络协议
HarmonyOS NEXT实战:网络状态监控
本教程介绍如何在HarmonyOS Next中使用@ohos.net.connection模块实现网络状态监控,并通过AppStorage进行状态管理,适用于教育场景下的网络检测功能开发。
188 2
|
5月前
|
机器学习/深度学习 移动开发 供应链
基于时间图神经网络多的产品需求预测:跨序列依赖性建模实战指南
本文展示了如何通过学习稀疏影响图、应用图卷积融合邻居节点信息,并结合时间卷积捕获演化模式的完整技术路径,深入分析每个步骤的机制原理和数学基础。
190 1
|
5月前
|
JavaScript 前端开发 开发工具
HarmonyOS NEXT实战:加载网络页面资源
本课程讲解如何在HarmonyOS SDK中使用Web组件加载网络页面,包括权限配置、页面加载及动态切换。适合教育场景下开发具备网页浏览功能的应用。
141 0