神秘的安全测试思考案例(一)

  

       定义:安全测试是在软件产品开发基本完成时,验证产品是否符合安全需求定义和产品质量标准的过程。

  概念:安全测试是检查系统对非法侵入渗透的防范能力。

  准则:理论上来讲,只要有足够的时间和资源,没有无法进入的系统。因此,系统安全设计的准则是使非法侵入的代价超过被保护信息的价值。

  目标:通过对系统进行精心、全面的脆弱性安全测试,发现系统未知的安全隐患并提出相关建议,确保系统的安全性。安全性一般分为应用程序级别和系统级别,区别如下:

  应用程序级别:包括对应数据或业务功能的访问,核实应用程序的用户权限只能操作被授权访问的那些功能或数据。

  系统级别:包括对操作系统的目录或远程访问,主要核实具备系统和应用程序访问权限的操作者才能访问系统和应用程序。

 

一、短信验证码

1、确保验证码与用户名、密码是一次性同时提交给服务器进行验证的,如果分开提交、分开验证,那么系统存在漏洞

2、在登录界面单击右键查看HTML 源代码,如果在HTML 源代码中可以查看到验证码的值,说明系统存在漏洞

3、测试生成的验证码的有效次数只为一次,即只要使用该验证码登录过一次后,该验证码就失效

4、验证码随机生成规则

5、验证码有效时间内使用,失效无法使用

6、对手机号做验证,正确的手机号才可发短信成功

7、同1个手机号不能连续获取短信验证码,如设置1分钟仅允许使用1次

8、同1手机号,1天设置最大发送验证码次数,如同1手机号1天最多发10条

9、设置每日短信总成功条数上限

10、当同1个手机号码或者ip重复连续不断发起请求时,将手机号码或者ip拉黑处理

 

二、开关

1、功能增加开关,当功能出现严重BUG(如刷钱操作)时,关闭功能,避免损失

 

三、支付

昨日有用户使用时发现,摩拜单车安卓最新版(4.1.0版)出现技术漏洞,用户充值1元竟被返现110元。无独有偶,上网搜索看到,发现一漏洞的网友并不在少数,有网友设置截图显示,从昨日上午到12:15-13:42,其连续充值7次1块钱,系统连续7次返值110元,共计返值770元,不过截止到下午14:45分左右,类似情况不再出现

例:充100送120

1、充值时拦截请求,修改充值金额为1元,发出请求,测试服务端是否进行金额校验

例:购买100元商品

2、余额99,下单购买商品进行支付,拦截请求修改金额为100,发出请求,测试服务端是否进行金额校验

例:发薪资、提现

3、余额100,发薪资100并发100次,测试加锁校验

     余额100,发薪资100,并发审核100次,测试加锁校验

     余额100,提现100并发100次,测试加锁校验

 

四、篡改响应

1、认证成功可获得积分

输入任意认证信息,提交成功,抓取接口,拦截响应,修改响应为成功,导致认证成功并获得积分

 

五、越权

1、登录权限越权

token失效、账号被踢出,使用创建订单、充值、付款功能,对token检验进行测试

2、业务逻辑越权

新建的订单、已付款的订单、已发货的订单、已收货的订单、已完成的订单、已评价的订单,进行付款操作测试

3、垂直越权未授权的功能

主管有修改权限,客服有查看权限,主管账号更换为客服账号,进行修改操作测试

4、水平越权其它用户资源

通过修改URL链接上的参数来进行一些非对应账号信息的查看和操作。

例1:修改URL上的订单号为别人的,查看、修改、删除、评价、操作别人的订单进行测试

例2:修改URL上的订单参数为不存在的,查看、修改、删除、评价、操作别人的订单进行测试

 

六、敏感数据传输

1、登录密码、交易密码是否加密处理传输

2、用户身份证号、银行卡是否暴露在接口中

 

七、密码、修改密码、找回密码、重置密码

1、如果为输入密码的方式,查看HTML 源代码,检查是否存在关于密码的一些数据

2、重置后的密码一般通过用户的邮箱或手机短信来通知用户

