Web API接口安全了解
2017版OWASP top 10 将API安全纳入其中,足以说明API被广泛使用且安全问题严重。自己尝试整理一下,但限于本人搬砖经验还不足、水平有限,本文只能算是抛砖引玉,希望大伙不吝赐教。
了解Web Service(API)
Web Service是一种跨编程语言和跨操作系统平台的远程调用技术。目前被广泛运用于移动端APP、物联网IoT、WEB应用等场景。
主流Web Service实现方式
SOAP/XML
简单对象访问协议(SOAP)接口,通过HTTP进行消息传输。它是基于xml语言开发,使用Web服务描述语言(WSDL)来进行接口描述。是一种很成熟的Web Service实现方式,整体上有被REST取代的趋势。
REST/JSON
表现层状态转移(REST),本质上讲的是一种ROA(Resource Oriented Architecture)架构风格。符合这种架构风格的API接口,我们称之为RESTful API。
PS: REST风格的接口既可以使用JSON,也可以使用XML,但由于JSON更加轻,故而基本不用XML。
XML示例:
|
1
2
3
4
5
6
7
8
9
10
11
|
<?xml version="1.0" encoding="UTF-8" ?>
<person>
<name>Jason</name>
<age>99</age>
<sex>male</sex>
<contact>
<mobile>13888888888</mobile>
<email>bingo@tass.com.cn</email>
<wechat>bingo</wechat>
</contact>
</person>
|
JSON示例:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
{
"person": {
"name": "Jason",
"age": "99",
"sex": "male",
"contact": {
"mobile": "13888888888",
"email": "bingo@tass.com.cn",
"wechat": "bingo"
}
}
}
|
API安全
API的安全要素
认证和鉴权 - 认证用户身份 & 确定用户权限
通常情况下,webAPI是基于HTTP协议的,也是无状态传输的。故而认证任务就需要我们自己实现,所以原则上每一次API请求都需要带上身份认证信息,通常使用的是API key。
加密和签名 - 保证信息的保密性和完整性
通常使用SSL/TLS来加密通信消息,由API客户端发送和接收。签名用于确保API请求和响应在传输过程中未被篡改。
漏洞 - 注入攻击 & 敏感数据泄露 & 越权访问
攻击面检测
- 尽可能多的了解API端点、消息、参数、行为。
- 发现API中可能存在问题的元数据。
- 记录流量进一步学习API
- 爆破 - 暴力破解路径或资源
攻击方式
1.模糊测试
使用自动化工具并行的将大量的随机内容(各种可能的值或可能的攻击向量)作为输入参数进行长时间的尝试,并自动验证响应信息,确认是否获取到意外收获(系统或代码相关的信息)。
2.注入攻击
使用SQL,XML,Xpath,JSON,JavaScript等的常见攻击向量尝试进行代码注入,并验证意外响应。
3.无效/越界内容
尝试各种无效或者超范围的内容,并验证响应信息。
4.恶意内容
在上传功能点尝试上传可执行文件或脚本等,使服务器尝试进行解析。
5.XSS
上传常见攻击向量进行XSS(反射型,存储型等)测试。
6.CSRF
测试API是否含有token,token是否能复用,是否可被伪造。
7.不安全的直接对象引用
尝试对顺序化的id号进行越权访问,尝试访问无权限的方法或操作。
8.其它考虑
会话认证(token是否正确使用)
安全配置(前述攻击照成系统/应用等信息泄露)
攻击演示
1. DVWS | WSDL Enumeration
前端页面
源码中暴露wsdl文件
wsdl文件中可以查看到四种方法
使用READY!API(SOAPUI升级版)可以直观的看到4种方法并进行接口测试
尝试使用check_user_information方法,尝试填入username(实际测试中可能需要结合爆破方式),接口返回了相关数据,从而导致数据泄露。
2. DVWS | XML External Entity Processing
提交正常请求:
|
1
|
<name>Mr.Bingo</name>
|

提交payload:
|
1
|
<?xml version="1.0"?> <!DOCTYPE bingo [ <!ENTITY xxe SYSTEM "file:///etc/passwd" >]><name>&xxe;</name>
|

额外测试:


3. DVWS | Server Side Request Forgery
正常数据请求

篡改请求URL

4. DVWS | REST API SQL Injection
正常请求资源:

SQL注入:

5. bWAPP | SQL Injection - Blind (WS/SOAP)
由于在前端屏蔽了后端所采用的API接口功能,故而贴出部分源码以供参考
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?php
if(isset($_REQUEST["title"]))
{
// Includes the NuSOAP library
require_once("soap/nusoap.php");
// Creates an instance of the soap_client class
$client = new nusoap_client("http://localhost/bWAPP/ws_soap.php");
// Calls the SOAP function
$tickets_stock = $client->call("get_tickets_stock", array("title" => sqli($_REQUEST["title"])));
echo "We have <b>" . $tickets_stock . "</b> movie tickets available in our stock.";
}
?>
|

