yon11b

[SK 쉴더스 루키즈] 사용자 인증 취약점 실습문제(쇼핑몰) 본문

보안/SK 쉴더스 루키즈

[SK 쉴더스 루키즈] 사용자 인증 취약점 실습문제(쇼핑몰)

yon11b 2026. 7. 3. 22:34
반응형

4번

첫번째 방법

새 비밀번호를 등록하여 admin으로 로그인하세요.(가입한 본인 계정으로 비밀번호 찾기 기능을 이용)

비밀번호: 1234로 설정하고 burp intercept on으로 잡은 상태에서 등록 버튼을 눌러 날라가는 요청을 확인해보자.

_csrf=7b43e3b7-765d-4fb9-a658-68ed1734d193&password=1234&passwordconfirm=1234&encryptid=U2FsdGVkX19%2BmCqJ%2B3qbotBscuMYT1oxZ9%2BZ9UtMREo%3D

 

id가 암호화 되어있다.

admin의 encryptid를 구해서 전달해주면 될 것 같다.

 

이때 불러오는 파일을 개발자 도구를 통해서 살펴보자.

practice04.js 파일에서 memberid를 암호화하여 encryptid를 생성하는 코드를 찾을 수 있었다.

근데 난독화 되어 있다. 이거 해독하면 다음과 같다.(GPT 이용)

난독화된 코드