3、修改密码时是否要求输入旧密码,如果不需要用户填写旧密码,说明系统存在缺陷。

4、测试是否可以修改其他用户密码,一般只有管理员或有相关权限的用户可以修改其他用户密码

5、如果初始口令为系统提供的默认口令或者是由管理员设定,用户使用初始口令成功登录,系统必须强制用户更改初始口令,直至更改成功,否则存在漏洞

6、修改密码、找回密码、重置密码,需强制踢出用户

7、密码输入错误,需限制每日上限次数,达到上限,暂时锁定,无法使用,过天可恢复正常使用

8、密码需使用强口令

9、密码复制粘贴

 

八、SQL、代码注入

SQL注入漏洞原理

SQL 注入是一种将 SQL 代码插入或添加到应用(用户)的输入参数中,之后再将这些参数传递给后台的 SQL 服务器加以解析并执行的攻击。

攻击者能够修改 SQL 语句,该进程将与执行命令的组件(如数据库服务器、应用服务器或 WEB 服务器)拥有相同的权限。 如果 WEB

应用开发人员无法确保在将从 WEB 表单、cookie、输入参数等收到的值传递给 SQL查询(该查询在数据库服务器上执行)之前已经对其进行过验证,通常就会出现 SQL 注入漏洞。

1、登录注入

账号登录时SQL: select * from users where username='wangli' and password='123456'

<1>我们现在需要构建一个比如:在用户名输入框中输入: ’ or 1=1#,密码随便输入111,这时候的合成后SQL语句为:

select * from users where username=' ' or 1=1#' and password='111'

等价于select * from users where username='' or 1=1

等价于select * from users就可以登录成功了

2、搜索类

<1>搜索姓名,输入单引号、双引号,点搜索,系统报错,证明我们提交数据被系统接收,存在SQL注入漏洞

搜索姓名' 如:wangli'

搜索姓名" 如:wangli"

<2>搜索id=1时,判断是否存在注入

输入1查询成功

输入1' or '1'='1 、1' or '1'='1' #、1' or 1=1#  返回多个结果,说明存在字符型注入

输入1 or 1=1返回多个结果,说明存在数字型注入

输入1' and '1'='2 查询失败

' and 1=2#

3、url传参注入

字符型注入:

在url后面加单引号、双引号报错

接着用 ' and '1'='1,' and '1'='2判断页面,或者' and 1=1#,' and 1=2#

首先应测试是否存在注入漏洞,简单的:’ 或 and 1=1 and 1=2之类的SQL语句。

如果没有检测,直接运行SQL语句,说明有机会注入。

举例:

从参数注入,简单的测试方法是:

http://www.xxx.com/index.php?id=2'

http://www.xxx.com/index.php?id=2' and 1=1

http://www.xxx.com/index.php?id=2' and 1=2

4、代码注入

1、提交死循环代码,测试是否进行过滤处理

<script>
 for(i=0;i<1;i--)
 {
 alert("msg")
 }
 </script>

<input type="text"/>

<input/>

<input/ 

<script>alert('hello');</script>

1.jpg" οnmοuseοver="alert('xss')

"></a><script>alert(‘xss’);</script>

http://xxx';alert('xss');var/ a='a

‘”>xss&<

a=”\” ; b=”;alert(/xss/);//”

<img src=“输出内容” border=“0” alt=“logo” />

2、输入<html”>”gfhd</html>,看是否出错;

3、输入<input type=”text” name=”user”/>,看是否出现文本框;

4、输入<script type=”text/javascript”>alert(“提示”)</script>看是否出现提示。

5、输入特殊字符 如:~!@#$%^&*()_+<>:”{}|

6、输入超大数9999999999,超长字符、0、null、NULL、负数

 

5、枚举查询表列数(order by)

搜索框输入' order by 10 #

构造出SQL为select * from user where mobile=''  order by 10 # '

select * from user where mobile='正确的手机号'  order by 10 # '

如果10报错[Err] 1054 - Unknown column '10' in 'order clause',说明列不足10个,依次向前实验

如果9时不报错,说明有9列

 

总结与主流防御

