일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DOM-Based XSS
- Los
- H4CKINGGAME
- SuNiNaTas
- Dremhack
- bypass CAPTCHA
- File Upload Vulnerability
- 빡공팟 4기
- 정보보호
- sql injection
- XSS
- DVWA
- 해커팩토리
- webhacking.kr
- 워게임
- 써니나타스
- Web Hacking
- Lord of SQL Injection
- Remote File Inclusion
- wargame
- Cross Site Scripting
- Hackerfactory
- Insecure CAPTCHA
- 웹 해킹
- Weak Session IDs
- 빡공팟 6기
- TeamH4C
- DreamHack
- 드림핵
- 정보보안
- Today
- Total
도카이트
[DVWA] CSRF (Medium) 본문
Cross Site Request Forgery
웹 사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가
의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격
페이지 화면
- Low 난이도의 CSRF 페이지와 동일한 화면이다!
- 바로 소스코드를 확인하러 가보자!
소스코드
if( isset( $_GET[ 'Change' ] ) ) {
// Checks to see where the request came from
if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false ) {
// Get input
$pass_new = $_GET[ 'password_new' ];
$pass_conf = $_GET[ 'password_conf' ];
// 중간 부분 생략
else {
// Didn't come from a trusted source
echo "<pre>That request didn't look correct.</pre>";
- stripos 함수를 통해 HTTP 요청 패킷의 Referer 값을 검증하는 로직이 추가된듯 하다..!
- 올바르지 않은 Referer, 즉 DVWA 실습 환경의 웹 서버 Host와 문자열을 HTTP Request Referer의 문자열을
비교하여 일치하는 부분이 없을 경우 검증 로직에서 true가 되어, else 문이 실행된다.
- else 문은 올바르지 않은 요청이라는 말을 출력한다 !
임의의 값 (1234)로 패스워드 변경
- 먼저 임의로 변경할 패스워드로 1234를 입력 후 패스워드를 Change 해보았다.
- 패스워드가 변경되는 방식은 Low 난이도와 동일하게 URL의 파라미터 부분 값 부분을 통해
패스워드가 변경되는 듯 하다.
- Low 난이도에서의 공격 방식과 동일하게 패스워드 변경 페이지가 아닌 다른 페이지에서,
비밀번호 변경 값이 포함된 Change URL을 직접 삽입하여 페이지 탐색을 시도해보았다.
- 그러나, if 문의 Referer 검증을 통과하지 못하고 막혀버렸다…!!
해당 문제를 풀기 위해 여러 가지 방법을 시도해보았다.
- Low 난이도와 같이 외부 소스에 앵커 태그 또는 JavaScript를 삽입한 XSS Redirection을 통하여 CSRF 시도
- DVWA 사이트 내에서 개발자 도구 Console 탭을 이용하여 location.href나 location.replace를 이용한 CSRF 시도
1번 방법의 경우에는 Referer 검증 로직에 의해 어림도 없이 막혀버렸고, 2번 방법의 경우에는 너무나도 손쉽게 성공했다! 그러나, 2번의 경우는 Self 방식의 XSS, CSRF이며, 실제로 이러한 방식은 공격자에 의한 공격으로 보지 않으며..
웹 버그바운티 시에도 Self 방식은 인정되지 않는다고 알고 있다…
또한 Referer를 검증하고 필터링 한다는 점이 외부 소스 또는 비정상적으로, 수동적으로 Change Password URL을 입력하는 것을 막겠다는 의도가 아닐까 생각하여 해당 내용을 중점으로.. 미래에 한 명의 모의해킹 실무자로서, 보안 컨설턴트로서 실제 발생할 수 있는 시나리오와 취약점을 기반으로 조금이나마 DVWA를 공부하고 실습을 진행해보고 싶었기에 2번 방법은 제외하고, 더 고민하고 탐구해보다 방법을 찾고 문제를 해결하게 되었다 !!
먼저 Burp Suite를 통하여 CSRF 탭에서 Password를 Change 할 경우의 Packet 내용을 확인해보자!
CSRF 탭에서 정상적인 Password Change
- Referer 값에 DVWA 웹 서버 호스트와 경로가 기재되어 있다.
- 다른 탭 또는 다른 사이트에서 수동적으로 Change Password URL을 탐색할 경우도 살펴보자 !
다른 탭에서 Password Change URL을 입력 후, 수동 페이지 탐색
- 먼저 DVWA 실습 페이지의 Home 탭에서 수동으로 URL을 삽입하여 페이지 탐색을 시도했다.
- 그리고 이 때 요청 패킷을 Burp Suite로 Intercept하여 확인해보았다.
- Referer 값이 아예 존재하지 않는 점을 확인할 수 있었으며…
- 이 같은 경우에는 Referer 검증 로직에 의해… 실패하게 된다.
- 실패 화면은 별도로 다시 한 번 첨부하지는 않겠다….
어떻게 하면, 웹 서버 Host와 Referer를 일치시키면서 CSRF 공격을 성공시킬까를 고민해보다가…
DVWA 실습 페이지에 존재하는 XSS 탭이 생각났다 …! (진짜 이 때 쾌감 장난 아니였다)
DVWA 페이지에 존재하는 XSS 탭에서 Change Password URL을 소스로 삽입한 Redirection이라면,
Referer로 웹 서버 Host와 일치하고, CSRF 공격 역시 성공시킬 수 있을 것만 같았다 !
바로 한 번 시도해보자 !!!
CSRF 문제를 풀기 위해 얼떨결에 Reflected XSS 문제도 함께 해결해버렸다..!
사실 CSRF 문제를 풀기 위해 선행되어야 하는 문제였나…? 하는 생각도 든다…
여기서 Reflected XSS 탭에서 삽입한 스크립트에 대해 설명하고 하기엔 너무 글이 길어지므로,
해당 탭에서 공격에 사용한 코드에 대한 설명은 Reflected XSS (Medium) 포스트에서 설명하겠다.
Reflected XSS를 이용한 CSRF 공격
- Reflected XSS에서 CSRF 공격을 하기 위하여 삽입한 스크립트는 다음과 같다.
- <img src=# onerror="location.href='http://192.168.100.102/dvwa/vulnerabilities/csrf/?password_new=pass&password_conf=pass&Change=Change#';">
- onerror 속성에 location.href 를 이용하여 Change Password URL로 Redirection을 유도한다.
- Burp Suite를 통해 패킷을 확인해보면, Referer 값으로 DVWA 웹 서버 Host를 확인할 수 있다!
Reflected XSS를 이용한 CSRF 공격 성공
- 드디어 … !! 성공적으로 Medium 난이도의 CSRF 공격을 성공시켰다 !!
+ 공격자 공격 시나리오 관점 응용 (외부 페이지)
공격자의 관점에서 이메일을 통한 악성 링크 삽입이나, 악성 페이지에서의 악성 링크를 삽입한
공격까지도 완성시켜보기 위해 구축되어 있는 AWS ec2 Windows Server를
활용하여 추가적으로 실습을 진행해보았다.
CSRF 공격에 사용할 소스로는 앞서 공격에 성공한 Reflected XSS 시의 URL을 삽입하였다.
1. 간단한 악성 웹 페이지 생성 (button 생성 및 onclick 속성 활용)
# csrf_meidum.html
<html>
<head>
</head>
<body>
<h1>Let's CSRF!</h1>
<input type="button" name="CSRF" value="CSRF" onclick='location.href="http://172.30.1.46/dvwa/vulnerabilities/xss_r/?name=%3Cimg+src%3D%23+onerror%3D%22location.href%3D%27http%3A%2F%2F172.30.1.46%2Fdvwa%2Fvulnerabilities%2Fcsrf%2F%3Fpassword_new%3Dpassword%26password_conf%3Dpassword%26Change%3DChange%23%27%3B%22%3E#";'>
</body>
</html>
- button의 onclick 속성으로 location.href를 통한 Reflected XSS Change Password URL을 삽입하였다.
- 해당 버튼 클릭 시 사용자의 계정 비밀번호를 password로 변경한다 !
2. 페이지 접속 후 CSRF 버튼 클릭
3. Reflected XSS 코드를 통한 외부 페이지에서의 Referer 검증 우회 CSRF 공격 성공
'Web > DVWA' 카테고리의 다른 글
[DVWA] File Upload (Medium) (0) | 2022.05.26 |
---|---|
[DVWA] File Inclusion (Medium) (0) | 2022.05.26 |
[DVWA] Command Injection (Medium) (0) | 2022.05.25 |
[DVWA] Brute Force (Medium) (0) | 2022.05.25 |
[DVWA] JavaScript (Low) (0) | 2022.05.22 |