SQL injection/webhacking

Webhacking 5번

ys.k 2022. 3. 9. 05:49

포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.

5번 문제이다.

로그인과 회원가입 버튼이 보인다.

웹 소스코드를 보자.

각 버튼에 관한 부분이다.

로그인 버튼을 누르면 move(page), join을 누르면 Acces_denied를 출력한다.

각 버튼을 눌러보자.

1. Login

로그인 버튼 결과

2. Join

회원가입 버튼 결과

로그인 창에는 정상적인 접근이 가능하지만, 회원가입은 접근이 거부당했다.

하지만 위 소스코드 창에서 힌트를 찾을 수 있다.

바로 이 부분인데 login 버튼을 눌렀을 때 이동할 링크를 알 수 있다.

우리는 이 부분에서 추측을 해야 한다.

링크의 형식이 mem/login.php이다.

그렇다면 join버튼의 링크도 비슷한 형식일 것이다.

한번 시도해보자

쿼리 : /mem/join.php

새로운 메시지가 나타났다.

확인버튼을 누르면 아무것도 없는 검은 화면이 나타난다.

소스코드를 보자.

검은 화면만 띄우는 데에는 필요 이상의 코드들이 있다.

이런 코드는 난독화된 코드이다.

난독화란 프로그래밍 언어로 작성된 코드에 대해 읽기 어렵게 만드는 작업이다.

난독화된 코드는 인터넷에서 난독화 해제 사이트를 사용하여 보기 편하게 만들 수 있다.

필자는 해당 사이트를 사용했다.

https://www.strictly-software.com/unpacker#unpacker

 

Unpack Javascript - Strictly Software

// Create a get elements by class name function document.getElementsByClassName = function(clsName){ var retVal = new Array(); var elements = document.getElementsByTagName("*"); for(var i = 0;i < elements.length;i++){ if(elements[i].className.indexOf(" ")

www.strictly-software.com

난독화가 해제된 모습이다.

메모장에 옮겨서 더 편하게 보자.

위에는 알파벳과 숫자 문자에 대한 정의, 밑부분은 기능을 하는 코드들이다.

일단 모두 치환해보자.

수작업으로 난독화된 부분을 모두 치환했다.

맨 위 두 개는 무엇을 의미하는지 몰라 일단 그냥 두었다.

if구문을 보면 document.cookie 부분에 oldzombie라는 값이 없으면 bye를 출력한다.

이건 우리가 아까 본 그 메시지다.

또한 document.URL에 mode가 1이 없으면 access_denied를 출력한다.

조건을 맞춰보자.

cookie=oldzombie

쿼리: ?mode=1

드디어 회원가입 페이지에 접근할 수 있게 되었다.

회원가입을 진행해보자.

id와 pw를 ysk로 설정했다.

이제 로그인을 하자.

로그인이 되었지만 admin으로 로그인해야 된다고 한다..

admin으로 계정을 만들고 제출 버튼을 눌렀다.

id가 이미 존재한다.

음..? 인증 우회 문제인가 생각이 들었다.

하지만 post형식으로 전달되기 때문에 느낌이 아닌 거 같았다..

하지만 burp suite로 admin의 회원가입 정보를 넘기면 될 것 같다는 생각도 들었다.

한번 해보자.

burp suite 사용법까지 포스팅 하진 않겠다.

id에 admin%20%20%20%20%20%00, pw에는 123을 burpsuite로 전달해주겠다.

정상적으로 전달된 듯하다.

이제 로그인을 해주자.

회원가입에 입력한 그대로 전달한다.

5번 문제가 풀렸다.

문제 해결!

시행착오

1. burp suite로 값을 전달할 때 공백은 url인코딩 후 전달해야 정상적으로 전달된다.

2. 웹페이지의 링크를 추측해 낼 수 있어야 한다.

3. php의 indexOf는 값을 포함하면 참, 아니면 거짓을 반환한다.