【业务安全测试白皮书】收录常见的业务安全问题和其测试方式

大部分公司都有自己的安全团队,负责展开巨大的安全保障网,他们很难细致到每个需求,及时在上线后被发现,很多时候也有一些晚了。

一、常用安全测试工具

详细的调研信息可以看这篇文章:https://blog.csdn.net/qq_42905388/article/details/135650836?spm=1001.2014.3001.5501

1.1 Burp Suite

集成化的渗透测试工具(代理、模拟会话超时、ssrf等等功能)
免费版下载:https://portswigger.net/burp/communitydownload
tips:免费版的Burp Suite会有许多限制,很多的高级工具无法使用。
专业版下载参考:https://www.sqlsec.com/2019/11/macbp.html#toc-heading-3
tips:专业版与免费版的主要区别有:1.Burp Scanner 2.工作空间的保存和恢复 3.拓展工具,如Target Analyzer, Content Discovery和 Task Scheduler

使用注意点:

1、burpsuite工具抓取https包需要在浏览器中导入burpsuite的证书。

2、burpsuite是使用的java来进行编写,而里面提供的一些插件,却有可能并不是java语言,而是python、ruby。为了可以使用这些插件,需要在burpsuite中配置环境。

3、准备2个jar包:jruby- complete-9.2.8.0.jar 和 json- standalone-2.7.0.jar。

4、按照下图步骤,安装上述2个jar包:
在这里插入图片描述看到这样子,就已经导入成功,后续就可以顺畅使用bp的小插件啦~
在这里插入图片描述

1.2 Sql Map

sql注入神器
环境准备:python2

官方网站:http://sqlmap.org/,

下载地址:https://github.com/sqlmapproject/sqlmap/zipball/master

各种姿势使用参考:https://www.cnblogs.com/php09/p/10404560.html

1.3 XSStrike

环境准备:python3

需要安装三个库:tld、fuzzywuzzy、requests

安装教程+使用参考:https://blog.csdn.net/lady_killer9/article/details/109105084

更多安全测试工具参考文章中【特定漏洞测试工具】:https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/zh/appendix/appendix_a_testing_tools.html

二、常见的安全测试方法

2.1 常见的服务端安全测试方法

注:方便大家了解更多的漏洞,burpsuite官网提供了靶场让大家实验:https://portswigger.net/web-security/all-labs

2.1.1 会话安全模块
漏洞1:cookie仿造

描述:替换Cookie中重要信息
测试方法:
使用一个账号登录,找一个可以证明身份的页面,例如直播中心or直播间送礼,刷新该页面拦截请求,观察 Cookie 中的字段和值,例如 DedeUserID=xxx,把 xxx 改成 另一个人的,forword 放行,页面显示 另一个人 的信息,则存在此问题。
在这里插入图片描述

漏洞2:session会话固定

描述:session是应用系统对浏览器客户端身份认证的属性标识,在用户退出应用程序时,应将客户端session认证属性清空。如果未能清空客户端session标识,在下一次登录时,系统会重复利用该session标识进行认证会话。攻击者可以利用漏洞生成固定session会话,并诱骗用户利用攻击者生成的固定会话进行系统登录,导致用户的会话认证被窃取。

测试方法:
登录系统成功后,请求任意系统页面信息,拦截其请求包,观察其session ID,注销登录后继续查看sessionid是否变化,之后重新登录系统,再重新请求系统页面,观察其sessionid,是否与上次登录相同,如果相同,则存在风险。
在这里插入图片描述

漏洞3:会话注销

描述:session是应用系统对浏览器客户端身份认证的属性标识,在用户注销或退出应用系统时,系统应将客户端session认证属性标识清空。如果未能清空session认证会话,该认证会话会持续有效,此时攻击者获得该session认证会话导致用户权限被盗取。

测试方法:

在已经登录授权的系统页面使用burpsuite工具进行请求数据截取,将数据包中的session认证参数进行保存和记录。

首先,拦截请求包,右键选择send to repeater:
在这里插入图片描述
接着,在repeater中看到该请求包:

在这里插入图片描述
点击burpsuite中的go,观察其返回结果。

若显示账号未登录等信息,响应包中未返回信息,则证明该session会话已注销。

若返回包仍然可以正常请求数据,则存在漏洞。

漏洞4:CSRF

描述:CSRF 是一种强制最终用户在web应用认证的情况下执行操作的攻击。通过一些社会工程学技巧的帮助(比如通过电子邮件或聊天工具发送链接),攻击者能够让用户执行攻击者想要的操作。当面向普通用户时,一次成功的CSRF利用可以获取用户的数据。如果面向的用户是管理员账户的话,CSRF攻击能够攻破整个web应用系统。

