Get webpage screenshot with gowitness for CICD

What is gowitness

gowitness는 버그바운티 커뮤니티에서 잘 알려진 도구로 대량의 URL을 대상으로 웹 스크린샷을 빠르게 찍을 수 있는 도구입니다.

https://github.com/sensepost/gowitness

저도 예전부터 굉장히 잘 쓰고 있던 도구인데 지금보니 따로 블로그 글로 포스팅한 적이 없는 도구였네요. 아무튼 오늘은 도구에 대한 소개보단 제가 나중에 Pipeline 구성 시 사용하려고 간략하게 메모하는 느낌으로 글 작성하려고 합니다.

golang 기반 도구라 설치는 go get으로 간단히 가능합니다.

go get -u github.com/sensepost/gowitness

Format of Result

gowitness는 기본적으로 sqlite 를 사용하고 있고, 미리 만들어진 HTML Report 포맷에 맞춰 결과를 보여줍니다.

물론 단순히 결과를 확인하려는 목적이라면 기본적으로 제공되는 Report를 사용하면 되겠지만, 때에 따라서 Pipeline이나 CI/CD 등의 구성을 위해 스캔 결과에 대한 데이터가 필요할 수 있습니다.

보통 gowitness의 옵션 중 report 옵션으로 HTML 기반 리포트를 생성하는데, 관련 문서를 잘 찾아보니 sqlite 에서 summary만 뽑아서 출력할 수 있는 옵션이 있더군요. 이를 활용하면 쉽게 JSON 형태로 결과를 뽑아낼 수 있습니다.

Scanning multiple URLs

gowitness file -f hosts

Get JSON Result

gowitness report list -j
{
  "url": "https://www.hahwul.com",
  "final_url": "https://www.hahwul.com",
  "response_code": 200,
  "response_reason": "200 OK",
  "proto": "HTTP/1.1",
  "content_length": -1,
  "title": "HAHWUL",
  "file_name": "https-www.hahwul.com.png"
}