1、XSS
-
原理:XSS(Cross-Site Scripting,跨站脚本攻击)是由于服务器对输入数据的过滤和验证不严格,攻击者可以在网页中插入恶意的 JavaScript 代码,这些恶意的 JavaScript 代码会被当作响应的一部分返回给客户端。当浏览器解析来自服务器的响应时,它会执行这些恶意的 JavaScript 代码,从而导致攻击者能够执行恶意操作,如窃取用户信息、劫持会话等。
XSS攻击的核心在于攻击者通过HTML的script标签或元素属性来执行JavaScript脚本。 -
分类:XSS攻击可以分为反射型、存储型和DOM-XSS三种类型。
反射型XSS:攻击者输入可控数据到HTML页面中(通常是URL),输入的数据没有被存储,只能在单次请求中生效。
存储型XSS:攻击者输入可控数据到HTML页面(通常是POST表单:评论、留言板、登录框等),输入的数据会被存储到数据库中,攻击的次数比反射型XSS多。
DOM-XSS:攻击者可控数据通过JavaScript和DOM技术输出到HTML中,其实是一种特殊类型的反射型XSS,基于DOM文档对象模型的一种漏洞。 -
触发场景:
反射型:举个例子,比如我们在访问一个链接的时候(http://102.3.203.111/Web/reflectedXSS.jsp?param=value...),这个URL中就带了参数(param=value...),如果服务端没有对参数进行必要的校验,直接根据这个请求的参数值构造不同的HTML返回,让value出现在返回的html中(JS,HTML某元素的内容或者属性)并被浏览器解释执行,就可能存在反射型XSS漏洞。(参考地址:https://cloud.tencent.com/developer/article/1375824)
存储型:用户留言、商品评论区、图片上传、用户个人资料页面等。
DOM型:这种类型的XSS攻击不依赖于服务器端的数据存储,而是发生在客户端,当攻击者利用浏览器解析和动态修改DOM树的过程中,如果未正确过滤或转义来自不可信源的数据,就可能触发DOM-Based XSS。主要有查询、有道翻译场景。(例子参考地址:https://blog.csdn.net/qq_53577336/article/details/122441536) -
测试方法:
手工检测:通过输入特殊字符和脚本代码,检查应用程序是否执行了这些脚本。
自动化工具检测:使用如BurpSuite的XSS Validator插件、XSSer等自动化工具进行扫描。 -
测试工具:
BurpSuite:通过安装XSS Validator插件,结合Intruder模块进行XSS测试;APSCAN;AWVS。 -
工具原理:使用内置的Payload处理器来定制攻击载荷(类似口令暴力破解)。
-
修复方法:防御XSS攻击的关键在于对用户输入进行过滤和转义,确保任何用户提交的数据在返回给客户端之前都被正确地处理。例如,对于服务器端的安全措施,如使用htmlspecialchars()函数,可以将特殊字符转换为HTML实体,从而防止XSS攻击;cookie中设置http-only;响应头设置使用CSP(Content Security Policy)。此外,使用现代Web开发框架和库,这些通常已经内置了防止XSS攻击的机制,也是一个很好的实践。(Django就有防XSS的机制)
2、SQL
-
原理:
SQL 注入就是指 Web 应用程序对用户输入的数据合法性没有过滤或者是判断,攻击者可以在Web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。(https://blog.csdn.net/weixin_49349476/article/details/134193558) -
分类:
-----依据注入点类型分类:
数字类型的注入
字符串类型的注入
搜索型注入
-----依据获取信息的方式分类
~一、盲注
基于布尔的盲注
基于时间的盲注
~二、基于报错的注入
~三、联合查询注入(union联合查询适用于有显示列的注入。我们可以通过order by来判断当前表的列数。4时错误,3时正确,可得知,当前表有3列。)
~四、堆查询注入 (可同时执行多条语句)
-
触发场景:
SQL注入经常出现在登陆页面、涉及获取HTTP头(user-agent / client-ip等)的功能点及订单处理等地方。例如登陆页面,除常见的万能密码,post 数据注入外也有可能发生在HTTP头中的 client-ip 和 x-forward-for 等字段处。这些字段是用来记录登陆的 i p的,有可能会被存储进数据库中从而与数据库发生交互导致sql注入。 -
测试方法:
一:先加单引号'、双引号"、单括号)、双括号))等看看是否报错,如果报错就可能存在SQL注入漏洞了。
二:还有在URL后面加 and 1=1 、 and 1=2 看页面是否显示一样,显示不一样的话,肯定存在SQL注入漏洞了。
三:还有就是Timing Attack测试,也就是时间盲注。有时候通过简单的条件语句比如 and 1=2 是无法看出异常的。
在MySQL中,有一个Benchmark() 函数,它是用于测试性能的。Benchmark(count,expr) ,这个函数执行的结果,是将表达式 expr 执行 count 次 。
因此,利用benchmark函数,可以让同一个函数执行若干次,使得结果返回的时间比平时要长,通过时间长短的变化,可以判断注入语句是否执行成功。这是一种边信道攻击,这个技巧在盲注中被称为Timing Attack,也就是时间盲注。
盲注案例参考地址:https://www.cnblogs.com/qiushuo/p/17485659.html#判断注入类型
问题:SQL注入攻击 - SQL注入无回显,盲注又被封怎么办?
答:如果SQL注入被封锁,开源使用DNSlog进行回显。
-
测试工具:sqlite
-
工具原理:
-
修复方法:
-
使用安全框架与中间件
很多现代Web框架(如Ruby on Rails、Spring Boot)默认会对用户输入进行清理或参数化处理,大大降低了SQL注入的风险。此外,可配置的Web应用防火墙(WAF)也能实时监控并阻止可疑的SQL注入式请求。
···Springboot:mybaties框架
···java语言:PreparedStatemen预编译
···python语言:sqlite3参数化查询
···Django框架的orm -
输入验证与净化
除了预编译和参数化查询,还可以对用户输入进行白名单或黑名单校验。例如,对于日期字段,只接受符合日期格式的字符串;对于整数字段,确保输入是数字类型。
总结:在设计和开发阶段就引入安全性考量,借助于预编译语句、参数化查询、安全框架、输入验证等技术手段,可以有效抵御SQL注入攻击。同时,强化日常运维的监控、审计与测试工作,能够进一步提高系统的整体安全性。
标签:XSS,漏洞,SQL,攻击者,随笔,盲注,输入,注入 From: https://www.cnblogs.com/CaiBeeBlog/p/18529560