神秘的安全测试思考案例(一)
定义:安全测试是在软件产品开发基本完成时,验证产品是否符合安全需求定义和产品质量标准的过程。
概念:安全测试是检查系统对非法侵入渗透的防范能力。
准则:理论上来讲,只要有足够的时间和资源,没有无法进入的系统。因此,系统安全设计的准则是使非法侵入的代价超过被保护信息的价值。
目标:通过对系统进行精心、全面的脆弱性安全测试,发现系统未知的安全隐患并提出相关建议,确保系统的安全性。安全性一般分为应用程序级别和系统级别,区别如下:
应用程序级别:包括对应数据或业务功能的访问,核实应用程序的用户权限只能操作被授权访问的那些功能或数据。
系统级别:包括对操作系统的目录或远程访问,主要核实具备系统和应用程序访问权限的操作者才能访问系统和应用程序。
一、短信验证码
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语句的片段中
神秘的安全测试思考案例(一)相关推荐
- 酸奶饮料新产品口味测试研究案例
酸奶饮料新产品口味测试研究案例 配对设计是将受试对象按配对条件配成对子,每对中的个体接受不同的处理.配对设计一般以主要的非实验因素作为配比条件,而不以实验因素作为配比条件. 配伍(伍,即队伍,组)设计 ...
- ORA-15064 ORA-03113 - 测试库案例
-- ORA-15064 ORA-03113测试库案例 错误日志 2013-09-12 16:20:00 ############### alert_prod1.log ############### ...
- 【转】测试思考——测试人员需要具备哪些素质?
之前写的文章,今天分享出来 测试人员需要具备哪些素质? 测试人员需要具备哪些技能? 软件测试知识:测试计划.测试方案.编写用例.提交bug.跟踪bug,编写测试报告 测试工具的使用 操作系统 编写代码 ...
- spark集群测试小案例
一.local模式: 测试自带计算的圆周率案例 之所以会报错,是因为从网上copy过来的文件名不对:所以才会报错,以及因此而导致的错误: 正确的如下: 二.独立的Spark集群模式:使用7077端口( ...
- docker 测试mysql_95--Docker案例(redis测试/mysql测试/tomcat测试)
Docker案例 关闭防火墙 # 关闭防火墙 systemctl stop firewalld.service # 禁止防火墙开机启动 systemctl disable firewalld.serv ...
- 人机博弈过程计算机如何思考,案例 认识人工智能(设计:李月).docx
<案例 认识人工智能(设计:李月).docx>由会员分享,提供在线免费全文阅读可下载,此文档格式为docx,更多相关<案例 认识人工智能(设计:李月).docx>文档请在天天文 ...
- 第三方支付系统如何测试?案例分析
一.背景 近年来,随着互联网应用服务的发展.尤其是电子商务的勃兴,我国的第三方支付产业进入了爆炸式增长时期.目前,第三方支付企业的年交易总额已突破万亿元,在人民银行备案的第三方支付企业数量已达260多 ...
- 基于异常注入(混沌工程)的测试思考
几周前发生了一个较为严重的线上问题,少量用户在打开App会出现白屏.这两周一直在思考如何针对这种隐藏很深的特定条件下触发的缺陷进行测试和预防.本文结合在金融App的特定业务场景下,进行思考如何使用业务 ...
- 网易云音乐“内外人格测试”思考
今天打开朋友圈,被网易云音乐的"内外人格测试"刷了个屏,产品狗又上线了,所以对这个活动进行一个简单的复盘. 流程图 效果图我就不发了,小伙伴们有兴趣可以自己体验下. 运营分析 先从 ...
最新文章
- spring bean作用域_Srping中Bean的三种装配方式:大魏Java记10
- NYOJ 737 合并石子(一)
- 204. Count Primes
- date js 半年_js Date 日期使用上的一个坑
- 对对象类型和调用方法属性进行存储以提升反射性能
- ajax 解析数组集合,ajax怎样解析json数组并用模板引擎渲染
- 【CSAPP笔记】11. 存储器层次结构
- Linux 系统中随机数在 KVM 中的应用
- Smuxi 0.8.10 发布 - IRC 客户端软件
- 微信小程序多人开发-版本管理
- Unity-MD5加密
- VB中函数 str() 和cstr 有什么不同?
- python不知道吃什么_一个人不知道吃什么?找出我做的一个人的食物
- 路由模式和桥接模式的区别
- php的parent_php中parent::是如何使用的?
- python 在线客服_如何利用Python实现简单全双工在线客服系统!这个有点东西!...
- 计算机网络常见缩略语
- 用php和mysql写一个注册登录页面
- 大批量读取硬盘中的数据,存储到mongo数据库中
- 排序算法分析归纳总结
热门文章
- 跳一跳python_微信跳一跳python怎么刷分?跳一跳python怎么使用?
- 获取元素大小和位置的方式
- classmethod 继承_让人眼花缭乱的类继承
- java想要生成 字符串,如何在Java中“优雅地”生成String?
- linux窗帘文件夹命令,窗帘面板和电机 · 控客智能家居 Linux SDK 使用手册 · 看云...
- linux mysql 5.6.23_mysql 5.6.23 的安装
- linux基础服务,Linux基础
- ds18b20温度传感器驱动编写
- bert 中文 代码 谷歌_ELECTRA中文预训练模型开源,110个参数,性能媲美BERT
- 动词ing形式的5种用法_英语语法这样学就对了!动词-ing结构的特征和四种形式是?...