1.永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号、双"--"、#、恒等进行转换等。

2.永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。

3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

4.不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。

5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中

6、过滤关键字,对一些sql语句中可能出现的关键词进行过滤

7、编码/转移特殊符号,对用户输入的进行编码或转义,使其无法产生原有效果

8、语义分析拦截,对用户输入进行判断,保证不存在于任意可执行的sql语句的片段中

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568460.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STL Map学习总结

1、 Map是关联容器&#xff0c;以键值对的形式进行存储&#xff0c;方便进行查找&#xff0c;关键词起到索引的作用&#xff0c;值则表示与索引相关联的数据&#xff0c;以红黑树的结构实现&#xff0c;插入删除等操作都可以在O(log n)时间内完成 2、它的特点是增加和删除节点…

【功能业务篇】APP获取用户定位、传参经纬度思考

常用的三种定位方式有&#xff1a;基于GPS定位、基于基站地位、基于wifi定位。 1、基于GPS定位&#xff1a; GPS定位需要GPS模块(硬件)的支持,没有GPS模块是无法进行GPS定位的。 GPS定位最大的优点就是其定位精确度高(一般误差在10m内),无网络也能用;缺点就是耗电高、定位慢、室…

cmd运行python程序

先cd到当前目录&#xff0c;然后python XXX.py

mysql 四种存储引擎

前言 数据库存储引擎是数据库底层软件组织&#xff0c;数据库管理系统&#xff08;DBMS&#xff09;使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能&#xff0c;使用不同的存储引擎&#xff0c;还可以 获得特定的功…

Android ADB调试之无线连接设备

Android无线调试 一、数据线连接手机和电脑&#xff08;首次设置需数据线连接&#xff09;&#xff0c;开启开发者模式和USB调试&#xff0c;确保手机和电脑已连接 cmd下执行adb devices 显示上图1&#xff0c;说明已连接 二、华为手机设置 1、开发人员选项 2、USB调试 3、…

【Python实战】使用python计算多种类型到期还款日

一般金融产品的账务测试时&#xff0c;我们会接触到还款方式&#xff0c;到期还款日等概念。 在自动化测试或者脚本使用中&#xff0c;我们需要动态的生成到期还款日去进行账务测试&#xff0c;这篇文章主要介绍了常见的几种到期还款日计算方式。 一、固定期限&#xff08;比如…

Fiddler抓包工具之Filters(过滤器)进行会话过滤

一、设置User Fiters启用 未勾选Use Filters&#xff0c;未启用此功能&#xff1b;已勾选Use Filters&#xff0c;已启用此功能 二、Action设置 Run Filterset now :马上执行过滤&#xff0c;立即生效过滤 Load Filterset&#xff1a; 加载本地过滤文件到fiddler Save Filt…

【pyQT5】Python3+pyQT5开发环境安装与配置

在PyQt中编写UI界面可以直接通过代码来实现&#xff0c;也可以通过Qt Designer来完成。Qt Designer的设计符合MVC的架构&#xff0c;其实现了视图和逻辑的分离&#xff0c;从而实现了开发的便捷。 Qt Designer中的操作方式十分灵活&#xff0c;其通过拖拽的方式放置控件可以随时…

【TensorFlow】TensorFlow是什么?

TensorFlow 是一个开源的、基于 Python 的机器学习框架&#xff0c;它由 Google 开发&#xff0c;并在图形分类、音频处理、推荐系统和自然语言处理等场景下有着丰富的应用&#xff0c;是目前最热门的机器学习框架。 除了Python&#xff0c;TensorFlow 也提供了 C/C、Java、Go、…

【TensorFlow】Win7+Anaconda+python3.6+Tensorflow1.9安装教程

相关链接 官网&#xff1a;https://tensorflow.google.cn/ github&#xff1a;https://github.com/tensorflow/tensorflow 中文社区网&#xff1a;http://www.tensorfly.cn/ 安装说明 平台&#xff1a;windows 7 Anaconda版本&#xff1a;4.6.14 python版本&#xff1a;3.6.…

【Jmeter篇】如何利用Jmeter配置元件计数器、随机变量制造批量数据和变量参数化?

