본문 바로가기

HOW TO HACK/Bug Bounty

[번역] 버그바운티 헌터 방법론 - 3. 메모와 세션 추적의 중요성

  • 이 글은 버그바운티 플랫폼을 운영 중인 미국의 Bugcrowd 라는 회사에서 Senior Community Manager로 근무하고 있는 Sam Houston 이라는 사람이 Bugcrowd 공식블로그에 게시한 글을 번역한 것입니다.
  • 일치하지 않는 사항이나 오류가 있는 경우에는 영문 원본 을 참고하십시오. 원본은 여기에서 확인 가능합니다.


"버그바운티 헌터 방법론" 시리즈의 세 번째 글입니다. 오늘은 당신이 트위터에서 팔로우(@ZephrFish)할 수 있는 ZephrFish 글입니다. 이 글을 모두 읽으시면 메모 및 세션 추적을 사용하여 버그바운티 헌팅을보다 성공적으로 수행하는 방법을 배울 수 있습니다. 의견이 있으시면 @Bugcrowd에 트윗하십시오 . 

 



ZephrFish의 글


해킹 및 보고서 작업과 동시에 작업 내용을 메모하고 추적하는 것은 가장 중요한 작업 중 하나입니다. 왜일까요? 당신은 세션이 언제 죽을지 모르고 또는 멋진 one-liner(모든 기능을 한 줄로 작성한 명령이나 코드)를 사용하고나서 이를 다시 사용하기 이전으로 되돌리고 싶어질지도 모르기 때문입니다. 작업중인 내용에 대한 간단한 메모를 하면 찾았던 사소한 버그는 물론 매우 중요한 버그를 다시 테스팅하고 싶을 때 기록해 두었던 메모를 참고할 수 있기 때문에 메모는 매우 중요합니다.




메모하기


메모 작업에 유용한 도구는 많이 있으며 개인적인 취향에 따라 다릅니다. 이에 사용되는 두 가지 일반적인 도구는 Keepnote마이크로소프트의 OneNote입니다. Keepnote는 크로스플랫폼 도구로 리눅스, 윈도우,  맥OS에서 돌아갑니다. 반면에 OneNote는 Windows 및 맥OS에서만 돌아갑니다. 어떤 사람들은 본인의 취향에 맞게 선택한 텍스트 편집기에서 메모를 하기도 합니다. 저는 Notepad++ 또는 Sublime text를 사용합니다.


메모를 할 때는 작업을 여러 섹션으로 나누어서 해두는 것이 추후에 다시 찾아 볼 때 도움이 됩니다. 따라서 흥미로운 애플리케이션이나 포트를 찾으면 해당 섹션을 작성합니다. zephr.fish라는 예제 호스트에 관한 제 노트를 예로 들어 보겠습니다. 아래에서 언급된 포트들은 순전히 예를 들기 위해 사용한 것입니다.



```


== 타겟 ==


https://zephr.fish



== 흥미로운 포트 ==


3306 - MySQL


60893 - Memcache


8080 - 웹 애플리케이션으로 추측


60001 - 애플리케이션 또는 DB로 추측



== 실행중인 웹 애플리케이션 ==


8080 - Apache Tomcat


60001 - Adobe Coldfusion



== 가능한 공격 ==


RCE - ColdFusion (zephr.fish:60001)


XXE - ColdFusion (zephr.fish:60001)


XSS - 메인 도메인 (zephr.fish:80)


```



위의 예는 제가 설정한 목표 URL 및 확인된 포트 그리고 적용되어 있는 기술과 테스팅이 가능한 공격 유형을 보여줍니다. 이러한 익스플로잇/취약점은 일반적으로 구글링을 통해 수집합니다. 메모는 모든 직업에서도 매우 유용하게 쓰이며, 당신이 봤던 내용을 요약/정리해두는데 유용할 수 있습니다. 


결국, 당신이 취약점을 찾고 계속하기 전에 그것을 메모해두면 테스트 진행간에 유용하게 쓸 수 있습니다.



세션 추적


메모와 함께 해야 할 일은 세션 추적입니다. 원론적으로는 당신이 사용하는 모든 명령, 전송한 패킷과 방문할 수있는 URL을 모두 기록합니다.


해야 할 일이 너무 많은 것처럼 보일 수 있지만 몇몇 도구들을 이용하면 이 작업을 쉽게 자동화시킬 수 있으며, 매우 손쉬운 방법을 찾을 수도 있습니다. .


아마 당신은 전송한 패킷을  추적해야 하는지 궁금해 할 수도 있습니다. 여러가지 이유가 있을 수 있지만, 특히 모의침투 테스트(Pentesting)를 할 때 중요합니다. 테스트 중에 고객 환경이 중단(Down)되거나 어떤 문제가 발생하면 고객이 테스터에게 책임을 전가하거나 작업 로그를 요청하는 경우도 있기 때문입니다. 


자, 우리가 패킷을 추적해왔다면, 대상시스템으로 발송된 모든 트래픽을 쉽게 찾아내어 해당 문제가 내가 수행한 테스트 때문인지 아닌지를 정확히 밝혀낼 수 있습니다.


또한, 다른 측면에서 보면 패킷 추적은 서비스가 다양한 유형의 트래픽에 어떻게 반응하는지 알아보는데 매우 유용할 수 있으며 웹사이트가 다른 프로토콜에 대해 참조하는 내용을 추적하는데도 도움이 됩니다. 이 작업을 하려면 tcpdumpwireshark 두 가지 도구가 필요합니다.


