hacktricks/network-services-pentesting/pentesting-web/web-api-pentesting.md

246 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Web API渗透测试
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 你在一家**网络安全公司**工作吗想要在HackTricks中看到你的**公司广告**吗?或者你想要获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
</details>
<figure><img src="../../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
使用[**Trickest**](https://trickest.io/)可以轻松构建和自动化由全球最先进的社区工具提供支持的工作流程。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## 基本信息
主要内容:
* **Web服务SOAP/XML**
* 文档使用**WSDL**格式,通常保存在`?wsdl`路径中,例如`https://api.example.com/api/?wsdl`
* 可以在[http://www.dneonline.com/calculator.asmx](http://www.dneonline.com/calculator.asmx)WSDL文档在[http://www.dneonline.com/calculator.asmx?wsdl](http://www.dneonline.com/calculator.asmx?wsdl))找到此类文档的示例,并且可以在[http://www.dneonline.com/calculator.asmx?op=Add](http://www.dneonline.com/calculator.asmx?op=Add)中查看调用`Add`方法的示例请求
* 要解析这些文件并创建示例请求,可以使用工具**SOAPUI**或**WSDLer** Burp Suite扩展。
* **REST APIJSON**
* 标准文档是WADL文件。在此处找到一个示例[https://www.w3.org/Submission/wadl/](https://www.w3.org/Submission/wadl/)。但是还有其他更适合开发人员的API表示引擎例如[https://swagger.io/tools/swagger-ui/](https://swagger.io/tools/swagger-ui/)(在页面中检查演示)
* 要解析这些文件并创建示例请求,可以使用工具**Postman**
* [**GraphQL**](graphql.md)
## 实验室
* [**VAmPI**](https://github.com/erev0s/VAmPI)**** VAmPI是一个使用Flask创建的易受攻击的API其中包含OWASP十大API漏洞。
## 技巧
### SOAP/XML
这类API可能容易受到[**XXE漏洞**](../../pentesting-web/xxe-xee-xml-external-entity.md)的攻击但通常会禁止用户输入中的DTD声明。
您还可以尝试使用CDATA标签插入有效的负载只要XML有效
![](<../../.gitbook/assets/image (534).png>)
### 检查访问权限
通常某些API端点需要比其他端点更高的权限。始终尝试从权限较低未经授权的帐户访问更高权限的端点以查看是否可能。
### CORS
始终检查API的[**CORS**](../../pentesting-web/cors-bypass.md)配置,如果允许使用攻击者域的凭据结束请求,可以通过经过身份验证的受害者进行[**CSRF**](../../pentesting-web/csrf-cross-site-request-forgery.md)造成很大的损害。
### 模式
在API中搜索API模式并尝试使用它来发现更多内容。\
如果您找到了_/api/albums/**\<album\_id>**/photos/**\<photo\_id>**_这样的模式您还可以尝试_/api/**posts**/\<post\_id>/**comment**/_之类的内容。使用一些模糊测试工具来发现这些新的端点。
### 添加参数
类似以下示例的内容可能会让您访问其他用户的照片相册:\
_/api/MyPictureList → /api/MyPictureList?**user\_id=\<other\_user\_id>**_
### 替换参数
您可以尝试**模糊测试参数**或使用在不同端点中看到的参数来尝试访问其他信息
例如如果您看到类似这样的内容_/api/albums?**album\_id=\<album id>**_
您可以**替换**`album_id`参数为完全不同的内容从而可能获取其他数据_/api/albums?**account\_id=\<account id>**_
### 参数污染
/api/account?**id=\<你的账户id>** → /api/account?**id=\<你的账户id>\&id=\<管理员的账户id>**
### 通配符参数
尝试使用以下符号作为通配符:**\***, **%**, **\_**, **.**
* /api/users/\*
* /api/users/%
* /api/users/\_
* /api/users/.
### HTTP请求方法更改
您可以尝试使用以下HTTP方法**GET, POST, PUT, DELETE, PATCH, INVENTED**以检查Web服务器是否以意外方式提供信息。
### 请求内容类型
尝试在以下内容类型之间进行切换相应地修改请求体以使Web服务器以意外方式行为
* **x-www-form-urlencoded** --> user=test
* **application/xml** --> \<user>test\</user>
* **application/json** --> {"user": "test"}
### 参数类型
如果**JSON**数据有效,请尝试发送意外的数据类型,例如:
* {"username": "John"}
* {"username": true}
* {"username": null}
* {"username": 1}
* {"username": \[true]}
* {"username": \["John", true]}
* {"username": {"$neq": "lalala"\}}
* 其他您可以想象的组合
如果可以发送**XML**数据,请检查[XXE注入](../../pentesting-web/xxe-xee-xml-external-entity.md)。
如果发送常规的POST数据请尝试发送数组和字典
* username\[]=John
* username\[$neq]=lalala
### 路由玩法
`/files/..%2f..%2f + 受害者ID + %2f + 受害者文件名`
### 检查可能的版本
旧版本可能仍在使用中,并且比最新的端点更容易受到攻击。
* `/api/v1/login`
* `/api/v2/login`\\
* `/api/CharityEventFeb2020/user/pp/<ID>`
* `/api/CharityEventFeb2021/user/pp/<ID>`
### 检查可能的版本(自动化方法)
AutoRepeater Burp扩展添加替换规则
* `类型:请求字符串`
* `匹配v2较高版本`
* `替换v1较低版本`
<figure><img src="/.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
\
使用[**Trickest**](https://trickest.io/)轻松构建和**自动化工作流程**,利用全球**最先进**的社区工具。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## 🛡️ API安全帝国备忘单
\
备忘单作者:[Momen Eldawakhly (Cyber Guy)](https://www.linkedin.com/in/momen-eldawakhly-3b6250204)\
\
在这个存储库中您将找到思维导图、技巧、资源以及与API安全和API渗透测试相关的所有内容。我们的思维导图和资源基于OWASP TOP 10 API、我们在渗透测试中的经验以及其他资源旨在提供最先进和准确的API安全和渗透测试资源
### 🚪 第一关:`{{Recon}}`
进入API安全帝国的第一关是了解如何收集有关API基础架构的信息以及如何对API进行强大的侦察以提取隐藏的入口从而使您妥协整个基础架构。因此我们提供了这个更新的API侦察思维导图其中包含最新的工具和方法
\
![](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap.png)
[**PDF版本**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap.pdf) **|** [**XMind版本**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap.xmind)
#### ⚔️ 您将需要的武器:
* [BurpSuite](https://portswigger.net/burp/releases)
* [FFUF](https://github.com/ffuf/ffuf)
* [Arjun](https://github.com/InsiderPhD/Arjun)
* [Postman](https://www.postman.com/downloads/)
* [SecLists](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
* [FuzzDB](https://github.com/fuzzdb-project/fuzzdb)
* [SoapUI](https://www.soapui.org/downloads/soapui/)
* [GraphQL Voyager](https://apis.guru/graphql-voyager/)
* [Kiterunner](https://github.com/assetnote/kiterunner)
* [unfurl](https://github.com/tomnomnom/unfurl)
#### 🏋️ 测试您的能力和武器:
* [vapi](https://github.com/roottusk/vapi)
* [Generic-University](https://github.com/InsiderPhD/Generic-University)
### 🚪 第二关:`{{Attacking}}`
#### 攻击RESTful和SOAP
![](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20ATTACK.png)\
[**PDF版本**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20ATTACK.pdf) **|** [**XMind版本**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20ATTACK.xmind)\\
#### 攻击GraphQL
由于GraphQL中的攻击有限我们尝试生成所有可能的攻击基于我们在测试API方面的经验在即将发布的思维导图中
![](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20%7B%7BGraphQL%20Attacking%7D%7D.png)\
[**PDF版本**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20%7B%7BGraphQL%20Attacking%7D%7D.pdf) **|** [**XMind版本**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20%7B%7BGraphQL%20Attacking%7D%7D.xmind)\\
## Owasp API安全前10名
阅读此文档以了解如何搜索和利用Owasp前10名API漏洞[https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)
## API安全检查清单
{% embed url="https://github.com/shieldfy/API-Security-Checklist" %}
## 用于搜索API漏洞的Logger++过滤器
[https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)
## 可能的API端点列表
[https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)
## 工具
* [**kiterunner**](https://github.com/assetnote/kiterunner)用于发现API端点的强大工具。
```bash
kr scan https://domain.com/api/ -w routes-large.kite -x 20 # Downloaded from kiterunner repo
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
```
* [**automatic-api-attack-tool**](https://github.com/imperva/automatic-api-attack-tool)Imperva的可定制API攻击工具以API规范作为输入生成并运行基于该规范的攻击。
* [**Astra**](https://github.com/flipkart-incubator/Astra)另一个用于API测试的工具用于查找多种不同的Web漏洞。
* [**Susanoo**](https://github.com/ant4g0nist/Susanoo)漏洞API扫描器。
* [**restler-fuzzer**](https://github.com/microsoft/restler-fuzzer)RESTler是第一个用于自动测试云服务的有状态REST API模糊测试工具用于通过REST API测试云服务并发现这些服务中的安全性和可靠性错误。对于具有OpenAPI/Swagger规范的给定云服务RESTler分析其整个规范然后生成并执行测试通过其REST API对服务进行测试。
* [**TnT-Fuzzer**](https://github.com/Teebytes/TnT-Fuzzer)****TnT-Fuzzer是一个用Python编写的OpenAPIswagger模糊测试工具。
* [**APIFuzzer**](https://github.com/KissPeter/APIFuzzer)****APIFuzzer读取您的API描述并逐步模糊字段以验证应用程序是否能够处理模糊的参数。
* [**API-fuzzer**](https://github.com/Fuzzapi/API-fuzzer)API\_Fuzzer gem接受API请求作为输入并返回可能存在的API漏洞。
* [**race-the-web**](https://github.com/TheHackerDev/race-the-web)通过同时向目标URL或URL发送用户指定数量的请求测试Web应用程序中的竞争条件并比较服务器的响应以确定其唯一性。
<figure><img src="../../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
使用[**Trickest**](https://trickest.io/)轻松构建和自动化由全球最先进的社区工具提供支持的工作流程。\
立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* 您在**网络安全公司**工作吗您想在HackTricks中看到您的公司广告吗或者您想获得最新版本的PEASS或下载PDF格式的HackTricks吗请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[NFT](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks衣物**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享您的黑客技巧。**
</details>