目录
注入点在orderby之后,怎么注入(具体看收藏“面试问题”)
DOM XSS与反射XSS有啥不同,给你10s,如何快速判断一个XSS是否是DOM XSS
redis 未授权访问及getshell(具体看收藏“面试问题”)
同源策略
同源策略是什么?
同源策略是一种约定,它是浏览器最核心也最基本的安全功能
如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。
可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
它是一个安全策略。所有支持JavaScript的浏览器都会使用这个策略
满足同源的三个条件:
所谓同源是指:域名、协议、端口相同。
同源策略存在的意义
- 非同源下的 cookie 等隐私数据可以被随意获取
- 非同源下的 DOM 可以的随意操作
- ajax 可以任意请求的话,用户的各种隐私肯定会泄露,对用户造成不同程度的损失
同源策略绕过(解决方案)
解决方案有很多种,比如 jsonp,CORS,websocket,nginx 等等,每种方案基本都有各自的适用场景,优缺点,目前普遍场景用的是 nginx + CORS
- JSONP跨域,script标签请求资源不受同源策略限制
- CORS,后端通过拦截器Filter来实现
跨域
什么是跨域
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域
出现跨域的根本原因
浏览器的同源策略不允许非同源的URL之间进行资源的交互
跨域方式
1.CORS
CORS(Corss-Origin Resource Sharing,跨资源共享),基本思想是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应的成功或失败。即给请求附加一个额外的Origin头部,其中包含请求页面的源信息(协议、域名和端口),以便服务器根据这个头部决定是否给予响应。
2.document.domain
将页面的document.domain设置为相同的值,页面间可以互相访问对方的JavaScript对象。
3.jsonp
JSONP由两部分组成:回调函数和数据。回调函数是接收到响应时应该在页面中调用的函数,其名字一般在请求中指定。数据是传入回调函数中的JSON数据。
4.Comet
Comet可实现服务器向浏览器推送数据。Comet是实现方式:长轮询和流
5.WebSocket
WebSocket可在一个单独的持久连接上提供全双工、双向通信。
6.图像Ping
请求数据通过查询字符串的形式发送,响应可以是任意内容,通常是像素图或204响应。
图像Ping最常用于跟踪用户点击页面或动态广告曝光次数。
7.window.name来进行跨域
8.postMessage
跨域解决方法(具体看收藏“面试问题”)
- 设置document.domain解决无法读取非同源网页的 Cookie问题
- 跨文档通信 API:window.postMessage()
- JSONP
- CORS
- webpack本地代理
- websocket
- Nginx反向代理
漏洞
SQL注入
sql的堆叠和联合注入的优缺点
堆叠支持多语句,
效率比联合高
sql注入getshell的条件
1.into outfile(写入后门)
条件:
- web目录具有写权限,能够使用单引号
- 知道网站绝对路径(根目录,或则是根目录往下的目录都行)
- secure_file_priv没有具体值(在mysql/my.ini中查看)
2.--os-shell
--os-shell就是使用udf提权获取WebShell。也是通过into oufile向服务器写入两个文件,一个可以直接执行系统命令,一个进行上传文件 此为sqlmap的一个命令,
利用这条命令的先决条件:
- 要求为DBA,--is-dba(phpstudy搭建的一般为DBA)
- secure_file_priv没有具体值
- 知道网站的绝对路径
- GPC为off,php主动转义的功能关闭
mysql的网站注入,5.0以上和5.0以下有什么区别
5.0以下没有information_schema这个系统表,无法列表名等,只能暴力跑表名。
sql注入information_schema绕过
1.InnoDb引擎
从MYSQL5.5.8开始,InnoDB成为其默认存储引擎。而在MYSQL5.6以上的版本中,inndb增加了innodb_index_stats和innodb_table_stats两张表,这两张表中都存储了数据库和其数据表的信息,但是没有存储列名。
2.sys数据库
在5.7以上的MYSQL中,新增了sys数据库,该库的基础数据来自information_schema和performance_chema,其本身不存储数据。可以通过其中的schema_auto_increment_columns来获取表名。
注入点在orderby之后,怎么注入(具体看收藏“面试问题”)
- 利用报错
- 利用盲注
- 数据猜疑
跨站脚本漏洞(xss)
xss有httponly这么绕过
- 在name赋值个弹窗即可
- 闭合标签绕过
- 单引号闭合绕过
- 双引号闭合绕过
- herf绕过
- 大小写绕过
- 编码绕过
- 双写绕过
- referer头绕过
- type绕过
- agent绕过
- cookie绕过
- %0a绕过
xss绕过waf
JS伪协议
黑名单
大小写混淆
编码绕过
JSFuck 绕过
XSS防御之CSP
定义
CSP(Content Security Policy)指的是内容安全策略,为了缓解很大一部分潜在的跨站脚本问题,浏览器的扩展程序系统引入了内容安全策略(CSP)的一般概念。这将引入一些相当严格的策略,会使扩展程序在默认情况下更加安全,开发者可以创建并强制应用一些规则,管理网站允许加载的内容。
CSP 本质上是建立白名单,规定了浏览器只能够执行特定来源的代码;即使发生了xss攻击,也不会加载来源不明的第三方脚本。 在网页中,CSP可以通过 HTTP 头信息或者 meta 元素定义。
csp绕过
- 测试没有被限制的标签,如img标签未被绕过——绕过方式类比黑名单
- 确定有xss的话可以钓鱼或者采用水坑攻击
Shiro
什么是shiro
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
shiro反序列化获取Key
- 结合Dnslog与URLDNS
- 利用时间延迟或报错
- 结合CookieRememberMeManaer
shiro权限绕过
产生原因
Apahce Shiro 由于处理身份验证请求时出错,存在“权限绕过漏洞”(漏洞编号:CVE-2020-11989),远程攻击者可以发送特制的HTTP请求,绕过身份验证过程,并获得对应用程序的未授权访问。
shiro权限绕过的限制条件
- 网站同时使用shiro和spring
- shiro满足特定的版本
CSRF 和 XSS 和 XXE 有什么区别,以及修复方式
XSS是跨站脚本攻击,用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。修复方式:对字符实体进行转义、使用HTTP Only来禁止JavaScript读取Cookie值、输入时校验、浏览器与Web应用端采用相同的字符编码。
CSRF是跨站请求伪造攻击,XSS是实现CSRF的诸多手段中的一种,是由于没有在关键操作执行时进行是否由用户自愿发起的确认。修复方式:筛选出需要防范CSRF的页面然后嵌入Token、再次输入密码、检验Referer.
XXE是XML外部实体注入攻击,XML中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件读取。修复方式:XML解析库在调用时严格禁止对外部实体的解析。
CSRF、SSRF和重放攻击有什么区别
- CSRF是跨站请求伪造攻击,由客户端发起
- SSRF是服务器端请求伪造,由服务器发起
- 重放攻击是将截获的
DOM XSS与反射XSS有啥不同,给你10s,如何快速判断一个XSS是否是DOM XSS
- 存储型XSS:你发送一次带XSS代码的请求,以后这个页面的返回包里都会有XSS代码;
- 反射型XSS:你发送一次带XSS代码的请求,只能在当前返回的数据包中发现XSS代码;
- DOM型XSS:你发送一次带XSS代码的请求,在返回包里压根儿就找不到XSS代码的影子;
php中造成ssrf的函数
- file_get_contents函数
- fsockopen函数
- curl_exec函数
redis 未授权访问及getshell(具体看收藏“面试问题”)
- 写 webshell 文件
- 利用 写SSH key 进行 getshell
- 通过写corntab的方式进行getshell
工具
什么是 JWT
JWT 即 Json web token,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519)。该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
JWT 的原理
JWT 的原理是,服务器认证以后,生成一个 JSON 对象,发回给用户,以后,用户与服务端通信的时候,都要发送这个 JSON 对象。服务器完全只靠这个对象认定用户身份。为了防止用户篡改数据,服务器在生成这个对象的时候,会加上签名。 服务器就不保存任何 session 数据了,也就是说,服务器变成无状态了,从而比较容易实现扩展。
JWT的构成
- 第一部分我们称它为头部(header)
- 第二部分我们称其为载荷(payload, 类似于飞机上承载的物品)
- 第三部分是签证(signature)
HTTP协议
TCP三次握手四次挥手
三次握手
- 客户端 syn 发送到服务端,变成 SYN_SENT 状态
- 服务端 ack=syn+1 回传syn到客户端,变成SYN_RECV状态
- 客户端 ack=syn+1, 变成ESTABLISHED状态,传输给服务端
- 服务端收到ACK后变成ESTABLISHED状态,建立连接
- SYN标志位为表示请求连接,ACK表示确认
四次挥手
客户端=主动关闭方
客户端FIN->服务端
服务端ACK=FIN+1->客户端,服务端到客户端的连接关闭
服务端FIN->客户端
客户端ACK=FIN+1->服务端
假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,“告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息”。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,“告诉Client端,好了,我这边数据发完了,准备好关闭连接了”。Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,“就知道可以断开连接了”。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!