点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍,小窗口回复“资源”、“测试工具包”领取测试资源。
本文7045字,阅读约需18分钟
随着互联网的发展,安全问题也显得越来越重要。一个大型的互联网站点,你如果每天查看日志,会发现有很多尝试攻击性的脚本。如果没有,证明网站影响力还不够大。信息一体化的背后深藏着各类安全隐患,例如由于开发人员的不严谨导致为Web应用程序编写的代码质量堪忧,这很有可能被第三方恶意利用,从而未经授权的访问就能获取敏感数据和WEB服务器的控制权。
目前很多所谓的安全测试工程师仅仅停留在使用一些自动化审计工具来检测系统,并对工具检测出来的Bug进行梳理,然后把它提给开发人员。不懂原理,不懂代码,当开发人员也对于安全一窍不通的时候,没办法从自动审计工具上整理下来的Bug。今天就安全测试做一个简单介绍,为将来想从事安全测试或者对网络安全,渗透测试感兴趣的各位做好基础装备技能的普及。
一
安全测试基础知识
XSS简介(1) 什么是XSS?
XSS(Cross Site Scripting)跨站脚本攻击,Web攻击的一种,通过对网页注入可执行代码(HTML代码或JS代码)成功被浏览器执行。
(2) 实施XSS具备的条件?
- 需要向web页面能够注入恶意代码(输入框、url);
- 恶意代码能够被浏览器成功执行;
(3) XSS攻击原理?
用户传入的数据被当做是程序,所以会执行程序。
(4) XSS攻击方式?
- 反射型XSS:用户访问一个被攻击者篡改后的链接时,被植入的脚本会被用户浏览器执行,也称非持久型因为是一次性,仅对当次的页面访问产生影响;
- 反射型XSS场景:带有XSS脚本的链接转成的短链;【在url后跟xss脚本】,网址跳转;
- 存储型XSS:包含XSS攻击脚本的内容会被存储到服务器端,也称持久型,用户读取到内容时会自动执行脚本;
- 存储型XSS场景:其他用户查看别人发布的留言、评论,管理员发布的公告,黑客发布的博客文章;反馈功能,投诉功能,聊天记录功能。
(5) XSS攻击注入点?
- html节点内容:动态生成,包含用户输入的内容,从而包含XSS脚本;
- HTML属性:像img的src、输入框的value等需要用户自行输入的地方;
- JS代码:某个JS代码需要用户传值进入;
- 富文本:富文本编辑框本身保存的内容就包含html标签,用户可输入XSS脚本。
(6) XSS攻击的危害性?
- 获取页面数据:通过document即可获取指定元素的值,如获取用户名称、手机号、住址等【偷取网站任意数据包括用户资料】;
- 获取Cookies:通过document.cookies可以获取网站当前的所有cookies,盗取当前登录用户的登录态,从而冒充被盗用户登录网站甚至后台管理系统【偷取用户密码和登录态】;
- 劫持前端逻辑:可以修改某个操作的反馈内容,譬如点击某个按钮本来应该只提交一个请求,但通过XSS脚本可篡改该请求地址,然后用户提交的信息发送到攻击者封装的接口;或可改变用户跳转的页面【欺骗用户,流量劫持】;
- 发送请求:攻击者可以让用户在不知情的情况下发送某个请求收集用户信息。
(7) 如何防御XSS攻击?
- 浏览器自带防御,X-XSS-Protection,主要防御反射型XSS攻击,如参数出现在HTML内容和属性;
- 对html内容进行转义,譬如将【<>】转义成< > 存入数据库时即转义,或显示时转义;
- 对html属性中的双引号和单引号【"" ''】转义成&quto; '
- CSP1(Content SecurityPolicy)内容安全策略,用于指定哪些内容可执行。
(1) 什么是CSRF?
CSRF(Cross Site Request Forgy)跨站请求伪造,用户访问的网站对恶意网站发出了一些请求,且这些请求是用户不知情的情况下完成的;攻击者盗用受信任用户的身份,以他的名义向第三方网站发送恶意请求,对于服务器来说这个请求是合法的。
(2) CSRF是如何攻击的?
- 站点B向站点A发送请求;
- 请求带站点Acookies;
- 不访问站点A前端;
- referer为站点B;
(3) CSRF攻击的危害性?
- 利用用户登录态
- 用户不知情
- 完成业务请求(盗取用户资金、冒充用户发帖背锅)
- 造成蠕虫攻击
(1) 什么是SQL注入?
SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。
(2) SQL注入原理?
- 寻找到SQL注入的位置;
- 判断服务器类型和后台数据库类型;
- 针对不同的服务器和数据库特点进行SQL注入攻击;
(3) 如何防御SQL注入?
- 检查变量数据类型和格式;
- 过滤特殊符号;
- 绑定变量,使用预编译语句;
(1) 什么是XPath注入?
XPath注入攻击本质上和SQL注入攻击是类似的,都是输入一些恶意的查询等代码字符串,从而对网站进行攻击。
XPath注入攻击,是利用XPath 解析器的松散输入和容错特性,能够在 URL、表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息。
(2) XPath注入原理?
XPath注入攻击主要是通过构建特殊的输入,这些输入往往是XPath语法中的一些组合,这些输入将作为参数传入Web 应用程序,通过执行XPath查询而执行入侵者想要的操作。
(3) 如何防御XPath注入?
- 数据提交到服务器上端,在服务端正式处理这批数据之前,对提交数据的合法性进行验证。
- 检查提交的数据是否包含特殊字符,对特殊字符进行编码转换或替换、删除敏感字符或字符串。
- 对于系统出现的错误信息,以IE错误编码信息替换,屏蔽系统本身的出错信息。
- 参数化XPath查询,将需要构建的XPath查询表达式,以变量的形式表示,变量不是可以执行的脚本。
- 通过MD5、SSL等加密算法,对于数据敏感信息和在数据传输过程中加密,即使某些非法用户通过非法手法获取数据包,看到的也是加密后的信息。
二
安全测试开展
安全测试类型安全测试分为以下几种:
类型 |
描述 |
失效的身份验证机制 |
只对首次传递的Cookie加以验证,程序没有持续对Cookie中内含信息验证比对,攻击者可以修改Cookie中的重要信息以提升权限进行网站数据存取或是冒用他人账号取得个人私密资料(测试对象:可以进行传参的URL,提交请求页面,登录后的Cookie)。 |
会话管理劫持 |
检测Web应用程序会话机制是否存在安全隐患,能否被非法利用(会话劫持,伪装成合法用户)而影响Web应用程序的安全。 |
SQL注入 |
注入攻击漏洞,这些攻击发生在当不可信的SQL语句作为命令或者查询语句的一部分,被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释器,以执行计划外的命令或者在未被恰当授权时访问数据。 |
XPath注入 |
XPath注入攻击是指利用XPath 解析器的松散输入和容错特性,能够在URL、表单或其它信息上附带恶意的XPath 查询代码,以获得权限信息的访问权并更改这些信息。XPath注入攻击是针对Web服务应用新的攻击方法,它允许攻击者在事先不知道XPath查询相关知识的情况下,通过XPath查询得到一个XML文档的完整内容。 |
XSS跨站脚本攻击 |
恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。 |
CSRF跨站请求伪造 |
攻击者通过调用第三方网站的恶意脚本来伪造请求,在用户不知情的情况下,攻击者强行递交构造的具有“操作行为”的数据包。(测试对象:网页中可进行输入的表单)。 |
不安全的直接对象引用 |
在具有导出/下载功能的页面参数中修改内容,WEB服务器便会导出/下载程序源代码或者指定文件(测试对象:URL中有用户参数的地址,可以进行下载操作的地址)或者当开发人员暴露一个对内部实现对象的引用时,例如,一个文件、目录或者数据库密匙, 就会产生一个不安全的直接对象引用。在没有访问控制检测或其他保护时,攻击者会操控这些引用去访问未授权数据。 |
安全配置错误 |
Config中的链接字符串以及用户信息,邮件,数据存储信息等都需要加以保护,如果没有进行保护,那么就是安全配置出现了问题。 |
不安全的加密存储 |
未对需要保护的数据进行加密或者加密算法太弱都是不安全的加密存储。 |
没有限制URL访问 |
系统已经对URL的访问做了限制,但这种限制却实际并没有生效。攻击者能够很容易的就伪造请求直接访问未被授权的页面(测试对象:需要身份验证的页面)。 |
传输层保护不足 |
在身份验证过程中没有使用SSL/TLS,因此暴露传输数据和会话ID,被攻击者截听。它们有时还会使用过期或者配置不正确的证书。(测试对象:登录模块)。 |
未验证的重定向(redirectUrl)和转发 |
攻击者可以引导用户访问他们所要用户访问的站点。而最终造成的后果,重定向会使得用户访问钓鱼网站或是恶意网站。 |
敏感信息泄露 |
许多Web应用程序没有正确保护敏感数据,如信用卡、税务ID和身份验证凭据。攻击者可能会窃取或篡改这些弱保护的数据以进行信用卡诈骗、身份窃取或其他犯罪。敏感数据值需额外的保护,比如在存放或在传输过程中的加密,以及在与浏览器交换时进行特殊的预防措施。 |
功能级访问控制缺失 |
大多数Web应用程序的功能在UI页面显示之前,会验证功能级别的访问权限。但是,应用程序需要在每个功能被访问时在服务器端执行相同的访问控制检查。如果请求没有被验证,攻击者能够伪造请求从而在未经适当授权时访问功能。 |
使用含有已知漏洞的组件 |
组件,比如:库文件、框架和其他软件模块,几乎总是以全部的权限运行。如果使用含有已知漏洞的组件,这种攻击可以造成更为严重的数据丢失或服务器接管。应用程序使用带有已知漏洞的组件会破坏应用程序防御系统,并使一系列可能的攻击和影响成为可能。危害比较严重。 |
缓冲区溢出 |
当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。 |
LDAP注入 |
利用LDAP注入技术的关键在于控制用于目录搜索服务的过滤器。使用这些技术,攻击者可能直接访问LDAP目录树下的数据库,及重要的公司信息。情况还可能比这更严重,因为许多应用的安全性依赖于基于LDAP目录的单点登录环境。 |
篡改输入 |
利用一些命令或者工具等篡改一些字段的值,从而达到恶意的效果。例如,篡改商品的单价和数量等。 |
- 冒充:一个实体假装成一个不同的实体,常和消息篡改和重演一起使用;
- 重演:当消息为了产生非授权效果而被重复时,就出现重演了;
- 消息篡改:数据所传送的内容被改变而未被发觉,并导致非授权后果;
- 服务拒绝:通过向认证/授权服务发送大量虚假请求,占用系统带宽造成关键服务繁忙,使得授权服务不能正常执行,产生服务拒绝;
以下总结一些通用的安全测试用例,但安全测试远不如此,欢迎补充。
(1) 漏洞扫描
对系统的URL进行漏洞扫描,扫描系统开放的端口、服务和存在的漏洞。
(2) 明文传输
定义:对系统传输过程中的敏感内容是明文&密文进行检查。
系统传输敏感信息场景:登录、注册、支付、修改密码。
系统敏感信息:登录密码、支付金额、注册的手机号码、身份证、邮箱等信息。
(3) 越权访问
定义:测试能否通过URL地址获取管理员及其他用户信息
1.出现admin、user、system、pwd等敏感目录的URL地址。
2.垂直越权场景:当系统存在多个不同权限的管理员时,低权限的管理员不能访问或操作到高权限的管理的资源。
3.水平越权场景:当系统存在多个需要登录用户,A用户不能访问B用户的资源。
(4) 反射性跨站脚本
定义:测试系统是否对输入进行过滤或转移,规避用户通过跨站脚本攻击造成风险。
跨站脚本攻击场景:搜索框、输入框、留言、上传文件。
(5) 文件上传
定义:测试能否上传木马、病毒、色情图片等恶意图片。
(6) 越权文件下载
定义:测试URL中是否包含文件名或文件目录,尝试提交参数值查看是否可下载或读取其他目录的文件内容。
文件下载场景:文件下载、文件读取功能。
测试url:包含文件名或文件目录的url。
(7) 短信/邮箱验证
定义:测试短信、邮箱验证方式是否进行安全设置。
触发短信、邮箱验证码验证相关的场景:找回或重置密码、注册、邀请注册、引流活动分享。
(8) 鉴权缺失
定义:测试需要登录、鉴权才可操作的系统中可修改资源的相关接口,鉴权是否可靠。
测试对象:可以修改资源的接口。
(9) 密码健壮性
定义:测试密码、验证码验证的方式是否可靠,是否可以被暴力猜测直至命中。
(10) 数据安全
定义:检查系统中敏感数据的存储是否安全。
敏感数据:密码、身份证、家庭住址、银行卡号、手机号、真实姓名。
三
安全测试常见问题
安全测试的好处?如果黑客利用了系统安全漏洞,对系统进行攻击导致而成,从而导致损失的代价也是不言而喻的。安全测试的好处有如下几个方面:
- 提升产品的安全质量;
- 尽量在发布前找到安全问题予以修补降低成本;
- 度量安全等级(安全测试和找bug一样,我们不可能把系统所有的安全问题都能找到并解决,通过安全测试,我们可以大体的估计系统的安全等级);
- 验证安装在系统内的保护机制能否在实际应用中对系统进行保护,使之不被非法入侵,不受各种因素的干扰。
安全测试是建立在功能测试的基础上进行的测试。简要的说安全测试主要发现包含如下问题:
- 信息泄露、破坏信息的完整性;
- 拒绝服务(合法用户不能够正常访问网络服务);
- 非法使用(非授权访问)、窃听;
- 业务数据流分析;
- 假冒、旁路控制;
- 授权侵犯(内部攻击即局域网攻击);
- 计算机病毒、恶意软件;
- 信息安全法律法规不完善;
- 安全测试不等同于渗透测试,渗透测试侧重于几个点的穿透攻击,而安全测试是侧重于对安全威胁的建模,系统的对来自各个方面,各个层面威胁的全面考量。安全测试侧重系统可能会来自哪个方面的威胁,正在遭受哪些威胁,以及系统可抵御什么样的威胁,安全测试涵盖渗透测试的部分内容。
- 渗透测试着重点在攻击,渗透测试的目的是攻破软件系统,以证明软件系统存在问题。安全测试的着重点在防御,对整个系统的防御的功能进行一个系统的考虑。
- 渗透测试的目的是攻破系统,所以只要选择一些薄弱的环节,选择一些点来攻击系统,达到攻破系统的目的就可以了。安全测试必须从整个的防御面上来考虑系统的安全性。
安全测试流程包括:提交申请、准备测试环境、收集基础信息、执行渗透测试、测试结果分析、编写报告。
安全测试平台有哪些?
- 乌云网:http://www.anquan.us/
- 漏洞盒子:https://www.vulbox.com/
- 360网站安全检测:http://webscan.360.cn/
- 其他:appsans、axws
安全测试如下:
名称 |
介绍 | |
IBM AppScan |
一个web应用安全工具,可自动进行安全漏洞评估、扫描和检测所有常见的web应用安全漏洞,如:SQL注入、跨站点脚本攻击(CSS)、缓冲区溢出等。 | |
Burp Suite |
一个用于攻击web应用程序的集成平台,包含大量的安全测试工具,并为这些工具设计了对外访问接口,以加快攻击应用程序的过程。 | |
Metasploit |
一款开源的安全漏洞检测工具,可以帮助安全人员和IT专业人士识别安全性问题,挖掘漏洞,攻击漏洞,并评估漏洞风险级别。 | |
Wireshark |
适用于Windows和Linux的网络协议分析工具,也是一个很出名的数据包分析工具,可以检查网络流量,是观察TCP/IP异常流量的很好的工具。 | |
Kail Linux |
目前比较流行的安全渗透测试平台,包含了最新的安全测试工具,允许用户从CD或者U盘启动,通过U盘来实施安全渗透测试。 |
最后,如果有什么补充的点,欢迎在文末评论区留言评论哦。
更多系列文章
敬请期待
我是CoCo,计算机科学与技术专业,深漂大厂互联网民工(女),坐标深圳。5年工作经验,3年持续输出技术文。ITester软件测试小栈(ID:ITestingA)号主,专注于软件测试技术和宝藏干货分享,每周准时更新原创技术文章,每月不定期赠送技术书籍,愿我们在更高处相逢。喜欢记得星标⭐我,每周及时获得最新推送,第三方转载请注明出处。
想获取更多最新干货内容
快来星标 置顶 关注我
,