- 常见WEB安全事件 OSASP TOP 10
A1:2017 –注入 A2:2017 –失效的身份认证 A3:2017 –敏感信息泄漏
A4:2017 –XML外部实体(XXE)A5:2017 –失效的访问控制 A6:2017 –安全配置错误
A7:2017–跨站脚本(XSS)A8:2017 –不安全的反序列化 A9:2017 –使用含有已知漏洞的组件 A10:2017 –不足的日志记录和监控
入门常见攻防手段主要是A1注入与A7 XSS脚本
A1:注入
将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。
一些常见的注入,包括:SQL、OS命令、ORM、LDAP和表达式语言(EL)或OGNL注入。所有解释器的概念都是相同的。代码评审是最有效的检测应用程序的注入风险的办法之一,紧随其后的是对所有参数、字段、头、cookie、JSON和XML数据输入的彻底的DAST扫描。组织可以将SAST和DAST工具添加到CI/CD过程中,以便于在生产部署之前对现有或新检查的代码进行注入问题的预警
A7:XSS跨站脚本
存在三种XSS类型,通常针对用户的浏览器:
反射式XSS:应用程序或API包括未经验证和未经转义的用户输入,作为HTML输出的一部分。一个成功的攻击可以让攻击者在受害者的浏览器中执行任意的HTML和JavaScript。通常,用户将需要与指向攻击者控制页面的某些恶意链接进行交互,例如恶意漏洞网站,广告或类似内容。
存储式XSS:你的应用或者API将未净化的用户输入存储下来了,并在后期在其他用户或者管理员的页面展示出来。存储型XSS一般被认为是高危或严重的风险。
基于DOM的XSS:会动态的将攻击者可控的内容加入页面的JavaScript框架、单页面程序或API存在这种类型的漏洞。理想的来说,你应该避免将攻击者可控的数据发送给不安全的JavaScript API。典型的XSS攻击可导致盗取session、账户、绕过MFA、DIV替换、对用户浏览器的攻击(例如:恶意软件下载、键盘记录)以及其他用户侧的攻击。
- 弱口令漏洞
定义:容易被别人猜测或被破解工具破解的口令,仅包含简单数字和字母的口令(可以参考 中国弱口令前100)
攻击:使用字典或工具(burpsuit)进行爆破,或用已知泄露的密码库进行撞库攻击
防御:
· 不使用空口令或系统缺省的口令,因为这些口令众所周之,为典型的弱口令。
· 口令长度不小于8个字符。
· 口令不应该为连续的某个字符(例如:AAAAAAAA)或重复某些字符的组合。
· 口令应该为以下四类字符的组合,大写字母(A-Z)、小写字母(a-z)、数字(0-9)和特殊字符。每类字符至少包含一个。如果某类字符只包含一个,那么该字符不应为首字符或尾字符。
· 口令中不应包含本人、父母、子女和配偶的姓名和出生日期、纪念日期、登录名、E-mail地址等等与本人有关的信息,以及字典中的单词。
· 口令不应该为用数字或符号代替某些字母的单词。
· 口令应该易记且可以快速输入,防止他人从你身后很容易看到你的输入。
· 至少90天内更换一次口令,防止未被发现的入侵者继续使用该口令
- SQL注入
定义:通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统
攻击:注入恶意的SQL命令
攻击步骤:
寻找注入点
获取和验证SQL注入点
获取信息
实施直接/间接控制
攻击载体:GET请求,POST请求,HTTP头,Cookie
通过burpsuit进行攻击或sqlmap进行盲注
注入类型:数字型注入,字符型注入,搜索型注入
基于时间的延迟注入
可联合查询注入
报错形注入
布尔形注入
可多语句查询注入
常见万能密码:(‘用于sql语句闭合,#用于屏蔽后续语句)
1、1‘
2、1’ or 1=1 order by 1 #
3、1‘ or 1=2 union select 1,user from mysql.user
防御:
- 采用sql语句预编译和绑定变量,是防御sql注入的最佳方法
- 严格检查参数的数据类型,还有可以使用一些安全函数,来方式sql注入
- XSS跨站脚本
定义:恶意攻击者在web页面中会插入一些恶意的脚本代码。当用户浏览该页面的时候,那么嵌入到web页面中脚本代码会执行,因此会达到恶意攻击用户的目的。那么XSS攻击最主要有如下分类:反射型、存储型、及 DOM-based型。 反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击
攻击:(反射形)
php插入: 直接插入脚本语言<script>alert(“”)</ script>
通过大小写或双写绕过简单过滤 <ScrIpt> alert(“”)</ ScrIpt> <sc<script>ript>
通过其他形式标签执行脚本语言绕过正则过滤<body οnlοad=alert()> <img scr=x οnerrοr=alert(/xss/)>
防御:对输入(和URL参数)进行过滤,对输出进行编码(白名单和黑名单)
- 文件包含漏洞
定义:在包含文件时候,为了灵活包含文件,将被包含文件设置为变量,通过动态变量来引入需要包含的文件时,用户可以对变量的值可控而服务器端未对变量值进行合理地校验或者校验被绕过,这样就导致了文件包含漏洞
PHP函数:需要开启php.ini中allow_url_fopen , allow_url_include
· include( )
当使用该函数包含文件时,只有代码执行到 include()函数时才将文件包含
进来,发生错误时之给出一个警告,继续向下执行。
· include_once( )
功能与 Include()相同,区别在于当重复调用同一文件时,程序只调用一次
· require( )
require()与 include()的区别在于 require()执行如果发生错误,函数会输出
错误信息,并终止脚本的运行。
· require_once( )
功能与 require()相同,区别在于当重复调用同一文件时,程序只调用一次
攻击:
本地文件包含:
绝对路径:127.0.0.1/xxx/fi/?page=D:/…
相对路径:127.0.0.1/xxx/fi/?page=…/…/1.php
远程文件包含
通过抓包获取发送的链接,再通过绕过访问敏感文件
防御:
尽量不适用前端数据作为文件包含参数
路径限制,过滤非法字符
使用黑名单或者白名单,限制文件访问权限
- WEB文件上传漏洞
定义: 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器。
安全问题:
web脚本
flash的crossdomain.xml
病毒或木马
攻击:
通过抓包 绕过前端文件格式或长度判断,直接更改发送时的文件类型
在文件内部捆绑木马上传
防御:
文件扩展名服务端白名单校验。
文件内容服务端校验。
上传文件重命名。
隐藏上传文件路径。
- WEB安全命令执行漏洞
定义:构造一些额外的“带有非法目的”命令,去欺骗后台服务器执行这些非法命令。
攻击:
执行系统命令函数 php中的system,exec,shell_exec
攻击条件:
调用了系统命令
将用户输入拼接入命令
未对输入进行过滤或过滤措施不严格
攻击方法:
1、&&,| :通过连接符进行命令拼接
2、通过不常用的连接符绕过常见连接符的过滤
防御:
加入白名单
过滤非法字符
禁止危险函数