더보기
useworld = ~[];
useworld = {
    ___: ++useworld,
    $$$$: (![] + "")[useworld],
    __$: ++useworld,
    $_$_: (![] + "")[useworld],
    _$_: ++useworld,
    $_$$: ({} + "")[useworld],
    $$_$: (useworld[useworld] + "")[useworld],
    _$$: ++useworld,
    $$$_: (!"" + "")[useworld],
    $__: ++useworld,
    $_$: ++useworld,
    $$__: ({} + "")[useworld],
    $$_: ++useworld,
    $$$: ++useworld,
    $___: ++useworld,
    $__$: ++useworld
};
useworld.$_ = (useworld.$_ = useworld + "")[useworld.$_$] + (useworld._$ = useworld.$_[useworld.__$]) + (useworld.$$ = (useworld.$ + "")[useworld.__$]) + ((!useworld) + "")[useworld._$$] + (useworld.__ = useworld.$_[useworld.$$_]) + (useworld.$ = (!"" + "")[useworld.__$]) + (useworld._ = (!"" + "")[useworld._$_]) + useworld.$_[useworld.$_$] + useworld.__ + useworld._$ + useworld.$;
useworld.$$ = useworld.$ + (!"" + "")[useworld._$$] + useworld.__ + useworld._ + useworld.$ + useworld.$$;
useworld.$ = (useworld.___)[useworld.$_][useworld.$_];
useworld.$(useworld.$(useworld.$$ + "\"" + useworld.$$$$ + useworld._ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + useworld.$$__ + useworld.__ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + useworld._$ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + "\\" + useworld.$__ + useworld.___ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + useworld.$$__ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$$$ + useworld.__$ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld.__ + "\\" + useworld.__$ + useworld.__$ + useworld.$_$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + useworld.$_$$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + useworld.$$_$ + "(\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + useworld.$_$$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + useworld.$$_$ + ")\\" + useworld.$__ + useworld.___ + "{\\" + useworld.__$ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.__$ + useworld.$$_ + useworld.$$_ + useworld.$_$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld.$_$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$$ + "\\" + useworld.__$ + useworld.$$_ + useworld._$$ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + "\\" + useworld.__$ + useworld.$_$ + useworld.___ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + useworld.$_$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$$ + useworld.$$$_ + "\\" + useworld.$__ + useworld.___ + "=\\" + useworld.$__ + useworld.___ + "\\\"\\" + useworld.__$ + useworld.$$_ + useworld._$$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$$$ + useworld.__$ + useworld._$ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + "\\" + useworld.__$ + useworld.$__ + useworld.$$$ + "\\" + useworld.__$ + useworld.$_$ + useworld._$$ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + "\\\";\\" + useworld.__$ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.__$ + useworld.$$_ + useworld.$$_ + useworld.$_$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + useworld.$$__ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$$$ + useworld.__$ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld.__ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + useworld.$$_$ + "\\" + useworld.$__ + useworld.___ + "=\\" + useworld.$__ + useworld.___ + "\\" + useworld.__$ + useworld.___ + useworld._$$ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$$$ + useworld.__$ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld.__ + useworld._$ + "\\" + useworld.__$ + useworld.__$ + useworld._$_ + "\\" + useworld.__$ + useworld._$_ + useworld._$$ + ".\\" + useworld.__$ + useworld.___ + useworld.__$ + "\\" + useworld.__$ + useworld.___ + useworld.$_$ + "\\" + useworld.__$ + useworld._$_ + useworld._$$ + "." + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + useworld.$$__ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$$$ + useworld.__$ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld.__ + "(\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + useworld.$_$$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + useworld.$$_$ + ",\\" + useworld.$__ + useworld.___ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld.$_$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$$ + "\\" + useworld.__$ + useworld.$$_ + useworld._$$ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + "\\" + useworld.__$ + useworld.$_$ + useworld.___ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + useworld.$_$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$$ + useworld.$$$_ + ");\\" + useworld.__$ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + useworld.$$$_ + useworld.__ + useworld._ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + "\\" + useworld.$__ + useworld.___ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + useworld.$$__ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$$$ + useworld.__$ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld.__ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + useworld.$$_$ + "." + useworld.__ + useworld._$ + "\\" + useworld.__$ + useworld._$_ + useworld._$$ + useworld.__ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + "\\" + useworld.__$ + useworld.$__ + useworld.$$$ + "();\\" + useworld.__$ + useworld._$_ + "}\\" + useworld.__$ + useworld._$_ + "\\" + useworld.__$ + useworld._$_ + "$(\\" + useworld.__$ + useworld.$$_ + useworld.$$$ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + useworld.$$_$ + useworld._$ + "\\" + useworld.__$ + useworld.$$_ + useworld.$$$ + ")." + useworld._$ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + "('" + (![] + "")[useworld._$_] + useworld._$ + useworld.$_$_ + useworld.$$_$ + "',\\" + useworld.$__ + useworld.___ + useworld.$$$$ + useworld._ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + useworld.$$__ + useworld.__ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + useworld._$ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + "\\" + useworld.$__ + useworld.___ + "()\\" + useworld.$__ + useworld.___ + "{\\" + useworld.__$ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.__$ + useworld.$$_ + useworld.$$_ + useworld.$_$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + useworld.$_$$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + useworld.$$_$ + "\\" + useworld.$__ + useworld.___ + "=\\" + useworld.$__ + useworld.___ + "$('#\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + useworld.$_$$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + useworld.$$_$ + "').\\" + useworld.__$ + useworld.$$_ + useworld.$$_ + useworld.$_$_ + (![] + "")[useworld._$_] + "();\\" + useworld.__$ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.__$ + useworld.$$_ + useworld.$$_ + useworld.$_$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + useworld.$$__ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$$$ + useworld.__$ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld.__ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + useworld.$$_$ + "\\" + useworld.$__ + useworld.___ + "=\\" + useworld.$__ + useworld.___ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + useworld.$$__ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$$$ + useworld.__$ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld.__ + "\\" + useworld.__$ + useworld.__$ + useworld.$_$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + useworld.$_$$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + useworld.$$_$ + "(\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + useworld.$_$$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + useworld.$$_$ + ");\\" + useworld.__$ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.__$ + useworld.$$_ + useworld.$$_ + useworld.$_$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + useworld.$$$$ + useworld._$ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + "\\" + useworld.$__ + useworld.___ + "=\\" + useworld.$__ + useworld.___ + "$('" + useworld.$$$$ + useworld._$ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + "[\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + useworld.$_$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + useworld.$$$_ + "=\\\"\\" + useworld.__$ + useworld.$$_ + useworld.___ + "\\" + useworld.__$ + useworld.$$_ + useworld.$$$ + useworld.$$$$ + useworld._$ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + "\\\"]');\\" + useworld.__$ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.__$ + useworld.$$_ + useworld.$$_ + useworld.$_$_ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld._ + useworld.__ + "\\" + useworld.$__ + useworld.___ + "=\\" + useworld.$__ + useworld.___ + useworld.$$_$ + useworld._$ + useworld.$$__ + useworld._ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + useworld.__ + "." + useworld.$$__ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + useworld.$$$_ + useworld.$_$_ + useworld.__ + useworld.$$$_ + "\\" + useworld.__$ + useworld.___ + useworld.$_$ + (![] + "")[useworld._$_] + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + useworld.__ + "('\\" + useworld.__$ + useworld.$_$ + useworld.__$ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld._ + useworld.__ + "');\\" + useworld.__$ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld._ + useworld.__ + "." + useworld.__ + "\\" + useworld.__$ + useworld.$$$ + useworld.__$ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld.$$$_ + "\\" + useworld.$__ + useworld.___ + "=\\" + useworld.$__ + useworld.___ + "'\\" + useworld.__$ + useworld.$_$ + useworld.___ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + useworld.$$_$ + useworld.$$_$ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + "';\\" + useworld.__$ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld._ + useworld.__ + ".\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + useworld.$_$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + useworld.$$$_ + "\\" + useworld.$__ + useworld.___ + "=\\" + useworld.$__ + useworld.___ + "'" + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + useworld.$$__ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$$$ + useworld.__$ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld.__ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + useworld.$$_$ + "';\\" + useworld.__$ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld._ + useworld.__ + ".\\" + useworld.__$ + useworld.$$_ + useworld.$$_ + useworld.$_$_ + (![] + "")[useworld._$_] + useworld._ + useworld.$$$_ + "\\" + useworld.$__ + useworld.___ + "=\\" + useworld.$__ + useworld.___ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + useworld.$$__ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$$$ + useworld.__$ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld.__ + "\\" + useworld.__$ + useworld.$_$ + useworld.__$ + useworld.$$_$ + ";\\" + useworld.__$ + useworld._$_ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + "\\" + useworld.$__ + useworld.___ + useworld.$$$$ + useworld._$ + "\\" + useworld.__$ + useworld.$$_ + useworld._$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$_$ + "." + useworld.$_$_ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld.$$$_ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + useworld.$$_$ + "(\\" + useworld.__$ + useworld.$_$ + useworld.__$ + "\\" + useworld.__$ + useworld.$_$ + useworld.$$_ + "\\" + useworld.__$ + useworld.$$_ + useworld.___ + useworld._ + useworld.__ + ");\\" + useworld.__$ + useworld._$_ + "})" + "\"")())();
function encryptMemberid(memberid) {
    var passphrase = "seyongkim";
    var encryptid = CryptoJS.AES.encrypt(memberid, passphrase);
    return encryptid.toString();
}