Tcpdump는 다양한 유형의 트래픽을 추적하는 커맨드라인 도구이며 사용자에게 출발지, 목적지의 IP 주소 및 포트 등의 네트워크 트래픽 정보를 제공합니다. GUI환경이 없고 단지 SSH 액세스만 사용되는 서버에서 자체적으로 제공되는 반면 wireshark는 기본적으로 tcpdump를 위한 GUI환경입니다. 과거에 캡처했던 pcap 파일을 다시 불러와서 특정 트래픽 및 프로토콜을 필터를 통해 찾을 수 있다는 장점이 있습니다. 아래는 wireshark를 다루는 방법에 관한 간단한 예시입니다.



Wireshark를 시작하려면


- 프로그램 메뉴에서 Wireshark를 실행하세요. / 터미널을 열고 'wireshark&' 명령을 실행하세요.

**주의 : SSH 서버에서만 작동합니다. 설치하지 않았다면 [여기]에서 다운받을 수 있습니다. (https://www.wireshark.org).**


- LAN Interface 모니터링 시작


"Capture -> Interfaces..."


- 컴퓨터의 LAN Interface 옆에 있는 "Start"버튼을 선택하십시오.



패킷 캡쳐


- 터미널 열기


- ping 'www.google.com`


- 웹 브라우저 열기


http://www.google.com


- Wireshark에서 ICMP 요청 및 응답을 확인합니다. 

* 팁, "Filter:"라는 텍스트 상자에 "icmp"(따옴표 제외)를 입력하면 ICMP 트래픽을 필터링할 수 있습니다. *


Wireshark에서 TCP 핸드쉐이크를 확인하십시오. 

* 팁, "tcp"로 필터링하십시오.


- Wireshark에서 UDP 요청 및 응답을 확인합니다. 

* 팁, "dns"로 필터링하십시오.


- TCP/UDP가 아닌 일부 트래픽을 확인하십시오. 이 패킷들이 하는 일은 무엇입니까?


 


때로는 당신이 추적해야 할 것이 네트워크 트래픽뿐만이 아닐 수도 있습니다. index.html의 모든 정보에 대해 grep, cut, sed를 사용한 one-liner 또는 어떤 버그를 찾기 위해 필요한 모든 포트와 서비스를 담은 nmap 명령을 추적해야 할 필요도 있습니다. 유닉스에는 이를 위해 사용할 수 있는 것들이 몇 가지 있습니다. 그 중 첫 번째는 [script] (http://man7.org/linux/man-pages/man1/script.1.html)입니다. script는 당신의 터미널에 표시된 모든 것을 타이핑한 그대로 지정된 파일에 저장하는 명령어입니다.


 


Script 명령어는 왜 유용할까요?


모의침투 테스트(Pentesting)와 버그 헌팅에 있어 유용하게 사용될 수 있습니다. 모의침투 테스팅시 Tcpdump / Wireshark를 사용하는 것과 같이 모든 명령을 실행하고 인쇄할 수 있으므로 보고서의 근거자료 혹은 고객을 위한 피드백 용도로 사용할 수 있습니다. 마찬가지로 버그바운티 보고서에서 버그를 찾기 위해 당신이 사용한 명령과 과정을 설명하는데 매우 유용하게 사용될 수 있습니다.


 


`script`의 간단한 사용법


1. 세션 로깅을 시작하려면 간단히 'script ltr101.sh'를 입력하십시오 

    (파일명은 어떤 파일명을 지정해도 무관합니다. 이 예제에서는 ltr101.sh을 파일명으로 사용하고 있습니다).

2. 정상적으로 입력하고 완료되면 exit를 입력하십시오.




예제 스크립트


```    


$ script ltr101.sh


Script started, output file is ltr101.sh


$ cat index.html | cut -d ">"-f 2 | cut -d "="-f 2 | sed 's / \ "// g'> wordlist.txt


$ exit


Script done, output file is ltr101.sh


```


이제 파일(ltr101.sh)로 저장했으므로 당신이 주로 사용하는 파일 편집기에서 확인하거나 `cat`을 사용하여 터미널에 확인할 수 있습니다.



마지막으로 세션 추적에 대해 염두에 두어야 할 중요한 점이 하나 더 있지만 웹 애플리케이션 및 모바일 애플리케이션 테스트에만 관련된 것입니다. 이것은 Burp Suite Pro의 매우 멋진 기능이며, 당신의 세션을 저장하고 브라우저와 Burp에서 하는 모든 작업을 프로젝트 파일에 저장할 수 있습니다. 왜 이것이 유용할까요? 기본적으로 Burp의 프로젝트 파일은 범위 내에 있든 없든 (범위는`target`의 scope 탭에서 설정됩니다.) Burp를 통과한 모든 트래픽을 저장합니다. 그것은 또한 자바 크래시 (FUUJava)가 발생하거나 windows 업데이트를 당장 설치해야 하는 경우 failsafe(정보통신용어사전에 의하면 failsafe는 시스템이나 이것을 구성하는 기기의 일부에 사고, 고장, 오조작 등이 생겼을 경우 그 피해가 확대한다든지 다른 데에 나쁜 영향을 미치지 않도록 하는 것)를 추가 할 수 있습니다. 또는 일반적으로 브라우저/Burp 세션에서 일어나는 일들에 대한 로그를 가지고 있는 것입니다. 


Andy의 블로그에서 자세한 내용을 확인하십시오.