ProjectDiscovery의 도구들은 항상 커뮤니티에 큰 파장을 일으킵니다. 실제로 ProjectDiscovery로 인해 CLI 기반의 테스팅이 훨씬 대중화되고, 이들의 도구는 각종 Pipeline에서의 핵심 도구가 되고 있습니다. 그리고 최근에 Katana란 도구를 출시하고 Nuclei 만큼 큰 파장을 일으키고 있는 것 같네요.
Katana
Katana는 Web Crawler 이며 여러가지 Input 포맷과 Line 단위의 결과 출력 포맷을 제공합니다. 이는 ProjectDiscovery 도구들의 주요 특징이죠. 덕분에 안정적인 Pipeline 구성이 가능합니다.
# Installation
go install github.com/projectdiscovery/katana/cmd/katana@latest
# Usage
katana -u https://www.hahwul.com # URL input
echo https://www.hahwul.com | katana # STDIN
# Result
# https://www.hahwul.com/
# https://www.hahwul.com/about/
# https://www.hahwul.com/cullinan/
# https://www.hahwul.com/phoenix/
# https://www.hahwul.com/2022/11/01/xsshunter-will-close-soon/
# ....
Pipeline Example
cat targets.txt | subfinder -silent | httpx -silent | katana | tee all_urls.txt
Is Katana the best? No
그럼 Katana가 gospdier, burpsuite, zap 등의 도구의 crawler 보다 좋은 성능을 가졌을까요? 결론부터 이야기하면 아닙니다. 물론 도구는 성능, 편의성 등등 여러가지 요소가 작용하기 때문에 누가 좋다 판단할 순 없지만, 제가 Security Crawl Maze를 기준으로 체크해 봤을 땐 아래와 같은 결과가 나옵니다.
Gospider | Katana | BurpSuite | ZAP | |
---|---|---|---|---|
Found | 24 | 48 | 35 | 59 |
For Pipeline | Easy | Very Easy | Very Hard | Medium |
Options | Depth 50 | Depth 50 | Default | Default |
Performance test
결과는 .found
경로를 얼마나 찾았는지로 측정했습니다.
Gospider
24개의 결과가 있었습니다. 물론 LinkFinder의 결과로 일부 중복 케이스가 있어서 실제론 10개-20개 사이일 것으로 보입니다. 다만 기본 스캔 옵션이고, -a
와 같이 3rd party를 수집하는 옵션이 사용되면 Waybackmachine 등 OSINT의 결과에 따라 확 달라질 수도 있습니다.
Katana
CLI 도구중에선 가장 많은 Result를 만들어내지 않을까 싶습니다. 48개의 URL을 발견했고 속도도 준수했습니다.
Burpsuite
아마 아시겠지만 Burpsuite의 Crawl 능력은 체감상 특정 시점 부터 많이 떨어졌다고 생각합니다. 물론 Morden 웹에는 강한 경향이 있으나 전반적인 능력은 상대적으로 살짝 밀리긴합니다. (물론 이를 커버하는 엄청난 ActiveScan이 있죠)
ZAP
최근 버전업의 핵심이 Crawl이다 보니 .found는 59건으로 가장 많이 찾아냈습니다. 다만 Katana나 Gospider에 비해서 무겁고 CLI Pipeline으로 연동하기 조금 어렵다는 단점이 존재합니다.
Why Hot?
딱 Katana가 중간적인 포지션을 가지고 있습니다. 준수한 스캔 능력과 Pipeline 친화적인 특성 상 여러가지 자동화 플로우에 들어가기 좋습니다. 결국 이는 다른 도구들과의 조합으로 단순히 크롤링 뿐만 아니라 취약점 스캐닝 등을 하나의 명령으로 쉽게 만들 수 있어집니다. 이게 현재 Katana가 가진 가장 좋은 장점이라고 보입니다.
# 몇가지 도구를 이용하면 도메인 내 포함된 URL들의 XSS를 스캔하는 플로우를 만들 수 있겠네요.
# xssall
# > testphp.vulnweb.com
# [POC][R][GET][inATTR-double(3)-URL] http://testphp.vulnweb.com/hpp/?pp=%22%26%23x27%3B%3E%3CsVg%2Fonload%3Dalert.bind%28%29%281%29%3E
xssall(){
gum input --placeholder='Input Target'
| httpx -silent
| katana -silent
| dalfox pipe --silence
}