安全漏洞随笔
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注入攻击。同时,强化日常运维的监控、审计与测试工作,能够进一步提高系统的整体安全性。
3、文件上传漏洞
原理:
文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。
(webshell是一种以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称之为一种网页后门。攻击者在入侵了一个网站后,通常会将这些asp或php后门文件与网站服务器web目录下正常的网页文件混在一起,然后使用浏览器来访问这些后门,得到一个命令执行环境,以达到控制网站服务器的目的(可以上传下载或者修改文件,操作数据库,执行任意命令等)。 WebShell后门隐蔽较性高,可以轻松穿越防火墙,访问WebShell时不会留下系统日志,只会在网站的web日志中留下一些数据提交记录)
getshell案例:https://www.cnblogs.com/roothide/p/13594616.html
分类:
参考https://blog.csdn.net/qq_42263820/article/details/109587682
修复方法:
目录遍历与文件包含的区别:
a)什么是文件包含:开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞。
b)区别与防御:https://blog.csdn.net/qq_36303446/article/details/119445345
4、后台提权
什么场景下需要提权:
提权,顾名思义就是提升权限,当我们getshell一个网站之后,大部分情况下我们的权限是非常低的(一般只是一个apache权限)。这时候为了“扩大战果”,就需要利用提权,来让原本的低权限(如只允许列目录)–>高权限(拥有修改文件的能力),提升一下权限,有助于我们继续往下渗透。
提权思路:
a)linux基础信息收集
uname -a 显示全部系统信息
cat /etc/issue 内核信息。此命令也适用于所有的Linux发行版
cat /etc/passwd 所有人都可看
ps aux | grep root
b)提权场景汇总
passwd文件提权
shadow文件提权
SUID可执行文件提权
Cron Jobs定时任务提权
通配符注入提权
sudo滥用提权
敏感文件提权
跳板用户提权
Linux内核漏洞提权
暴力破解提权
5、污点分析