2017版OWASP top 10 将API安全归入其中,足以说明API被普遍使用且安全问题严重。本身尝试整理一下,但限于本人搬砖经验还不足、水平有限,本文只能算是抛砖引玉,但愿大伙不吝赐教。php
Web Service是一种跨编程语言和跨操做系统平台的远程调用技术。目前被普遍运用于移动端APP、物联网IoT、WEB应用等场景。
简单对象访问协议(SOAP)接口,经过HTTP进行消息传输。它是基于xml语言开发,使用Web服务描述语言(WSDL)来进行接口描述。是一种很成熟的Web Service实现方式,总体上有被REST取代的趋势。
表现层状态转移(REST),本质上讲的是一种ROA(Resource Oriented Architecture)架构风格。符合这种架构风格的API接口,咱们称之为RESTful API。 PS: REST风格的接口既可使用JSON,也可使用XML,但因为JSON更加轻,故而基本不用XML。
XML示例:html
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"
}
}
}
|
认证和鉴权 - 认证用户身份 & 肯定用户权限git
一般状况下,webAPI是基于HTTP协议的,也是无状态传输的。故而认证任务就须要咱们本身实现,因此原则上每一次API请求都须要带上身份认证信息,一般使用的是API key。github
加密和签名 - 保证信息的保密性和完整性web
一般使用SSL/TLS来加密通讯消息,由API客户端发送和接收。签名用于确保API请求和响应在传输过程当中未被篡改。sql
漏洞 - 注入攻击 & 敏感数据泄露 & 越权访问编程
1.模糊测试后端
使用自动化工具并行的将大量的随机内容(各类可能的值或可能的攻击向量)做为输入参数进行长时间的尝试,并自动验证响应信息,确认是否获取到意外收获(系统或代码相关的信息)。
2.注入攻击api
使用SQL,XML,Xpath,JSON,JavaScript等的常见攻击向量尝试进行代码注入,并验证意外响应。
3.无效/越界内容
尝试各类无效或者超范围的内容,并验证响应信息。
4.恶意内容
在上传功能点尝试上传可执行文件或脚本等,使服务器尝试进行解析。
5.XSS
上传常见攻击向量进行XSS(反射型,存储型等)测试。
6.CSRF
测试API是否含有token,token是否能复用,是否可被伪造。
7.不安全的直接对象引用
尝试对顺序化的id号进行越权访问,尝试访问无权限的方法或操做。
8.其它考虑
会话认证(token是否正确使用) 安全配置(前述攻击照成系统/应用等信息泄露)
前端页面
源码中暴露wsdl文件
wsdl文件中能够查看到四种方法
使用READY!API(SOAPUI升级版)能够直观的看到4种方法并进行接口测试
尝试使用check_user_information方法,尝试填入username(实际测试中可能须要结合爆破方式),接口返回了相关数据,从而致使数据泄露。
提交正常请求:
1
|
<name>Mr.Bingo</name>
|
提交payload:
1
|
<?xml version="1.0"?> <!DOCTYPE bingo [ <!ENTITY xxe SYSTEM "file:///etc/passwd" >]><name>&xxe;</name>
|
额外测试:
正常数据请求
篡改请求URL
正常请求资源:
SQL注入:
因为在前端屏蔽了后端所采用的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、加解密及其余复杂的场景尚且没法拿出好的案例及测试平台。后续有机会再行补充,另外,但愿有货的大佬们能多多分享。
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