9/05/2019

Burp collaborator 인증서 에러 해결하기(certificate error solution)

Burp를 쓰다보면 간혹 이런 에러를 만날 수 있습니다. (하필 중요한 콜라보레이터에서 ㅜㅜ)

The Burp Collaborator server used by the Burp Collaborator client is not reachable. change the setting…



Why problem?

Burp suite의 인증서(자체서명)로 콜라보레이터 서버에 대해 신뢰할 수 있는 연결을 할 수 없어서 에러가 발생합니다. 2가지 정도 방안이 있을 것 같습니다.

Solution1 - Poll over unencrypted HTTP

우선 이를 인지한건지 PortSwigger 측에서 기능으로 지원하고 있습니다.
버프 자체에서 암호화되지 않은 요청도 처리할 수 있도록 Poll over unencrypted HTTP 옵션 활성화해주시면 됩니다.

Burp tabs => Project options => Misc => Burp Collaborator Serverr



Solution2 - import certificate a java keysotre

인증서를 자바 자체에서 신뢰할 수 있도록 키스토어에 등록하여 처리할 수 있습니다.
$ keytool -importcert -file cacert.cer -keystore keystore.jks -alias "BurpSuite"

Reference

https://stackoverflow.com/questions/4325263/how-to-import-a-cer-certificate-into-a-java-keystore


HAHWUL

Security engineer, Gopher and H4cker!

Share: | Coffee Me:

