相关阅读
视频讲解
当面对API端点时,之前的一些扫描工具往往会显得效果很差,因为他们的扫描仅仅基于目录字典,而API端点通常会有一定的结构,并且不断更新。现代,有太多流行的框架,如flask、rails、express、django等。本期视频我们将分享一个API端点渗透测试的神器KiteRunner,它是一个强大的工具,可以帮助你发现API路由。掌握了这个工具,你就可以发现别人不知道的API漏洞……
图文讲解
安装方式
进入KiteRunner Release页面,找到适合自己操作系统的版本,如kiterunner_1.0.2_linux_amd64.tar.gz
![图片[1]-【渗透工具系列】渗透测试每个API | KiteRunner-FancyPig's blog](https://www.cvv-goods.com/wp-content/uploads/2023/03/20230130094643988-1024x617-1.webp)
然后将文件解压就可以使用了
![图片[2]-【渗透工具系列】渗透测试每个API | KiteRunner-FancyPig's blog](https://www.cvv-goods.com/wp-content/uploads/2023/03/20230130094759341.webp)
为什么使用KiteRunner
长期以来,内容发现一直集中在寻找文件和文件夹上。虽然这种方法对承载静态文件的传统网络服务器是有效的,或者对部分路径的响应是3xx,但对现代网络应用,特别是API,已经不再有效。
随着时间的推移,我们已经看到在使内容发现工具变得更快方面投入了大量的时间,以便可以使用更大的词表,然而内容发现的艺术并没有得到创新。
Kiterunner是一个工具,它不仅能够以闪电般的速度进行传统的内容发现,而且能够在现代应用中对路由/端点进行暴力破解。
现代应用框架,如Flask、Rails、Express、Django和其他框架,都遵循明确定义路由的范式,有特定的HTTP方法、标头、参数和值。
当使用传统的内容发现工具时,这样的路由经常被遗漏,而且不容易被发现。
通过整理Swagger规范的数据集并将其浓缩到我们自己的模式中,Kiterunner可以使用这个数据集,通过为每个请求发送正确的HTTP方法、标头、路径、参数和值来破解API端点。
Swagger文件是从一些数据源收集的,包括在互联网上扫描40多个最常见的Swagger路径。其他数据源包括通过BigQuery的GitHub,以及APIs.guru。
API扫描
扫描单个目标
kr scan https://target.com:8443/ -w routes.kite -A=apiroutes-210228:20000 -x 10 --ignore-length=34
扫描单个目标,同时尝试HTTP、HTTPS
kr scan target.com -w routes.kite -A=apiroutes-210228:20000 -x 10 --ignore-length=34
扫描多个目标
kr scan targets.txt -w routes.kite -A=apiroutes-210228:20000 -x 10 --ignore-length=34
使用现有字典扫描
kr brute https://target.com -A=raft-large-words -A=apiroutes-210228:20000 -x 10 -d=0 --ignore-length=34 -ejson,txt
自定义字典扫描
当你有一个传统的字典dirsearch.txt,在词表中有%EXT%
时,你可以使用-D替换路径中存在%EXT%
的扩展名
kr brute https://target.com -w dirsearch.txt -x 10 -d=0 --ignore-length=34 -ejson,txt -D
![图片[3]-【渗透工具系列】渗透测试每个API | KiteRunner-FancyPig's blog](https://www.cvv-goods.com/wp-content/uploads/2023/03/20230130095949455.webp)
查看系统内置字典
kr wordlist list
这个字典是定期更新的,因此这个工具扫描体验还是非常棒的。
![图片[4]-【渗透工具系列】渗透测试每个API | KiteRunner-FancyPig's blog](https://www.cvv-goods.com/wp-content/uploads/2023/03/20230130100519648-1024x761-1.webp)
自定义字典如何转化成KiteRunner相关格式
可以进行相应的格式转换
wordlist.kite
wordlist.json
wordlist.txt
kr kb convert wordlist.txt wordlist.kite
kr kb convert wordlist.kite wordlist.json
kr kb convert wordlist.kite wordlist.txt
重放请求
当你从kiterunner收到一堆输出时,你可能很难立即理解为什么一个请求会导致一个特定的响应代码/长度。Kiterunner提供了一种从所使用的词表重建请求的方法,包括所有头和正文参数。
你可以通过将完整的响应输出复制粘贴到kb replay命令中来重放一个请求。
你可以指定一个–代理来转发你的请求,这样你就可以使用第三方工具修改/重复/拦截请求,如果你愿意的话。
由于默认的golang规范的实现方式(不幸的是),golang net/http客户端将对你的请求进行一些额外的修改。
❯ go run ./cmd/kiterunner kb replay -q --proxy=http://localhost:8080 -w routes.kite "POST 403 [ 287, 10, 1] https://target.com/dedalo/lib/dedalo/publication/server_api/v1/json/thesaurus_parents 0cc39f76702ea287ec3e93f4b4710db9c8a86251"
11:25AM INF Raw reconstructed request
POST /dedalo/lib/dedalo/publication/server_api/v1/json/thesaurus_parents?ar_fields=48637466&code=66132381&db_name=08791392&lang=lg-eng&recursive=false&term_id=72336471 HTTP/1.1
Content-Type: any
11:25AM INF Outbound request
POST /dedalo/lib/dedalo/publication/server_api/v1/json/thesaurus_parents?ar_fields=48637466&code=66132381&db_name=08791392&lang=lg-eng&recursive=false&term_id=72336471 HTTP/1.1
Host: target.com
User-Agent: Go-http-client/1.1
Content-Length: 0
Content-Type: any
Accept-Encoding: gzip
11:25AM INF Response After Redirects
HTTP/1.1 403 Forbidden
Connection: close
Content-Length: 45
Content-Type: application/json
Date: Wed, 07 Apr 2021 01:25:28 GMT
X-Amzn-Requestid: 7e6b2ea1-c662-4671-9eaa-e8cd31b463f2
User is not authorized to perform this action
暂无评论内容