测试方法:

1.Burp Suite抓取到合法用户的某些操作发送到CSRF Poc中:
在这里插入图片描述
2.更改参数,生成脚本,浏览器测试,如果有CSRF漏洞就会利用合法用户的登录态去操作非法操作:
在这里插入图片描述

2.1.2 身份验证(权限验证)
漏洞1:水平越权

描述:用户A和用户B是同级用户,但是用户A除了能操作查看自己的信息外,还能对用户B进行操作以及信息的查看

测试方法:

若系统相同权限的用户所拥有的个人资源不同,则需注意请求是否包含用户id或订单id等id类唯一标志,尝试修改唯一标示,观察是否能查看或操作到不属于当前用户的资源信息。若查看或操作成功,则证明存在水平越权。
在这里插入图片描述

漏洞2:垂直越权

描述:用户A的权限小于用户B的权限,但是用户A可以进行用户B特有的操作,比如可以进行超级管理员操作

测试方法:

若系统存在不同权限的用户,如系统存在管理员和普通用户两种权限。则在普通用户的请求报文中,替换请求路径为管理员才能访问的路径,观察请求是否正常返回。若替换后请求正常返回业务数据,则证明存在垂直越权。
在这里插入图片描述

漏洞3:验证码重复使用

描述:验证码没有过期时间,可以重复给不同人使用

测试方法:

图形验证码:获取包含验证码的请求报文,输入正确验证码及错误的请求的信息,多次发送请求,如果每次验证码验证都通过,则存在验证码重复使用问题
短信验证码:获取验证码后,5分钟后输入正确验证码,观察验证码是否失效。若未失效,输入任意错误验证码,尝试n次以后,再输入正确验证码,观察验证码是否失效。若未失效,则存在验证码爆破问题

2.1.3 信息安全
漏洞1:关键信息未脱敏

描述:敏感信息(参考国家信息安全风险管理包含账号密码、个人信息如:身份证号、手机号、邮箱、银行卡、ip\mac地址、通讯地址、姓名等):
在这里插入图片描述
在终端上展示时未进行模糊处理,具体模糊处理可参考示例,此示例参考了《网络音视频服务数据安全要求》:
在这里插入图片描述
测试方法:

非业务上的必要,敏感信息在终端上展示时应做模糊处理,并在应用后台进行敏感字段脱敏处理,如部分内容以*方式传输及显示。

2.1.4 业务安全
漏洞1:重复抽奖/下单/送礼等等

描述:服务端未对抽奖/下单/送礼等接口进行校验,导致用户利用漏洞通过重复调用接口实现重复下单或重复抽奖等非法行为。

测试方法:尝试重放抽奖接口,或修改抽奖次数后重放接口,观察抽奖是否成功。若重放后签到及抽奖成功,则存在重放问题。

2.1.5 输入验证
漏洞1:SSRF

描述:服务端请求伪造(Server Side Request Forgery, SSRF)指的是攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。SSRF攻击通常针对外部网络无法直接访问的内部系统。

测试方法:SSRF可以对外网、服务器所在内网、本地进行端口扫描,攻击运行在内网或本地的应用,或者利用File协议读取本地文件。

burpsuite插件ssrf-king:

1、导入插件ssrf-king:
在这里插入图片描述
2、把要测试的请求放入被动扫描:
在这里插入图片描述
3、查看结果:

正常:
在这里插入图片描述
异常:存在ssrf

在这里插入图片描述
参考文章1:https://websec.readthedocs.io/zh/latest/vuln/ssrf.html#id3

参考文章2:https://github.com/ethicalhackingplayground/ssrf-king

漏洞2:sql注入

描述:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。可以利用该漏洞获取数据库服务器的权限等。

测试方法1:使用Sqlmap进行自动化SQL注入渗透测试

无序列表 参考:https://gitbook.cn/books/5ba8393639ea516190a9b8f8/index.html

测试方法2:使用BurpSuite的SqliPy插件注入渗透测试

1、安装环境:python2.7

2、到burpsuite插件中心下载SQLIPY插件:
在这里插入图片描述
3、打开插件:
在这里插入图片描述
4、对要测试的接口进行sql注入:

在这里插入图片描述

在这里插入图片描述
5、查看结果:

正常:
在这里插入图片描述
异常:
在这里插入图片描述
在这里插入图片描述

漏洞3:XSS攻击

描述:恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。

反射型:经过后端,不经过数据库

存储型:经过后端,经过数据库
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试方法:

1.使用XSStrike通过简单的命令来对接口进行测试,是否存在xss漏洞。

参考:https://blog.csdn.net/lady_killer9/article/details/109105084

