常见web安全漏洞介绍
引言
介绍常见web漏洞,参考OWASP top10漏洞,pikachu靶场
1、弱口令漏洞
1.1 原理介绍
只要口令能被猜测到或者出现在弱口令字典中,都算做弱口令。
1.2漏洞识别
如果是Web登录,则需先检查是否存在验证码;接着要核实传输的密码或用户名是否加密;最后还需确认连续输入错误多次是否会触发账号锁定。
1.3攻击方式:
通常会采用弱密码字典来进行破解任务。在Web环境中,则可调用BurpSuite中的intruder插件。对于其他组件,例如MySQL,则建议使用Hydra工具。其中,在MySQL数据库中运行Hydra插件的命令如下:hydra -l admin -P pswtop100.txt mysql://xx.x.x.x/3306结果文件将被保存至xx.txt位置
在社会工程学的基础上,在已知具体信息的情况下生成特定的弱密码字典是可行的策略之一。例如,在已知某人名为刘能并出生于公元一九九七年十一月十二日的情况下,则可相应地构造出如"liuneng1997"、"ln971112"以及"liuneng1112"等弱密码形式作为候选值进行利用。值得注意的是,在GitHub平台上有提供基于Python 2语言环境下的社会工程学相关资源包可供参考下载,请访问https://github.com/WangYihang/ccupp获取详细内容;
当前端对密码实施了加密处理时,可以通过Burp插件中的jsEncrypter功能实现对弱密码字典的同步加密,请参考实践篇|使用jsEncrypter进行前端加密弱口令爆破 - 知乎。
当配置了验证码时
1.4漏洞防御
1、生成并应用验证码。
2、被发现输入错误时会采取分阶段锁定账号措施。
3、当用户尝试设置新密码时会实施严格的安全审查步骤。
4、对用户名和密码数据实施加密处理
2、XSS(Cross Site Scripting)
2.1原理介绍
XSS跨站脚本漏洞是指攻击者通过向网站输入恶意脚本来实现威胁目标的过程,在用户访问时可能导致危险的JavaScript代码被执行。
根据是否经过后端处理以及是否被存储的特点可分为反射性跨站脚本攻击(R_XSS)、存储性跨站脚本攻击(S_XSS)以及DOM基跨站脚本攻击(DOM_XSS)。其中R_XSS具有短暂性特征,在服务器层面进行处理并返回响应;S_XSS会将恶意代码持久化地保存于数据库中,并在后续请求时返回相关内容;而DOM_XSS则利用HTML DOM特性,在浏览器内部执行处理而不涉及服务器层。
2.2漏洞识别
存在输入框,且输入框未进行特殊字符过滤
2.3 攻击方式
在系统中定位并识别存在输入字段的位置,在诸如新建信息记录、留言框等常见区域进行检查;观察对输入内容的实时反馈情况;尝试向系统发送 various payload 模拟攻击行为,并分析其响应效果;特别关注包含恶意代码或潜在安全风险的内容片段(例如 和 $<img src="#" on error="alert('xss')”)。
如果存在过滤机制,则可以通过以下方式规避JavaScript脚本拦截:首先利用标签实现;其次采用javascript:alert(document.cookie)的方式同样有效。
附XSS payload大全:https://github.com/payloadbox/xss-payload-list
2.4防御方式
1、对输入内容进行编码处理或清除/去除。
2、对输出内容进行编码处理或转换成特定格式。
3、配置cookie属性为httponly以防止客户端通过代码获取该cookie。
3、CSRF(cross site request forgery)
3.1原理介绍
跨站请求伪造技术被称为 CSRF。在 CSRF 攻击场景中,攻击方会生成一个假请求数字(通常是一个链接)。随后会诱使目标用户点击该链接。当目标用户点击该链接时,则认为此次 CSRF 攻击已成功完成。因此,在 CSRF 攻击中通常被称作 "one click" 攻击。与之不同的是,在 XSS 攻击中可以直接获取用户的账户权限并实施破坏行为。而 XSS 则可以直接获取用户的权限并实施破坏行为
3.2 攻击方式
一般通过CSRF钓鱼,攻击流程为
1)受害者登陆某系统A获取cookie
2)攻击者引诱受害者访问B
3)B向A发出请求
4)A系统认为请求来自受害者,执行请求
攻击完成
3.3防御方式
- 采用HTTP POST方法处理业务更新接口。
- 引入新的身份验证机制以减少对单一Cookie的安全依赖。
- 配置Cookie属性为httponly选项以增强安全性。
4、sql注入
4.1 原理介绍
前端系统传递的数据未经过严格筛选前就被直接注入到后台处理流程中,在某些特殊情况下会将这些未经验证的数据错误地附加到了SQL语句中进行执行操作。这不仅会导致基础数据库信息受到破坏(如发生数据错位或者字段值溢出),而且可能引发严重的后果(如系统崩溃或数据丢失)。
4.2漏洞识别
寻找搜索输入框,在输入参数后加‘查看是否报错;尝试简单payload 1 or1=1#
通过sqlmap执行扫描,在命令行界面中运行以下指令:首先输入'--dbs'参数以获取数据库名称;接着指定库名为'--dbs'后运行'--tables'选项以显示表信息;最后针对选定的表结构运行'-columns'选项以列出所有字段
4.3漏洞防御
1、对SQL语句进行预先进行优化处理(即进行预编译),各个编程语言或框架各自具有特定的预编译机制。
2、采用安全编码函数(如ESAPI(encoder).encodeForSQL(codec, name))来实现数据的安全传输和存储功能
5、命令注入
5.1 原理介绍
在Web端实施了一种操作,该操作涉及调用系统提供的命令进行执行.当攻击者输入Payload时,该行为导致被攻击系统的恶意代码或命令被拼接到现有指令中进而被执行.
5.2 攻击方式
1、利用管道符进行拼接
Windows系统支持的管道符
“|”:直接执行后面的语句,如 ping 127.0.0.1|whoami ,只执行whoami程序。
OR运算符用于表示条件判断中的逻辑或关系。当前面的语句运行出现错误时(即前者的逻辑值必须为假),系统将自动执行后面的合法指令。例如,在尝试连接服务器时使用 ping 命令并结合 whoami 命令来验证身份。
&运算用于将前后操作串联起来,在前一操作结果不确定的情况下会立即执行后一操作。例如,在 ping 命令时 & whoami 就会立即执行。
“&&”:若前一个语句为假,则整个表达式结果也为假;也不会执行后续操作;前一个条件必须满足。例如:ping 127.0.0.1&&whoami。
Linux系统支持的管道符
“;”:执行完前面的语句再执行后面的。如 ping 127.0.0.1;whoami 。
“|”:显示后面语句的执行结果。如 ping 127.0.0.1|whoami 。
“||”:当前面的语句执行错误时,执行后面的语句,如 ping 127.0.0.1||whoami 。
当逻辑运算符&作用于两个条件时,在前一个条件为假的情况下,则会立即执行后续的操作;需要注意的是该操作可以在前一个条件为真或假的情况下进行
当逻辑运算符&&用于条件判断时,若前一个条件判断结果为假,则会立即报错,并且不会执行后续操作;只有在条件判断结果为真的情况下才会继续执行后续操作。例如:ping 127.0.0.1&&whoami。
“;” 依次执行命令
2、一些bypass技巧
1)关键字拼接
a=ca;b=t;ab /etc/passwd
2)寻找替代命令 如tac
3)编解码
HEX编码解码
base64编解码
4)空格绕过 5)通配符 6)DNS外带 7)利用已有环境变量
5.3 防御方式
应避免使用具有潜在安全风险的函数。例如,在PHP中使用system和exec函数时,请确保谨慎处理输入参数,在Python中则有system和popen函数可用,在Java中则对应于java.lang.Runtime.getRuntime().exec方法等类似的操作需要特别注意安全边界
2、裁剪系统的busybox组件,使得可以执行的系统命令做到最少
3、避免使用root权限启动系统
4、对前端输入进行过滤
6、文件上传漏洞
6.1 漏洞原理
在用户上传头像和附件的过程中,在没有通过安全验证的情况下(其中一种情况是服务器接收了上传内容),或者这些文件包含钓鱼内容并能够被远程访问时,则被认为是中高危漏洞。
6.2攻击方式
1、上传木马文件
木马生成工具https://github.com/NyDubh3/CuiRi
一些一句话木马:
1、过滤../,%2e%2e%2f(编码后) 2、对用户的请求资源设置白名单
10.2防御
若 backend 未对 incoming frontend 值实施严格的安全评估,则 attacker 可能会利用 '../' 方式访问 backend 或执行其他文件。这将导致 backend 上其他目录及其内容被完整遍历出来
10.1漏洞原理
10、目录遍历
1、在执行关键操作之前确认用户身份,并采用token或cookie进行验证。2、嵌入到cookie中的信息应确保无法被预测
9.3防御
3、寻找隐藏的文件路径或特殊接口
2、寻找未进行身份验证的结构
1、更改抓包信息,将id改为他人id
9.2攻击方式
由于系统后端部分运行时采用了不合理的权限控制机制,在处理请求时导致某些用户被授予了与他们相当甚至更高的权限等级。
9.1漏洞原理
9、越权
2、如果不得不传入,采取白名单策略
1、在设计上不要让前端用户直接传变量给包含函数
防御方法:
语言中通常采用内置的文件包含机制来处理代码导入问题。在C语言中这一机制被称为预处理指令(#include),而PHP语言则采用include指令来实现类似功能。当前端内容能够被传递到被包含的部分时,则有可能通过构造恶意文件来达到破坏系统的行为。
8、文件包含漏洞
1、对输入参数进行过滤。2、限制可以访问的文件范围
7.3 防御
3、尝试下载敏感文件
2、测试../../../../../../etc/passwd、../index.php等
通过在Google搜索引擎中输入inurl:解析文件'readfile.php?file='来扫描或分析潜在漏洞,并识别或定位目标系统的管理功能或操作选项。
7.2攻击方式
如果在安全检测机制(包括但不限于数据打包技术)下查看到目标资源地址(即url)以及该资源未被赋予访问权限,则允许修改目标资源路径及名称以实现任意路径下的文件可被下载
7.1漏洞原理
7、任意文件下载漏洞
4)更改头部的contentType
3)将php语句写入jpg echo '' >> pic.jpg
2)将php语句前面加上gif标识头 GIF89
1)前端的文件过滤可以通过禁用防御函数来绕过
2、一些绕过技巧
