一:黑客视角
1.确定测试目标。首先你要确定测试目标及单位,是服务器,ip,网站还是内外网。
2.分析风险,获得授权。确定好目标后,提前与目标单位确定测试时间,以免引起不必要的惊慌。以及发生意外情况的应急方案。大多数测试方要获得目标单位的书面委托授权后,才能落地实施渗透测试方案。
3.信息收集。渗透测试正式开始之前,需要收集,目标网站,ip或服务器基础信息,如:服务器类型,目录结构,服务器环境,端口,域名,网站注册管理人员信息等。
4.漏洞探测。收集到基础信息后,可以开始漏洞探测了。
以网站为例,是否存在一些常见web漏洞如:sql注入,文件上传,解析漏洞,xss跨站脚本漏洞,xsrf请求漏洞,js漏洞等,常用的扫描工具有:AWVS,APPscan,owasp-zap,nessus等。
5.漏洞利用验证。找到漏洞我们就可以以黑客的视觉尝试利用漏洞传送木马,获权。常用的漏洞利用工具有:sqlmap,beef-xss,burpsuite(功能强大)。
6.信息分析。利用上一步的漏洞来进行精准攻击,看否有防为墙等安全防护设备,是否安装有流量监控,杀毒软件,恶意代码检测等。
7.利用漏洞获取数据。通过实施的攻击,可以获取到目标机网络连接,vpn,路由等,添加 管理账号等,获取后清理相关操作日志,上传文件等。
8.信息整理。接下来就是对本次渗透测试过程中遇到的各种漏洞,漏洞位置,可收集的信息进行整理。
9.形成报告。最后分析完成形成漏洞报告,并对危害进行分析,及发现的问题漏洞提出建议解决方案。
二:普通用户业务流程视角
安全性测试(Security Testing)是指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程,其主要目的是查找软件自身程序设计中存在的安全隐患,并检查应用程序对非法侵入的防范能力,安全指标不同,测试策略也不同。
但安全是相对的,安全性测试并不能最终证明应用程序是安全的,而只能验证所设立策略的有效性,这些对策是基于威胁分析阶段所做的假设而选择的。例如,测试应用软件在防止非授权的内部或外部用户的访问或故意破坏等情况时的运作。
安全性测试一般分为应用程序级别和系统级别:
- 应用程序级别:包括对应数据或业务功能的访问,核实应用程序的用户权限只能操作被授权访问的那些功能或数据。
- 操作系统级别:包括对操作系统的目录或远程访问,主要核实具备系统和应用程序访问权限的操作者才能访问系统和应用程序。
- 软件漏洞,设计上的缺陷或程序问题;
- 数据库的安全性,这也是系统安全性的核心。
2)为什么要进行安全性测试?
为什么进行安全性测试,或者说,安全性到底会引起哪些问题、后果:
1、数据库
提到安全,一个产品或一个网站最需要加强安全防范的就是数据库。如果缺少了安全性测试,在高手的sql盲注下,数据库就会逐步展现在黑客的面前,无论是数据库类型、表结构、字段名或是详细的用户信息,都有无数种手段可以让人“一览无余”。
2、权限
网站一般都规定了什么样的用户可以做什么事。比如版主可以修改所有人的帖子,而普通用户只能编辑自己的帖子,同样游客只能看大家的帖子,这就是简单的权限。如果少了安全性保证,那么就容易有人跳出权限做他不该做的事情。
简单举个小例子,一个登录模块,让你输入用户名密码。我们会老老实实的输入我们的用户名密码,比如"风落几番"-“password”。如果我们刻意的去绕过登录认证呢?
猜想一下这个sql,单说用户名,开发人员很可能会这样去数据库里对比:
Select count(id) from sys_user where username=‘XXX’
当然可能更复杂。如果我们在输入框里输入一段特殊的字符会如何?
‘or’1=1
这是段神奇的字符,因为这样这个sql就变成:
Select count(id) from sys_user where username=’‘or’1=1’
这样,我们就跳过了用户名的验证。。。
3、修改提交数据信息
举例:一个关于在线支付的商城,在安全性测试过程中,通过抓包抓到的提交价格,经过修改再发包可以通过。简单来说就是本来100块钱买的东西,抓包修改为1块就能成功购买。这就成为了一个巨大的隐患。
4、跨站脚本的安全隐患
- HTML注入。所有HTML注入范例只是注入一个JavaScript弹出式的警告框:alert(1)。
- 做坏事。如果觉得警告框还不够刺激,当受害者点击了一个被注入了HTML代码的页面链接时攻击者能作的各种的恶意事情。
- 诱捕受害者,可能会redirect到另一个钓鱼网站之类的,使其蒙受损失。
3)如何进行安全测试?
3.1 安全测试流程
1、提交申请
2、准备测试环境
3、收集基础信息
4、执行渗透测试
5、测试结果分析
6、编写报告
3.2 安全测试的常用方法
可能涉及到的基本知识:
- 软件基本知识:例如http协议、http状态码、数据库操作、中间件、服务器、linux、python、dns、nginx等基础知识。
- 基本的编程语言(c/java/python)、操作系统(windows/linux)、数据库知识(mssql/mysql)。
- 安全漏洞的原理:各种注入、跨站、绕过等等黑客技术的原理和实现。
- 安全漏洞的测试方法:基于原理,了解学习最简单有效的安全漏洞测试方法,可以结合使用部分半自动化工具等。
- 安全漏洞的防范知识:不仅要知道如何去测,还要知道如何去改。
- 监控:更多时候要用监控的方式来查看脚本到底在用什么方式尝试攻击系统,从而采取最合理的方式去避免攻击。
3.2.1 静态代码检查
静态代码检查主要是通过代码走读的方式对源代码的安全性进行测试,常用的代码检查方法有数据流、控制流、信息流等,通过这些测试方法与安全规则库进行匹配,进而发现潜在的安全漏洞。静态代码检查方法主要是在编码阶段进行测试,尽可能早地发现安全性问题。
3.2.2 动态渗透测试
动态渗透测试法主要是借助工具或手工来模拟黑客的输入,对应用软件安装、运行过程的行为监测和分析,进而发现系统中的安全性问题。动态渗透测试一般在系统测试阶段进行,但覆盖率较低,因为在测试过程中很难覆盖到所有的可能性,只能是尽量提供更多的测试数据来达到较高的覆盖率。
3.2.3 扫描程序中的数据
系统的安全性强调,在程序运行过程中数据必须是安全的,不能遭到破坏,否则会导致缓冲区溢出的攻击**。数据扫描主要是对内存进行测试,尽量发现诸如缓冲区溢出之类的漏洞**,这也是静态代码检查和动态渗透测试很难测试到的。
3.3 进行安全性测试的四个角度
3.3.1 用户认证
- 系统中不同用户权限设置;
- 系统中用户是否出现冲突;
- 系统不应该因用户权限改变而造成混乱;
- 系统用户密码是否加密、是否可复制;
- 是否可以通过绝对途径登录系统;
- 用户退出后是否删除其登录时的相关信息;
- 是否可以使用退出键而不通过输入口令进入系统。
3.3.2 网络安全性测试
- 防护措施是否正确装配完成,系统补丁是否正确;
- 非授权攻击,检查防护策略的正确性;
- 采用网络漏洞工具检查系统相关漏洞(常用的两款工具为NBSI 和IPhackerIP);
- 采集木马工具,检查木马情况;
- 采用各种防外挂工具检查程序外挂漏洞。
3.3.3 数据库安全性测试
- 数据库是否具备备份和恢复的功能;
- 是否对数据进行加密;
- 是否有安全日志文件;
- 无关IP 禁止访问;
- 用户密码使用强口令;
- 不同用户赋予不同权限;
- 是否使用视图和存储过程。
3.3.4 Web 安全性测试
- 部署与基础结构;
- 输入验证;
- 身份验证;
- 授权;
- 配置管理;
- 敏感数据;
- 会话管理;
- 加密;
- 参数操作;
- 异常管理;
- 审核和日志记录。
3.4 安全测试常用工具
3.4.1 IBM AppScan
一个领先的web应用安全工具,可自动进行安全漏洞评估、扫描和检测所有常见的web应用安全漏洞,如:SQL注入、跨站点脚本攻击(CSS)、缓冲区溢出等。
3.4.2 Burp Suite
一个用于攻击web应用程序的集成平台,包含大量的安全测试工具,并为这些工具设计了对外访问接口,以加快攻击应用程序的过程。
3.4.3 Metasploit
一款开源的安全漏洞检测工具,可以帮助安全人员和IT专业人士识别安全性问题,挖掘漏洞,攻击漏洞,并评估漏洞风险级别。
3.4.4 Wireshark
适用于Windows和Linux的网络协议分析工具,也是一个很出名的数据包分析工具,可以检查网络流量,是观察TCP/IP异常流量的很好的工具。
3.4.5 Kail Linux
目前比较流行的安全渗透测试平台,包含了最新的安全测试工具,允许用户从CD或者U盘启动,通过U盘来实施安全渗透测试。
3.4.6 HTTP(s)监听工具
如 Fiddle、Burpsuite、Charlies、Postman。
3.4.7 Sqlmap
SQL注入。
3.5 漏洞等级
3.5.1 严重
直接获取重要服务器(客户端)权限的漏洞,包括但不限于:
- 远程任意命令执行、上传 webshell
- 可利用远程缓冲区溢出、ActiveX 堆栈溢出、浏览器 use after free 漏洞、远程内核代码执行漏洞以及其它因逻辑问题导致的可利用的远程代码执行漏洞
直接导致严重的信息泄漏漏洞,包括但不限于:
- 重要系统中能获取大量信息的SQL注入漏洞
能直接获取目标单位核心机密的漏洞。
3.5.2 高危
直接获取普通系统权限的漏洞,包括但不限于:
- 远程命令执行、代码执行、上传webshell、缓冲区溢出等
严重的逻辑设计缺陷和流程缺陷,包括但不限于:
- 任意账号密码修改、重要业务配置修改、泄露
可直接批量盗取用户身份权限的漏洞,包括但不限于:
- 普通系统的SQL注入、用户订单遍历
严重的权限绕过类漏洞,包括但不限于:
- 绕过认证直接访问管理后台、cookie欺骗
运维相关的未授权访问漏洞,包括但不限于:
- 后台管理员弱口令、服务未授权访问。
3.5.3 中危
需要在一定条件限制下,能获取服务器权限、网站权限与核心数据库数据的操作,包括但不限于:
- 交互性代码执行
- 一定条件下的注入
- 特定系统版本下的getshell等
任意文件操作漏洞,包括但不限于:
- 任意文件写、删除、下载,敏感文件读取等操作
水平权限绕过,包括但不限于:
- 绕过限制修改用户资料、执行用户操作。
3.5.4 低危
- 能够获取一些数据,但不属于核心数据的操作;
- 在条件严苛的环境下能够获取核心数据或者控制核心业务的操作;
- 需要用户交互才可以触发的漏洞,包括但不限于:
XSS漏洞、CSRF漏洞、点击劫持。
内测重点漏洞类型:
1、文件上传(webshell 可请求类型html htm shtml txt)
2、越权(无、平行越权、垂直越权)
3、公民敏感信息泄露(姓名、身份证、IP、电话)
4、目录穿越任意文件下载
5、存储型XSS跨站脚本
6、防护措施失效(无防护、验证码,IP验证、登录验证码等)
7、Id可遍历可预测,导致信息泄露,文件泄露
3.6 常见的安全测试用例
三:owasp top 10应用安全风险
TOP1-注入
当不受信任的数据作为命令或查询的一部分发送到解释器时,会发生注入漏洞,例如SQL,NoSQL,OS,LDAP注入(轻量目录访问协议),xpath(XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言),HQL注入等。
危害如下:
注入可以导致数据丢失或被破坏,缺乏可审计性或拒绝服务。注入漏洞有时甚至可导致完全接管主机。
如何防范:
1.使用安全的API,避免使用解释器
2.对输入的特殊的字符进行ESCAPE转义处理。例如:LIKE ‘%xxx%‘ ESCAPE ‘xxx’
使用ESCAPE关键字定义了转义字符“xxx”,告诉DBMS将搜索字符串“%xxx%”中的第二个百分符(%)作为实际值,而不是通配符
3.使用白名单来规范化的输入验证方法
TOP2-失效的身份认证和会话管理(破损认证)
与认证和会话管理相关的应用程序功能往往得不到正确实施,导致了攻击者可以破坏密码,密钥,会话令牌或实施漏洞冒充其他用户身份。
危害如下:
这些漏洞可能导致部分甚至全部账户遭受攻击,一旦攻击成功,攻击者就能执行合法的任何操作
如何防范:
1.使用内置的会话管理功能
2.通过认证的问候
3.使用单一的入口点
4.确保在一开始登录SSL保护的网页
TOP3-XSS(跨站脚本攻击)
跨站脚本是经常出现在web应用中的安全漏洞,其允许恶意web用户将代码植入到提供给其他用户使用的页面中,这些代码包括html代码和客户端脚本。黑客界公识是xss是新型的“缓冲区溢出攻击”
危害如下:
攻击者在受害者浏览器中执行脚本以劫持用户会话,插入恶意内容,重定向用户,使用恶意软件劫持用户浏览器等。
种类:
存储型,反射型,DOM型
如何防范:
1.验证输入
2.编码输出(用来确保输入的字符被视为数据,而不是作为html被浏览器所解析)
TOP4-不安全的对象直接引用
一个已经授权的用户通过更改访问时的一个参数,从而访问到原本其并没有得到授权的对象。
危害如下:
这种漏洞可以损坏参数所引用的所有数据
如何防范:
1.使用基于用户或会话的间接对象访问,这样可防止攻击者直接攻击为授权资源
2.访问检查:对任何来自不受信源所使用的所有对象进行访问控制检查
3.避免在url或网页中直接引用内部文件名或数据库关键字
4.验证用户输入和url请求,拒绝包含./ ../的请求
TOP5-跨站请求伪造(CSRF)
跨站请求伪造,攻击者通过用户的浏览器注入额外的网络请求,破坏网络会话的完整性。浏览器的安全策略是允许当前界面发送到任何地址,因此也意味着如果用户浏览了自己无法控制的资源时,攻击者可以通过控制页面的内容来控制浏览器,发送其精心构造的请求,这些精心构造的请求很难和合法的请求区分开。
危害如下:
攻击者可以让受害者用户修改任何允许修改的数据,执行任何用户允许的操作,例如修改密码,登录注销等。
如何防范:
1.给每个HTTP请求添加一个不可预测的令牌,并保证该令牌对每个用户会话来说是唯一的。
最好的办法就是将独有的令牌包含在隐藏字段中,通过HTTP请求发送,避免在URL中暴露出来。
2.要求用户重新认证或判断他们是一个真实的用户。
TOP6-安全配置错误
安全配置错误可以发生在一个应用程序堆栈的任何层面,包括平台,web服务器,应用服务器,数据库,架构和自定义的代码。攻击者通过访问默认账户,未使用的网页,未安装的补丁的漏洞,未被保护的文件和目录等,以获得对系统为授权的访问。
危害如下;
系统可能在未知的情况下被完全攻破,用户数据可能随着时间被全部盗走或篡改。甚至导致整个系统被完全破坏
如何防范:
1.自动化安装部署
2.及时了解并部署每个环节的软件更新和补丁信息
3.实施漏洞扫描和安全审计
TOP7-限制URL访问失败(缺少功能级访问控制)
这个漏洞也是与认证相关的,这种漏洞具体是指在系统已经对url的访问做了限制的情况下,但这种限制并没有生效。常见的例子是系统没有对用户进行角色的检查,以及用户通过修改URL的action并指向未被授权页面就能访问该页面同样是个漏洞
危害如下:
攻击者很容易就能把网址改成享有特权的网页,这样就可以使用匿名或普通用户访问未授保护的私人页面,从而提升未授权功能和相关数据信息
如何防范:
1.检查管理权限的过程并确保能够容易进行升级和审计
2.默认缺省情况下,应该拒绝所有访问的执行权限。对于每个功能得访问,需要明确的角色授权
3.检查每个功能分配的权限合理有效
TOP8-未验证的重定向和转发
在Web应用中重定向是极为普通的,并且通常重定向所引发的目的是带有用户输入参数的目的url,而如果这些重定向未被验证,那么攻击者就可以引导用户访问他们想要用户访问的站点。
同样,转发也是极为普遍的,本质上转发是在同一个应用中对一个新页面发送请求,并且有时是用参数来定义目标页面的。同样,如果参数未被验证,那么攻击者就可以利用其来绕过认证或是授权检查
危害如下:
攻击者通过重定向可以试图安装恶意软件或诱使受害人泄露密码等铭感信息,通过转发可以绕过访问限制
如何防范:
1.避免使用重定向和转发
2.如果使用了,不要在确定目标时涉及到用户参数
3.如果无法避免使用用户参数,则应确保目标参数值对于当前用户是有效的并已授权
如果是需要登录的,可以从session当中获取登录信息,然后判断
TOP9-应用已知漏洞的组件
组件(例如库,框架和其他软件模块)以与应用程序相同的权限运行。如果利用易受攻击的组件,这种攻击可能会导致严重的数据丢失或服务器接管。使用具有已知漏洞的组件的应用程序和API可能会破坏应用程序防御并实现各种攻击和破坏。
如何防范:
1.识别正在使用的组件和版本,包括所有的依赖
2.更新组件或引用的库文件到最新
3.建立安全策略来管理组件的使用
TOP10-敏感信息暴露
由于代码编写不严谨或应用固有的功能,造成网站服务器信息被非法获取,属于一种低危漏洞。
TOP1-注入
[TOP1-zhùrù]
TOP1-injection