mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-24 05:33:33 +00:00
246 lines
14 KiB
Markdown
246 lines
14 KiB
Markdown
# 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 API(JSON)**
|
||
* 标准文档是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编写的OpenAPI(swagger)模糊测试工具。
|
||
* [**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>
|