2.使用Burp、PhantomJS进行XSS检测

参考:https://t0data.gitbooks.io/burpsuite/content/chapter19.html

【使用XSS Validator插件进行XSS漏洞检测】
XSS Validator插件的安装依旧是可以通过BApp Store安装和手工安装两种方式,手工安装需要下载源码进行编译,这里提供项目的github地址,https://github.com/nVisium/xssValidator。安装过程由读者自己完成,如果不明白安装,请阅读Burp插件使用相关章节。安装完毕后,插件的界面如下图所示:
在这里插入图片描述
上图中的左侧为插件运行时需要配置的参数,右侧为验证XSS漏洞的payload。在使用插件前,有一些关于phantomjs的具体配置需要我们关注。这也是我们在通过应用商店进行插件安装时,安装界面上提供了的使用说明里的。
在这里插入图片描述
在执行Intruder之前,必须通过命令行phantomjs xss.js 启动xss检测服务,也是phantomjs的服务监听端口。这就使得我们在执行命令行之前,需要将phantomjs安装好,并加入到环境变量里,否则无法执行。至于phantomjs的安装非常简单,如果你实在不会,建议你阅读此文章。传递地址:http://www.mincoder.com/article/4795.shtml

下载xss.js
地址:https://github.com/nVisium/xssValidator
安装完之后,执行phantomjs xss.js【需要绝对路径】,控制台界面显示如下,并无其他提示信息。
在这里插入图片描述
为了简单地说明使用方法,其他的参数我们都采取默认配置,只修改Grep Phrase和JavaScript functions两个参数: Grep Phrase修改为xxs_result,作为检测标志和列表头。 JavaScript functions中我们仅使用alert,其他的都暂时去掉。便于我们从控制台观察结果。我们最终的配置结果如截图所示:
在这里插入图片描述
配置完插件之后,我们需要配置Intruder。 首先,指定Grep Phrase的值。

在这里插入图片描述
接着,Intruder的payload生成器需要设置为xssValidator的。
在这里插入图片描述

如果你如上图中所示的设置,则可以启动Intruder进行检测了。在检测过程中,我们会看到控制台输出很多日志信息,根据我们的配置,输出alert信息的表示payload检测出存在xss漏洞。如下图中2所示:
在这里插入图片描述
同时,在Intruder的执行界面上,我们可以通过xss_result来查看payload的检测情况,那些响应报文中存在漏洞标志的均被标出,便于我们对消息的区分和处理。

在这里插入图片描述

2.2 常见的客户端安全测试方法(Android)

2.2.1 源码安全
漏洞1:反编译

描述:

APP的反编译会造成源代码被恶意者读取,以及APP的逻辑设计被泄露

测试方法:

通过反编译工具看是否能够对APP进行反编译,未经安全处理应用的java层和未经安全处理的native二进制文件反编译,代码及逻辑清晰可见

未经安全处理应用的java层反编译效果,代码及逻辑清晰可见。
在这里插入图片描述
未经安全处理的native二进制文件反编译效果,代码逻辑及执行流程清晰明了。
在这里插入图片描述
常用的反编译工具:

Android系统因其比较开放,且主要代码由java编写,所以相应的反编译工具比较多。例如apktool、jeb、jdJUI、jadx、MT管理器等等。iOS端则有IDA、Hopper之类的软件。

apktool工具使用参考:https://www.cnblogs.com/chen110xi/p/6612437.html

漏洞2:App二次打包

描述:

APP二次打包”是盗版正规APP,破解后植入恶意代码重新打包。不管从性能、用户体验、外观它都跟正规APP一模一样但是背后它确悄悄运行着可怕的程序,它会在不知不觉中浪费手机电量、流量,恶意扣费、偷窥隐私等等行为。

测试方法:

利用二次打包工具对APP进行二次打包,看APP能否成功打包运行,如果重新打包后无法运行程序说明有防二次打包安全措施

2.2.2 组件导出安全

描述:

Android主要包含4大组件,分别是activity组件、service组件、content provider组件和broadcast receiver组件。

Activity组件
(1)一个Activity通常就是一个单独的屏幕(窗口)。

(2)Activity之间通过Intent进行通信。

(3)android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。

Service组件
(1)service用于在后台完成用户指定的操作。

(2)开发人员需要在应用程序AndroidManifest.xml配置文件中声明全部的service,使用标签。

(3)Service通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形用户界面。Service组件需要继承Service基类。Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。

Content Provider组件
(1)android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。

(2)只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。

(3)ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为android没有提供所有应用共同访问的公共存储区。

broadcast receiver
(1)你的应用可以使用它对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力,例如闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

