일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 워게임
- Web Hacking
- TeamH4C
- Insecure CAPTCHA
- DOM-Based XSS
- Weak Session IDs
- 써니나타스
- 정보보안
- sql injection
- Lord of SQL Injection
- 빡공팟 4기
- XSS
- Remote File Inclusion
- Hackerfactory
- DVWA
- SuNiNaTas
- Cross Site Scripting
- H4CKINGGAME
- Dremhack
- wargame
- 정보보호
- bypass CAPTCHA
- Los
- File Upload Vulnerability
- 해커팩토리
- 빡공팟 6기
- DreamHack
- webhacking.kr
- 웹 해킹
- 드림핵
- Today
- Total
도카이트
[DVWA] Insecure CAPTCHA (Medium) 본문
페이지 화면
- 소스코드를 바로 확인해보자 !
소스코드
// Check CAPTCHA from 3rd party
$resp = recaptcha_check_answer(
$_DVWA[ 'recaptcha_private_key' ],
$_POST['g-recaptcha-response']
// Did the CAPTCHA fail?
if( !$resp ) {
// What happens when the CAPTCHA was entered incorrectly
$html .= "<pre><br />The CAPTCHA was incorrect. Please try again.</pre>";
$hide_form = false;
return;
}
else {
// CAPTCHA was correct. Do both new passwords match?
if( $pass_new == $pass_conf ) {
// Show next stage for the user
echo "
<pre><br />You passed the CAPTCHA! Click the button to confirm your changes.<br /></pre>
<form action=\"#\" method=\"POST\">
<input type=\"hidden\" name=\"step\" value=\"2\" />
<input type=\"hidden\" name=\"password_new\" value=\"{$pass_new}\" />
<input type=\"hidden\" name=\"password_conf\" value=\"{$pass_conf}\" />
<input type=\"hidden\" name=\"passed_captcha\" value=\"true\" />
<input type=\"submit\" name=\"Change\" value=\"Change\" />
</form>";
}
// Check to see if they did stage 1
if( !$_POST[ 'passed_captcha' ] ) {
$html .= "<pre><br />You have not passed the CAPTCHA.</pre>";
$hide_form = false;
return;
}
- Low 난이도와 달라진 코드 부분만 짜깁기하여 가져왔다 !
- g-recaptcha-response 값을 POST 방식으로 요청하여 reCAPTCHA를 검증 하는듯 하다.
- $resp 변수의 값이 일치하지 않는 경우, CAPTCHA가 올바르지 않다는 에러를 출력한다.
- <pre> 태그 부분부터가 CAPTCHA가 정상적으로 통과될 시의 로직인 듯하다.
- step 값을 2로, password_new와 _conf 값을 요청받고, passed_captcha 값을 true로,
Change 값을 Change로 POST 방식을 통해 요청받는 듯 하다.
새로 추가된 부분과 변경된 부분들을 코드를 통해 충분히 살펴보았으니 바로 우회를 시도해보자!
늘 그래왔듯이 패킷 변조를 하기 위해 Burp Suite를 실행한다 !
Burp Suite를 통한 Packet Intercept
- 변경할 password를 입력한 후, reCAPTCHA 인증을 하지 않고 Change 버튼을 클릭하여 submit한다.
- 이 때 패킷을 Intercept하면, step 값이 1이며, g-recaptcha-response는 값이 설정되어 있지 않은 것을 확인할 수 있다.
- 위 소스코드 분석에서 확인한 바와 같이 reCAPTCHA 통과 조건에 맞게 step 값을 2로, g-recaptcha-response를
passed_captcha=true로 값을 변조하여 패킷을 Forward 해준다.
패스워드 변경 완료 화면
- reCAPCHA 인증을 하지 않았음에도, 인증이 우회되어 패스워드가 변경되었다.
패스워드 변경 확인
- 패스워드 변경 검증을 위해 CSRF 탭의 Test Credentials를 이용하였다.
- 설정한 패스워드로 정상적으로 변경이 완료되었음을 확인할 수 있다!
'Web > DVWA' 카테고리의 다른 글
[DVWA] Blind SQL Injection (Medium) (0) | 2022.05.26 |
---|---|
[DVWA] SQL Injection (Medium) (0) | 2022.05.26 |
[DVWA] File Upload (Medium) (0) | 2022.05.26 |
[DVWA] File Inclusion (Medium) (0) | 2022.05.26 |
[DVWA] CSRF (Medium) (0) | 2022.05.26 |