14 comments:

  1. 안녕하세요 항상 좋은 포스팅 잘 보고 갑니다. 상기 포스팅에서도 언급하셨듯이 collaborator에 대해 알고 싶은데. 자료도 많이 없고 이해가 잘 되지 않는데. 쉽게 설명해 주실수 있으신가요? 포스팅도 좋습니다.

    ReplyDelete
    Replies
    1. 안녕하세요. 음 요약하자면 Callback을 받기 위한 서버라고 보시면 됩니다.
      예를들면, Blind XSS, Blind SSRF, RCE 등을 테스트할 때 외부 도메인으로 Web or DNS 쿼리를 날리게 되는데 이를 받아주고 어떤 요청인지 식별해주는 서버에요.
      보통은 PortSwigger쪽에 서버로 동작하고, 내부망에서 테스트할 땐 별도 구축해서도 사용할 수 있습니다.

      예를들면..
      b5hjifbfwhphy5puk6w0df8b72dy1n.burpcollaborator.net

      형태의 collaborator 주소를 만들었고, 아래 RCE 코드가 대상 서버에서 실제로 동작하게 되면 ..

      [ RCE 테스트 코드 ]
      test?param=aaa`curl%20b5hjifbfwhphy5puk6w0df8b72dy1n.burpcollaborator.net`

      [ Taborator 확장기능에서 확인한 Return ]
      The Collaborator server received an HTTP request.
      The request was received from IP address xxx.xxx.xxx.xxx at 2019-Dec-03 16:11:11 UTC

      GET / HTTP/1.1
      Host: b5hjifbfwhphy5puk6w0df8b72dy1n.burpcollaborator.net
      User-Agent: curl/7.64.1
      Accept: */*

      HTTP/1.1 200 OK
      Server: Burp Collaborator https://burpcollaborator.net/
      X-Collaborator-Version: 4
      Content-Type: text/html
      Content-Length: 53

      <html><body>05olsduls1gjzn44m97norzjogz</body></html>

      (DNS QUERY)
      i b5hjifbfwhphy5puk6w0df8b72dy1n burpcollaborator net ) €
      œ‘:ài±

      이런식으로 공격이 실제 성공했는지 체크할 수 있습니다. collaborator 가 받아줄 수 있는 요청 종류(http, https, dns, smtp 등 각종 프로토콜)을 지원하기 때문에 직접 구축보다 훨씬 편리해서 많이 사용하는 기능입니다.
      아래 문서가 직접 구축하는 가이드인데, 읽어보시면 대략 어떤 기능이고 어떤 것들을 할 수 있는지 파악하기 좋습니다.

      https://portswigger.net/burp/documentation/collaborator/deploying

      더 궁금하신점이 있으시면 댓글이나 트윗주세요~

      Delete
  2. 아... 계속 기다리다가 지금봤네요!. 일단 답변감사합니다. 말씀하신 가이드 읽어보고 더 궁금한게 있으면 댓글 남기겠습니다. 감사합니다.!

    ReplyDelete
  3. 아.. 바보같은 질문일수도 있겠습니다만.

    1. blind XSS 라면 게시글 작성 시 어드민만 볼수 있는곳에서 발생하는것인데 callback을 받는다면
    HTTP/1.1 200 OK
    Server: Burp Collaborator https://burpcollaborator.net/
    X-Collaborator-Version: 4
    Content-Type: text/html
    Content-Length: 53

    <html><body><script>alert(1)</script></body></html> 이렇게 나온다는것인가요?

    2.굳이 collaborator를 써야하는 이유가 있을까요? blind는 이해가 되는데 다른것이 잘 이해가 가지 않아서요...

    질문 받아주셔서 감사합니다.

    ReplyDelete
    Replies
    1. 안녕하세요. 음 요약하자면 Callback을 받기 위한 서버라고 보시면 됩니다.
      예를들면, Blind XSS, Blind SSRF, RCE 등을 테스트할 때 외부 도메인으로 Web or DNS 쿼리를 날리게 되는데 이를 받아주고 어떤 요청인지 식별해주는 서버에요.
      보통은 PortSwigger쪽에 서버로 동작하고, 내부망에서 테스트할 땐 별도 구축해서도 사용할 수 있습니다.

      예를들면..

      b5hjifbfwhphy5puk6w0df8b72dy1n.burpcollaborator.net

      형태의 collaborator 주소를 만들었고, 아래 RCE 코드가 대상 서버에서 실제로 동작하게 되면 ..

      [ RCE 테스트 코드 ]
      test?param=aaa`curl%20b5hjifbfwhphy5puk6w0df8b7...`

      [ Taborator 확장기능에서 확인한 Return ]
      The Collaborator server received an HTTP request.
      The request was received from IP address xxx.xxx.xxx.xxx at 2019-Dec-03 16:11:11 UTC

      GET / HTTP/1.1
      Host: b5hjifbfwhphy5puk6w0df8b72d...
      User-Agent: curl/7.64.1
      Accept: */*

      HTTP/1.1 200 OK
      Server: Burp Collaborator https://burpcollaborator.net/
      X-Collaborator-Version: 4
      Content-Type: text/html
      Content-Length: 53

      05olsduls1gjzn44m97norzjogz

      (DNS QUERY)
      i b5hjifbfwhphy5puk6w0df8b72dy1n burpcollaborator net ) €
      œ‘:ài±

      이런식으로 공격이 실제 성공했는지 체크할 수 있습니다. collaborator 가 받아줄 수 있는 요청 종류(http, https, dns, smtp 등 각종 프로토콜)을 지원하기 때문에 직접 구축보다 훨씬 편리해서 많이 사용하는 기능입니다.
      아래 문서가 직접 구축하는 가이드인데, 읽어보시면 대략 어떤 기능이고 어떤 것들을 할 수 있는지 파악하기 좋습니다.

      https://portswigger.net/bur...

      더 궁금하신점이 있으시면 댓글이나 트윗주세요~

      Delete
  4. 먼저 답변 감사드립니다.

    1. 첫번째로 굳이 callback 서버가 필요한지 의문입니다. burp로 해도 받는 데이터를 callback서버로 받아야 하는가요?

    2.collaborator를 사용하는 이유가 궁금합니다. 저번 포스트에서 언급하셨듯이 blind계열은 이해가 되는데 나머지는 이해가 되지 않아서요..

    답변 항상 감사드립니다.

    ReplyDelete
    Replies
    1. 아뇨아뇨, collaborator의 목적은 blind 환경(백엔드 서버, 어드민 툴 등등)에서 나의 공격코드가 실행되었는가? 를 증명하고 확인하는데 목적이 있어요.

      제가 예시를 Blind XSS로 들어서 조금 헷갈리실 수 있는데, callback을 받음으로써, 어드민에서 공격코드가 실행됬다는걸 알 수 있으니깐요. 딱 거기까지에요.

      그래서 보통은 RCE나 트래픽 흐름에 영향줄 수 있는 부분 테스트를 위해서 많이 사용해요(Blind XSS는 xsshunter 같이 blind XSS 도구들이 더 상세한 정보를 주기 때문에 훨씬 좋습니다)

      2) 예를들면, User-Agent에 RCE 취약점이 내포되어있다고 할게요.
      그럼 우리는 이걸 어떻게 식별할까요? ping이나 sleep으로 시간 검증을 할 수도 있겠지만, curl 등으로 원격지에서 온 요청을 받는것도 좋은 방법이죠. 보통은 그럼 서버를 하나 만들어두고, HTTP Request가 오는지 확인할거잖아요.

      콜라보레이터는 똑같은 역할을 하는 서버인데, HTTP 말고 여러가지 프로토콜을 지원해요. 만약에 User-agent로 들어간 RCE 코드가 동작하는 서버가 외부망이 차단된 서버면 감지할 수 있을까요? 보통 웹 요청은 안오지만, DNS 조회는 하기떄문에 DNS Query가 날라올 수 있어요. 그런걸로 서버의 상태나 공격코드가 동작했는지 체크하고 판단하는데 사용합니다.

      Delete
  5. 아... 죄송합니다. 어려워서 제가 잘 못이해한거 같습니다. 백엔드의 요청을 얻기 위해서 군요. 또 원초적인 질문인데.... 예를 들면 XSS을 위해 저희가 입력값이나 이런곳에 스크립트를 넣으면서 확인을 하는데 collaborator를 사용하여 아래에서 말슴하셨던
    HTTP/1.1 200 OK
    Server: Burp Collaborator https://burpcollaborator.net/
    X-Collaborator-Version: 4
    Content-Type: text/html
    Content-Length: 53

    <html><body><script>alert(1)</script></body></html>

    이런식으로 나와서 blind xss가 된다는것을 확인한다는것인가요...? 한번도 사용을 해보지 못해서... 게속 질문만 해서 죄송합니다.

    ReplyDelete
    Replies
    1. 위에서 이야기드렸지만, Response로 날라오지 않는 백엔드 서버의 요청을 분석하기 위해 사용하는거에요 :)

      Delete
    2. 아닙니다 ㅎㅎㅎ 최초의 Blind XSS 코드가 이런식이 되겠지요

      <script src="콜라보레이터 주소"></script>
      response에는 별다른 값이 없을거고, script 태그로 인해서 동작했다는 사실만 알 수 있습니다.

      그래서 blind xss의 경우에는 blind xss 도구들이 더 쓸만하다는 이야기구욥
      (걔네들은 src로 요청된 javascript 코드에 현재 페이지 정보, ip 등등 여러가지를 수집해서 공격자에게 전달해주도록 정의되어 있어요!)

      Delete
    3. 와... 이건 진짜 해보지 않으면 잘 모르겟네요. 저 응답오는것만 해보면 좋겠네욯ㅎㅎ.... 그 collaborator를 시험해볼만한 사이트가 있을까요? 제거 찾을때는 너무 없어서.... 항상 빠른 답변 감사합니다!!!!!!!!!

      Delete
    4. 보통 CDN쪽 서비스의 Host 헤더나 임의로 X-Fowarded-For 등 헤더 붙였을 때 callback 오는 경우들이 종종 있어요.
      (캐시하려고 요청하는 과정에서 Host나 다른 헤더를 보는 경우들이 있어요)
      Burp 확장 기능중에 collaborator everywhere 같은거 설치하고 scope 에 대상 넣고 돌아다니다보면 잡히는 경우가 있습니다.

      단순하게 로컬에서 직접 테스트해보시려면, 그냥 collaborator 서버 주소로 curl 날려보는게 제일 깔끔해요.

      $ curl 5syph13cxd09boeh16g4rr5mmds4gt.burpcollaborator.net
      이렇게 요청했을 때 아래와 같이 callback 오는걸 확인할 수 있구요(보통은 taborator라는 확장 기능에서 collaborator 주소를 만들고 결과를 받아봅니닷)

      Delete
    5. 방금 제가 댓글에 쓴 주소때문인지, 다른곳에서 바로 콜백이 와버렸네요. (robots.txt 호출한거 봐선.. 단순히 호스트 체크한거같긴하네요)

      Request

      GET /robots.txt HTTP/1.1
      Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
      Cache-Control: max-age=0
      User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.18) Gecko/20080921 SUSE/2.0.0.18-0.1 Firefox/52.5.0
      Connection: close
      Refresh-Cache: 1
      Accept-Language: en-gb,en;q=0.5
      Pragma: no-cache
      Host: 5syph13cxd09boeh16g4rr5mmds4gt.burpcollaborator.net
      Accept-Encoding: gzip

      Response

      HTTP/1.1 200 OK
      Server: Burp Collaborator https://burpcollaborator.net/
      X-Collaborator-Version: 4
      Content-Type: text/plain
      Content-Length: 58

      Delete
    6. 와... 하나하나 잘 설명해주셔서 감사합니다. 저도 위에서 알려주신 구축 가이드 보면서 한번 해봐야 겠네요. 감사합니다!!!

      Delete