攻击者通过在web界面中嵌入恶意脚本(通常为js代码),造成用户在浏览网页时,控制用户浏览器进行操作的攻击方式
1.反射型
一般是在url构造恶意js,将链接发给目标用户,当用户访问该链接的时候,会向服务器发起一个GET请求来提交一个带有恶意代码的链接
2.DOM型
脚本程序可以通过DOM来动态修改页面内容。
3.持久型
常见的就是在博客留言板,反馈投诉,论坛评论等将恶意代码和正文都存入服务器的数据库,每次用户访问都会触发恶意代码。
弹窗
xss盲打是一种攻击场景,也属于存储型xss
盲打的意思是无法直接在前端看到反馈效果,只有后台能看到输入的内容,从前端无法判断是否存在xss。
这种情况下我们可以存入一些加载恶意脚本的url链接,当管理员查看时,就会获取其键盘记录或者cookie等信息
1.HTML实体化编码
2.黑白名单
3.设置http-only(限制cookie劫持)
4.CSP内容安全策略
5.WAF
攻击者通过跨站请求(利用url短网站诱导点击),以合法的用户身份进非法操作,简单来说盗用你的身份信息,向第三方网站发送恶意请求,包括利用你的身份发邮件,发短信,交易转账等。
1.验证HTTP Referer字段
2.在请求地址中添加token并验证
3.在HTTP头中加入自定义属性并验证
首先CSRF需要登录网站获取你的cookie,才能做下一步攻击。而XSS不需要
xss原理上利用的是浏览器可以直接执行js代码,然后攻击者嵌入构造好的恶意JS代码,让浏览器自动地给服务器端发出请求,一般为get请求。csrf原理上利用的是网站服务器端所有参数都是可预先构造的原理,然后攻击者拼接好具体请求url,可以引诱用户(url一般做短网址让用户不容易看出所提交的参数)提交构造好的请求。
1.扫描内网开放服务
2.向内网任意主机的任意端口发送payload来攻击内网服务
3.DOS攻击(请求大文件,始终保持链接keep-alive always)
4.攻击内网web应用,例如直接SQL注入,xss攻击等
5.利用file、gopher、dict协议读取本地文件、执行命令等
php
http、https、file、gopher、phar、dict、ftp、ssh、telnet
java
http、https、file、ftp、jar、netdoc、mailto
SSRF涉及到的危险函数主要是网络访问,支持伪协议的网络读取。
PHP:file_get_contents()、fsockopen()、curl_exec()等
1.IP地址转换其他进制或点换成句号绕过
2.短网址绕过
3.利用其他协议绕过
在任意能够对外发起网络请求的地方,利用SSRF的成因进行验证。
1.白名单
2.过滤,内网ip,添加不可信域名
3.禁用其他协议
1.文章分享
2.图片下载或加载
3.从远处服务请求资源
外部实体注入攻击,由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的攻击
1.使用开发语言提供的禁用外部实体的方法
2.过滤用户提交的XML数据
由于程序员在对用户文件上传功能实现代码上没有严格限制用户上传的文件后缀以及文件类型或者处理缺陷,而导致用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。
1.网站被控制
2.对文件增删改查,执行命令
3.如果服务器长久未更新,可利用exp提权
1.禁用js绕过
2.修改文件类型绕过
3.大小写,双写绕过
4.文件头绕过
5.二次渲染绕过
6.条件竞争绕过
7.00截断绕过
8.配合解析漏洞绕过
在低版本的Nginx中,php的配置文件中有一个关键的选项cgi.fix_pathinfo默认是开启的,这导致在url中有不存在的文件时,php就会默认向前解析
Apache允许文件有多个后缀名,会按照.来分隔文件后缀,如果有不被识别的后缀便会向前继续解析,直到识别为止。
1.当创建.asp文件目录的时候,在此目录下的任意文件,服务器都会解析为asp文件
2.服务器默认不解析“;”以后的内容,导致xx.asp;.jpg被解析成xx.asp脚本文件
1.文件上传的目录设置权限为不可执行
2.判断文件类型
3.使用随机数改写文件名和文件路径。
4.使用WAF等安全设备
程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时候直接调用此文件,而无需再次编写,这种文件调用的过程被称为文件包含,开发人员一般希望代码更灵活,所以讲被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞,也就是通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致文件泄露甚至恶意代码注入的攻击方式。
include()
require()
include_once()
require_once()
文件包含怎么利用?
1.利用文件包含上传webshell
2.查看系统的敏感信息
1.sysytem()
2.exec()
3.popen()
4.shell_exec()
5.passthru()
1.变量拼接
2.单引号、双引号绕过
3.编码绕过
4.反斜线绕过
1.不要执行外部命令
2.使用自定义函数或函数库来代替外部命令的功能
3.使用escapeshe||arg函数来处理命令参数。
4. 使用safe_mode_exec_dir指定可执行文件的路径。
越权漏洞是一种很常见的逻辑安全漏洞。是由于服务器端对客户提出的数据操作请求过分信任,忽略了对该用户操作权限的判定,导致修改相关参数就可以拥有了其他账户的增、删、查、改功能,从而导致越权漏洞
1.前后端同时对用户输入信息进行校验,双重验证机制
2.执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
3.特别敏感操作可以让用户再次输入密码或其他的验证信息
4.从用户的加密认证cookie中获取当前用户id,防止攻击者对其修改,或在session、cookie中加入不可预测、不可猜解的user信息
5.直接对象引用的加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理
最后,因为平台篇幅的限制,后面的面试题我以图片的形式展示,有需要的同学可以在评论区告诉我!