浅谈安全测试
安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程。它是建立在功能测试基础上进行的测试,主要是对产品进行检验以验证是否符合安全需求定义和产品质量标准的过程。
目的及与常规测试区别
- 提升软件产品的安全质量
- 尽量在发布前找到安全问题予以修补降低风险
- 度量安全等级
- 验证安装在系统内的保护机制能否在实际应用中对系统进行保护,使之不被非法入侵
常见的安全漏洞
1.跨站脚本攻击(XSS)
跨站脚本攻击(XSS, Cross Site Script)通常指黑客通过 “HTML 注入” 篡改了网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。XSS漏洞可被用于用户身份窃取(特别是管理员)、行为劫持、挂马、蠕虫、钓鱼等。XSS 是目前客户端 Web 安全中最重要的漏洞。
XSS 按效果的不同可以分为以下3种。
- 反射型 XSS 攻击:页面仅把用户输入直接回显在页面或源码中,需要诱使用户点击才能成功。
- 存储型 XSS 攻击:XSS 攻击代码会被存储在服务器中,由于用户可能会主动浏览被攻击页面,此种方法危害较大。
- DOM 型 XSS 攻击:通过修改页面的 DOM 节点形成 XSS,严格来讲也可划为反射型 XSS。
2.跨站请求伪造 (CSRF)
跨站点请求伪造(CSRF, Cross Site Request Forgery)。由于重要操作的所有参数都是可以被攻击者猜到,攻击者即可伪造请求,利用用户身份完成攻击操作,如发布文章、购买商品、转账、修改资料甚至密码等。
3.SQL 注入
SQL 注入攻击(SQL Injection),简称注入攻击、SQL 注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。由于在设计程序时,忽略了对输入字符串中夹带的 SQL 指令的检查,被数据库误认为是正常的 SQL 指令而运行,从而使数据库受到攻击,可能导致数据被窃取、更改、删除,甚至执行系统命令等,以及进一步导致网站被嵌入恶意代码、被植入后门程序等危害。
4.XML 注入
和 SQL 注入原理一样,XML 是存储数据的地方,如果在查询或修改时,如果没有做转义,直接输入或输出数据,都将导致 XML 注入漏洞。攻击者可以修改 XML 数据格式,增加新的 XML 节点,对数据处理流程产生影响。
5.URL 跳转
URL跳转漏洞本质上是利用Web应用中带有重定向功能的业务,将用户从一个网站重定向到另一个网站。若服务端未对传入的跳转url变量进行检查和控制,恶意用户可构造一个恶意地址,诱导用户跳转到恶意网站,进而欺骗用户输入用户名和密码来盗取用户信息,或欺骗用户进行金钱交易。
常见的可能产生漏洞的参数名:redirect,redirect_to,redirect_url,url,jump,jump_to,target,to,link,linkto,domain
漏洞产生点:
用户登录、统一身份认证处,认证完后会跳转
用户分享、收藏内容过后,会跳转
跨站点认证、授权后,会跳转
站内点击其它网址链接时,会跳转
6.目录穿越
目录穿越(Directory Traversal),也称为Path Traversal攻击。文件系统中 ../代表上级目录,攻击者可通过一个或多个../跨越目录限制,进入Web应用程序所在的根目录以外的文件夹,任意地存取被限制的文件夹、执行命令或查找数据。通过攻击应用程序源代码、配置文件、重要的系统文件等来攻击网站。
7.命令执行
程序应用有时需要调用一些执行系统命令的函数,如PHP中的system、eval和exec等,若开发人员编写源码时,没有针对代码中可执行的特殊函数入口做过滤,客户端就可以将恶意系统命令拼接到正常命令中,并提交服务端执行,从而造成命令执行攻击。
8.文件上传
Web 应用程序在处理用户上传的文件时,没有判断文件的扩展名是否在允许的范围内,或者没检测文件内容的合法性,就把文件保存在服务器上,甚至上传脚本木马到 web 服务器上,直接控制 web 服务器。(未限制扩展名、未检查文件内容、病毒文件)
漏洞危害
- 继承Web服务程序的权限去执行系统命令(任意代码)或读写文件
- 反弹shell
- 控制整个网站甚至控制服务器
- 进一步内网渗透
9.任意文件下载
一些网站由于业务需求,往往需要提供文件查看或文件下载功能,如果对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载服务器的任意敏感文件,可以是源代码文件、系统敏感文件等,这就是文件下载漏洞。
通过任意文件下载漏洞,攻击者可以对操作系统或程序代码进行深入的研究,然后配合敏感文件中的敏感信息对服务器进行更深层次的入侵。
10.访问控制
访问控制(也称越权)是指用户对系统所有访问的权限控制,通常包括水平权限和垂直权限。访问控制问题是所有业务系统都可能产生的逻辑类漏洞,很难通过日常的安全工具扫描或防护,通常会造成大量用户数据泄露事件。
- 水平越权:同一权限(角色)级别的用户之间所产生的问题,如 A 用户可以未授权访问 B 用户的数据等。
- 垂直越权:不同权限(角色)级别的用户之间所产生的问题,如普通用户可未授权进行管理操作,未登录用户可以访问需授权应用等。
常用的安全测试方法
下面简单介绍下常见的几种安全测试:xss注入、越权及文件上传漏洞。
1、XSS注入方法及验证方法:
XSS 全称(Cross Site Scripting) 跨站脚本攻击, 是web程序中最常见的漏洞之一。攻击者在网页中嵌入客户端脚本(例如JavaScript),当用户浏览此网页时,脚本就会在用户的浏览器上执行,获取用户的Cookie,导航到恶意网站,弹出恶意信息,携带木马等,从而达到攻击者的目的。
XSS发生的原理
XSS之所以会发生,是因为用户输入的内容被浏览器当作了前端代码进行执行。 所以我们需要对用户输入的数据进行HTML Encode处理。 将其中的"中括号", “单引号”,“引号” 之类的特殊字符进行编码。
例如有下面一个textbox
<input type="text" name="address1" value="value1from">
value1from是用户的输入,若用户不是输入value1from,而是输入
那么就会变成
此时嵌入的js代码将会被执行,页面弹出XSS弹框。
再如下面这段代码:
<div>
<img src="/images/handler.ashx?id=<%= Request.QueryString["id"] %>" />
</div>
假如输入
Request.QueryString获取地址栏参数,最终反射出来的HTML代码:
XSS注入常用语句
验证方法
在网页中的Textbox或者其他能输入数据的地方,输入以上注入字符, 看能不能弹出对话框,能弹出的话说明存在XSS漏洞。如在输入框输入:
也可通过查看搜索结果页的源代码来判断是否存在漏洞,即在网站首页输入框输入
提交成功后,查看搜索结果页的源代码,搜索"gaga",如下:
可以看出页面已将输入的字符“<”转义成“%3C”,将“>”转义成“%3E”,浏览器不会直接执行此代码,证明没有xss漏洞。
xss预防措施
- 输入过滤,避免 XSS 的方法之一主要是将用户输入的内容进行过滤。对所有用户提交内容进行可靠的输入验证,包括对 URL、查询关键字、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。(客户端和服务器都要)
- 输出转义。例如:往 HTML 标签之间插入不可信数据的时候,首先要做的就是对不可信数据进行 HTML Entity 编码 HTML 字符实体
- 使用 HttpOnly Cookie将重要的cookie标记为httponly,这样的话当浏览器向Web服务器发起请求的时就会带上cookie字段,但是在js脚本中却不能访问这个cookie,这样就避免了XSS攻击利用JavaScript的document.cookie获取cookie。
2、越权测试
越权漏洞是一种较为常见的安全漏洞,主要分为水平越权和垂直越权。它是由于服务端对客户提出的数据操作请求过分信任,没有对用户的身份做权限鉴权导致的,攻击者修改相关参数就可以对其他账户的数据进行越权操作。顾名思义,水平越权是指用户在权限相同级别下的组,可以进行越权访问、修改、删除数据。垂直越权则是不同级别之间或不同角色之间的越权,如用低权限账户向上越权,访问、修改高权限账户的数据。下面主要介绍下水平越权的检验过程。
检测工具:BurpSuite
BurpSuite是用于攻击web 应用程序的集成平台,包含了许多工具。BurpSuite为这些工具设计了许多接口,以加快攻击应用程序的过程。所有工具都共享一个请求,并能处理对应的HTTP 消息、持久性、认证、代理、日志、警报。常用菜单:Proxy(代理)、Spider(爬虫)、Intruder(暴力破解)、Scanner(安全扫描,是付费功能,可以用appscan工具代替,越权测试不涉及)、Repeater(重新请求)、Extender(扩展插件)。
下载:BurpSuite基于Java开发,先安装JDK环境,再去官网下载,下载完成后配置代理
打开自带浏览器(没有自带浏览器的话,导出证书,再导入证书到浏览器即可)
设置待测网站
测试步骤
比如我们要测试下交流区前台用户编辑自己帖子是否存在水平越权漏洞。首先准备两个同等权限的账号,交流区是按角色分配权限,因此准备两个相同角色(训练营作者)的前台用户即可。注:在后台给训练营作者这个角色分配下“编辑自己帖子”的权限。账号1:张张4621账号2:plmm秀秀
首先登录账号"张张4621",选择一个自己发表的回帖,点击编辑按钮。切换到工具的proxy模块,点击一下intercept is off按钮开始拦截数据。
编辑回帖内容,点击提交按钮。此时可以从拦截到的请求中看到编辑自己帖子使用的是PATCH请求,调用了接口/api/posts,并传递了参数content, id。在这两个参数中可以大概猜出content是内容参数,id是判断该条请求目标的参数,即帖子id。在请求数据页面点击右键,选择“Send to Repeater”将该请求发送到Repeater备用,最后点击forward放行。
再登录用户“plmm秀秀”,选择自己发表过的一个回帖,进入帖子详情页F12看下帖子id等信息,或者同上用工具拦截获取。
切换到 Repeater模块,将刚刚复制的请求中的参数id由 ”5914“修改为"plmm秀秀"的帖子id "5626"。
在Proxy模块点击一下intercept is on按钮停止拦截数据。然后在Repeater模块点击send。可以看到Response提示200 ok,显示修改的还是id为5914的帖子。另开一个浏览器窗口,交流区前台登录“plmm秀秀”,查看“5626”这个回帖,可以看到,帖子内容并没有被修改,证明水平越权失败。
再试试在Repeater模块将主题id和categoryId也修改为"5626"帖子的,点击send,查看返回结果和页面显示。
结果和上面一致,水平越权失败。
水平越权预防措施
- 在web层的逻辑中做鉴权,检查提交CRUD请求(增加、读取查询、更新和删除)的操作者(通过session信息得到)与目标对象的权限所有者(查数据库)是否一致,如果不一致则阻断。
- 对请求中的关键参数进行间接映射,避免使用原始关键参数名,比如使用索引1代替id值123等。
3、文件上传漏洞
文件上传漏洞是指文件上传功能没有对上传的文件做合理严谨的过滤,导致用户可以利用此功能,上传能被服务端解析执行的文件,并通过此文件获得执行服务端命令的能力。
漏洞原理
通常网站Web应用都有一些文件上传功能,比如图片、文档、头像、视频等的上传,当上传功能的实现代码没有严格校验上传文件的后缀和文件类型,攻击者就可以上传一个webshell到一个Web可访问的目录上,并将恶意文件传递给如PHP解释器去执行,之后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。文件上传漏洞危害非常严重,可能导致网站被控制、数据库被链接、系统瘫痪、系统被投毒、同服务器的其他网站沦陷等等极其严重的后果。
检测步骤
首先准备一句话木马:
将后缀手动改为png
打开作家专区,点击上传头像,上传刚刚改完后缀的"图片"(目前作家专区前端已限制了改完后缀的图片上传),假设图片上传成功,利用BurpSuite复制接口请求到Repeater,可以看出前端将头像文件数据转成了base64格式,将文件后缀改回php,点击send
可以看到上传成功了,证明服务端没有对上传文件名的扩展名进行检查,存在一定的漏洞。
文件上传漏洞预防
- 文件头校验:查看上传过来的文件的文件头是否和扩展名匹配。
- 非必要一般的目录可去掉执行权限,上传目录配置为只读,禁止用户上传的文件在后台执行。
- 对上传文件扩展名进行严格过滤,设置白名单机制只允许特定扩展名文件上传,严格过滤扩展名为“.php、.asp、.bat”等可执行文件上传。
以上便是本次分享的全部内容,希望对大家有所帮助,谢谢~