$(window).on('load', function () {
    var memberid = $('#memberid').val();
    var encryptid = encryptMemberid(memberid);
    var form = $('form[name="pwform"]');

    var input = document.createElement('input');
    input.type = 'hidden';
    input.name = 'encryptid';
    input.value = encryptid;

    form.append(input);
});

 

 

var encryptid = CryptoJS.AES.encrypt(memberid, passphrase); 이니까(passphrase='seyongkim')

 

콘솔창에 이렇게 입력하자.

CryptoJS.AES.encrypt("admin", "seyongkim").toString()

그러면 admin의 암호화된 문자열이 나온다.

U2FsdGVkX18vMfK2UlkuJfKdRtNl7g0bW5THwYRs0rs=

 

이걸 등록버튼 눌렀을 때 날라가는 요청에encryptid 부분에 내 거 대신에 넣어주면 된다.

 

그럼 admin의 비밀번호가 1234로 초기화가 된다. 

 

정답: encrypted_memberid

 

두번째 방법: 실행 시점 고려하여 푸는 방법

js가 encryptid를 만들기 직전에 memberid 값을 admin으로 바꾸는 것이다.

 

encryptid는 practice04.js에서 생성된다는 것을 burp을 실행하면서 practice04.js 코드를 보고 알았다.

 