一、计数器 1、线程组-配置元件-计数器 2、功能介绍 starting value&#xff1a;给定计数器的起始值、初始值&#xff0c;第一次迭代时&#xff0c;会把该值赋给计数器 递增(Increment)&#xff1a; 每次迭代后&#xff0c;给计数器增加的值 最大值(Maximum) &#xff1a;…

软件工程经济学习题 答案(不保证对错,找不到答案)

一、资金等值计算 1.某IT企业今年向银行贷款20万元以购置一台设备。若银行贷款利率为10%&#xff0c;规定10年内等额偿还&#xff0c;试求每年的偿还金额。 2.某软件企业向银行贷款200万元&#xff0c;按年利率为8%进行复利计息&#xff0c;试求该企业第5年末连本带利一次偿还银…

Django+Jquery+Ajax+验证码登录案例

1&#xff0c;创建项目test04 2&#xff0c;创建应用app为booktest 3&#xff0c;注册应用booktest 作用让创建的应用运行起来 4&#xff0c;在项目根目录下创建模板templates目录 作用就是存放html文件在项目的settings.py文件中配置模板&#xff0c;如下图&#xff1a;5&…

【数据库】Mysql日期/时间函数实际案例

有一款金融产品&#xff0c;总共24期&#xff0c;每月2日到期还款日&#xff0c;第一个到期还款日为放款日下个月的2日&#xff0c;现在我们知道所有订单的放款时间&#xff0c;现在我们想统计每个订单当前时间是第几期。 举个简单例子&#xff1a;当期日期为2019-11-12&#…

【Jmeter篇】1小时轻松搞定项目接口自动化测试与数据驱动

之前我们的用例数据都是配置在 Jmeter Http 请求中&#xff0c;每次需要增加&#xff0c;修改用例都需要打开 jmeter 重新编辑&#xff0c;当用例越来越多的时候&#xff0c;用例维护起来就越来越麻烦&#xff0c;有没有好的方法来解决这种情况呢&#xff1f; 其实我们可以将用…

module 'queue' has no attribute 'Queue'解决

import queue q queue.Queue() q.put(a) q.put(b) print(q.get())错误&#xff1a; AttributeError: module queue has no attribute Queue 解决方法&#xff1a; 把程序名命名和包名一样导致错误。命名为queue1.py就ok了

【Python】import自己的模块报错

在实际使用python时&#xff0c;我们会将一些公共的东西写到一些基础模块中&#xff0c;供其他模块去调用&#xff0c;这时会去import自定义的一些基础模块&#xff0c;然后来导入。 自己写好了脚本&#xff0c;然后导入&#xff0c;导入的情况分为以下情况&#xff1a; 1. 运行…

Jmeter生成自动化和性能多维度测试报告(性能指标和监听器图表)

jmeter在命令行下还可以生成多维度的测试报告&#xff0c;里面包含了常用的性能指标和监听器图表。 一、环境要求 1、jmeter3.0版本之后开始支持动态生成测试报表 2、jdk版本1.7以上 3、需要jmx脚本文件 二、生成jtl文件 1、进入bin目录下cd jmeter -n -t C:\jmeter\apach…

【Python】pyinstaller模块打包的exe在windows环境无法使用问题汇总

问题一&#xff1a;解决pyinstaller打包发布后的exe文件打开控制台闪退的问题 pyinstaller打包发布后的exe文件在自己电脑能够正常使用&#xff0c;但是给到别人的电脑时&#xff0c;打开exe文件却发生闪退&#xff0c;看不到具体的原因。 1、定位问题&#xff1a; 1.1.切换到…

Appium+PythonUI自动化测试之uiautomatorviewer和Inspector元素定位

一、uiautomatorviewer uiautomatorviewer是android-sdk自带的一个元素定位工具&#xff0c;非常简单好用&#xff0c;使用uiautomatorviewer&#xff0c;你可以检查一个应用的UI来查看应用的布局和组件以及相关的属性。 1、启动uiautomatorviewer.bat&#xff0c;打开sdk安装…