(2)广播接收者的注册有两种方法,分别是程序动态注册和AndroidManifest文件中进行静态注册。

(3)动态注册广播接收器特点是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用。

测试方法:

采用drozer工具可以进行检测组件是否存在导出风险

1、 AndroidManifest.xml文件中activity组件里面有设置android:exported为true,表示此组件可以被外部应用调用。

2、 AndroidManifest.xml文件中activity组件里面有设置android:exported为false,表示此组件不可以被外部应用调用。只有同一个应用的组件或者有着同样user ID的应用可以

3、 AndroidManifest.xml文件中activity组件里面没有设置android:exported属性,但是有intent-filter,则exported默认属性为true,true表示此组件可以被外部应用调用。

4、 AndroidManifest.xml文件中activity组件里面没有设置android:exported属性,也没有设置intent-filter,则exported默认属性为false,false表示此组件不可以被外部应用调用。只有同一个应用的组件或者有着同样user ID的应用可以

2.2.3 数据安全–本地敏感信息
漏洞1:APP所在目录的文件权限

描述:

客户端APP所在目录的文件权限设置不正确,非root账户可以读,写,执行APP目录下的文件。

测试方法:

采用ls –l查看app目录的文件权限,其它组成员不允许读写权限。Linux文件权限为第一个为文件所有者对此文件的权限,第二个为所有者所在组的其它成员对此文件的权限,第三个为其他组成员对此文件的权限。

漏洞2:SQLite数据库文件的安全性

描述:

Android系统内置了SQLite数据库,并且提供了一整套的API用于对数据库进行增删改查操作。使用SQLite来存储数据存在着一个问题:因为大多数的Android手机都是Root过的,而Root过的手机都可以进入到/data/data//databases目录下面,在这里就可以查看到数据库中存储的所有数据。如果是一般的数据还好,但是当涉及到一些账号密码,或者聊天内容的时候,我们的程序就会面临严重的安全漏洞隐患

测试方法:

手机进行root之后,查看/data/data//databases下的数据库文件是否包含敏感信息

漏洞3:Logcat日志使用不当

描述:

客户端对应的Logcat日志打印一些用户或服务器的敏感信息。

测试方法:

通过usb连接手机,然后使用adb logcat -v time > d:\xx的方式获取logcat信息,或者使用DDMS工具查看logcat信息

2.2.4 webview安全
漏洞1:WebView任意代码执行

描述:

出现该漏洞的原因有三个
WebView 中 addJavascriptInterface() 接口

WebView 内置导出的 searchBoxJavaBridge_对象

WebView 内置导出的 accessibility 和 accessibilityTraversalObject 对象

addJavascriptInterface 接口引起远程代码执行漏洞
JS调用Android的其中一个方式是通过addJavascriptInterface接口进行对象映射, 当JS拿到Android这个对象后,就可以调用这个Android对象中所有的方法,包括系统类(java.lang.Runtime 类),从而进行任意代码执行。

searchBoxJavaBridge_接口引起远程代码执行漏洞
在Android 3.0以下,Android系统会默认通过searchBoxJavaBridge_的Js接口给 WebView 添加一个JS映射对象:searchBoxJavaBridge_对象

该接口可能被利用,实现远程任意代码。

accessibility和 accessibilityTraversal接口引起远程代码执行漏洞
问题类似以上

测试方法:

addJavascriptInterface 接口引起远程代码执行漏洞
检查是通过addJavascriptInterface接口进行对象映射

searchBoxJavaBridge_接口引起远程代码执行漏洞
检查是否通过searchBoxJavaBridge_的Js接口给 WebView 添加一个JS映射对象

accessibility和 accessibilityTraversal接口引起远程代码执行漏洞
检查是否通过accessibility和 accessibilityTraversal的Js接口给 WebView 添加一个JS映射对象

漏洞2:密码明文存储

WebView默认开启密码保存功能:mWebView.setSavePassword(true)

开启后,在用户输入密码时,会弹出提示框:询问用户是否保存密码;

如果选择”是”,密码会被明文保到 /data/data/com.package.name/databases/webview.db 中,这样就有被盗取密码的危险

测试方法:

方法1、用户输入密码时看是否有弹出提示框,询问用户是否保存密码,如果有询问则表示存在漏洞,否则不存在。

方法2、检查代码中setSavePassword的值是否为false

三、推荐的checklist

*这个比较契合我们组当时所承接的任务,提供给大家参考,需要持续迭代。

3.1 服务端:

在这里插入图片描述

3.2 客户端:

在这里插入图片描述

四、安全测试缺陷管理

安全测试的缺陷管理流程同普通缺陷流程。

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值