相关阅读

视频讲解

当面对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

然后将文件解压就可以使用了

图片[2]-【渗透工具系列】渗透测试每个API | KiteRunner-FancyPig's blog

为什么使用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

查看系统内置字典

kr wordlist list

这个字典是定期更新的,因此这个工具扫描体验还是非常棒的。

图片[4]-【渗透工具系列】渗透测试每个API | KiteRunner-FancyPig's blog

自定义字典如何转化成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
© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容