그럼 우리는 비밀번호 변경 창을 불러오기 전에 id를 admin으로 미리 바꿔놔야 할 것이다. 

비밀번호 변경 창으로 가는 버튼을 누를 때(or 비밀번호 변경 창에서 새로고침을 누르고) burp로 잡아서 수정해주면 된다.

 

비밀번호 변경 api: POST /practice/practice04/newpassword

 

비밀번호 변경 페이지 불러오는 요청

 

비밀번호 변경 페이지 응답

 

응답에서 value를 admin으로 수정

 

 

그 다음에 practice04.js가 실행되는데 여기서 admin의 encryptid가 생성되어 전달될 것이다.

 

 

실행한 결과> 비밀번호 변경 페이지가 잘 불러와졌는데 id가 admin이 된 상태에서 잘 불러와졌다.

admin이랑 encryptid가 잘 생성되어 들어가 있다.

 

 

내가 아까 설정한 비밀번호로 로그인이 가능하다!

5번

입력값 검증을 우회하여 비밀번호를 0으로 가입하세요.

 

그냥 0으로 가입하려고 하면 이런 메시지가 뜬다.

 

회원가입 페이지를 소스 코드를 본다. onsubmit으로 inputCheck()라는 함수를 실행시키고 있다. 이 함수를 보고 비밀번호 검증 로직을 우회하면 될 것이다. 

 

F12>Sources>page>top>우클릭>Search in all files 하면 모든 코드에서 검색이 된다.

practice05.js 라는 파일에 함수 정의가 있다.

inputCheck() 함수를 살펴보자.

function inputCheck() {
    var inputValue = $(".inputValue").val();
    var reg = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/;
    var hangulcheck = /[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/;
    if (false === reg.test(inputValue)) {
        inputInvalid(pwErrorarray[0]);
        return false
    } else if (/(\w)\1\1\1/.test(inputValue)) {
        inputInvalid(pwErrorarray[1]);
        return false;
    } else if (inputValue.search(/\s/) != -1) {
        inputInvalid(pwErrorarray[2]);
        return false;
    } else if (hangulcheck.test(inputValue)) {
        inputInvalid(pwErrorarray[3]);
        return false;
    }
    var encInput = encryptString(inputValue);
    $(".inputValue").val(encInput);
    return true;
}

 

어쨌든 return true가 나오면 된다.

그러면 practice05.js가 실행되는, 회원가입 버튼을 눌렀을 때  inputCheck=true;로 만들어주면 될 것이다.

 

inputCheck=true를 콘솔창에 입력하고 비밀번호를 0으로 넣고 전송을 했다.

0이 들어갔다.

그런데 회원가입에는 실패했다는 메시지가 뜬다.

inputCheck() 함수를 보면 입력값(pw)를 암호화하는 부분이 있다. check 검증을 다 통과하고 나서 암호화 하고 true를 리턴하는 것이다.

그런데 내가 먼저 true를 리턴해버리면 암호화 로직을 실행시키지 않게 된다.

 

일단 비밀번호를 조건에 맞게 설정하고 요청을 보내서 어떤식으로 작동하는지 보자.

내가 회원가입 버튼을 누르자마자 비밀번호가 갑자기 늘어났다. 암호화 된 결과이다.

 

암호화가 되어 전달이 되고 있다.

 

그래서 아까 내가 0을 넣고 inputcheck=true를 했을 때는 0이 그대로 전달되어서 실패한 것이다.

 

0을 암호화해서 전달

암호화하는 함수를 보자.

function encryptString(string) {
    var passphrase = "seyongkim0810";
    var encryptid = CryptoJS.AES.encrypt(string, passphrase);
    return encryptid.toString();
}

console 창에 CryptoJS.AES.encrypt('0','seyonkim0810').toString() 혹은 encryptString('0') 을 입력해서 0의 암호화 문자열을 획득 한 후, burp에서 이 문자열을 넘겨주면 될 것이다.

그대로 넘겨주면 된다! (전달할 때는 인코딩해서!)

 

728x90