当前个人对API接口测试的理解尚比较粗浅。涉及到fuzz、加解密及其他复杂的场景尚且无法拿出好的案例及测试平台。后续有机会再行补充,另外,希望有货的大佬们能多多分享。
参考资料
测试工具
- Ready!API ( SoapUI )
- Burpsuite
FuzzAPI
测试平台
Hackazon https://github.com/rapid7/hackazon
Web Version http://hackazon.webscantest.com
Mutillidae https://sourceforge.net/projects/mutillidae/
Juice-shop https://github.com/bkimminich/juice-shop
参考资料
OWASP Top 10 - 2017 RC1
REST API 安全设计指南 http://www.freebuf.com/articles/web/82108.html
REST Security Cheat Sheet https://www.owasp.org/index.php/REST_Security_Cheat_Sheet
Web API接口安全了解的更多相关文章
- ASP.NET Web API 接口执行时间监控
软件产品常常会出现这样的情况:产品性能因某些无法预料的瓶颈而受到干扰,导致程序的处理效率降低,性能得不到充分的发挥.如何快速有效地找到软件产品的性能瓶颈,则是我们感兴趣的内容之一. 在本文中,我将解释 ...
- Web API接口之FileReader
Web API接口之FileReader *:first-child { margin-top: 0 !important; } body>*:last-child { margin-botto ...
- 不使用jQuery对Web API接口POST,PUT,DELETE数据
前些天,Insus.NET有演示Web API接口的操作: <怎样操作WebAPI接口(显示数据)>http://www.cnblogs.com/insus/p/5670401.html ...
- Winform混合式开发框架访问Web API接口的处理
在我的混合式开发框架里面,集成了WebAPI的访问,这种访问方式不仅可以实现简便的数据交换,而且可以在多种平台上进行接入,如Winform程序.Web网站.移动端APP等多种接入方式,Web API的 ...
- WebApi系列~通过HttpClient来调用Web Api接口~续~实体参数的传递
回到目录 上一讲中介绍了使用HttpClient如何去调用一个标准的Web Api接口,并且我们知道了Post,Put方法只能有一个FromBody参数,再有多个参数时,上讲提到,需要将它封装成一个对 ...
- Web API接口设计经验总结
在Web API接口的开发过程中,我们可能会碰到各种各样的问题,我在前面两篇随笔<Web API应用架构在Winform混合框架中的应用(1)>.<Web API应用架构在Winfo ...
- Web API 接口
Web API 接口 在给网站编写 JavaScript 代码时,也有很多可用的 API.您可以使用下面的接口(也称为对象的类型)列表,开发 Web 应用程序或网站. 关于包含这些接口的 API 列表 ...
- Http下的各种操作类.WebApi系列~通过HttpClient来调用Web Api接口
1.WebApi系列~通过HttpClient来调用Web Api接口 http://www.cnblogs.com/lori/p/4045413.html HttpClient使用详解(java版本 ...
- 如何让你的 Asp.Net Web Api 接口,拥抱支持跨域访问。
由于 web api 项目通常是被做成了一个独立站点,来提供数据,在做web api 项目的时候,不免前端会遇到跨域访问接口的问题. 刚开始没做任何处理,用jsonp的方式调用 web api 接口, ...
- Web API接口 安全验证
在上篇随笔<Web API应用架构设计分析(1)>,我对Web API的各种应用架构进行了概括性的分析和设计,Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端 ...
随机推荐
- 第 33课 C++中的字符串(下)
字符串与数字转换-标准库中提供了相关的类对字符串和数字进行转换-字符串流类(sstream)用于string的转换.<sstream>-相关头文件.istringstream-字符串输入流 ...
- 201871010132--张潇潇--《面向对象程序设计(java)》第十二周学习总结
博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...
- http的get请求与post请求区别
原文 http://www.w3school.com.cn/tags/html_ref_httpmethods.asp GET 方法 请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发 ...
- c#窗体之登录页(已连接数据库)
效果图: 源码: 页面: using System; using System.Collections.Generic; using System.ComponentModel; using Syst ...
- Python进阶-VII 内置函数
一.内置函数引入 我们已经了解的有; print() input() range() next() dir() str() int() list() set() tuple() dict() he ...
- HTML中,input元素的 Disabled属性 所产生的后端无法接收数据的问题
背景 今天从前端提交 form表单 数据时,发现 设置 Disabled 的 input 元素的字段数据在后端无法接收到 原因 查阅资料(来自W3school): disabled 属性规定应该禁用 ...
- du和ls的区别:如何正确计算文件大小
上一篇文章写到的权限检查脚本,后来我又加入了 apk size 对比的功能,分享给组内同事使用后,暴露出一个问题:脚本输出的 apk size 和 Jenkins 出包信息以及电脑上显示的存储大小都有 ...
- Linux性能优化实战学习笔记:第十讲
一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.g ...
- [LeetCode] 883. Projection Area of 3D Shapes 三维物体的投影面积
On a N * N grid, we place some 1 * 1 * 1 cubes that are axis-aligned with the x, y, and z axes. Each ...
- 微信小程序前端调用后台方法并获取返回值
wxml代码 <wxs src="../../wxs/string.wxs" module="tools" /> <!-- 调用tools.i ...