uju's Tech

8.Webhacking.kr 5번 본문

Security/Webhacking.kr

8.Webhacking.kr 5번

ujusy 2020. 6. 13. 03:17

<본 포스팅은 공부목적으로 작성되었습니다. 혹시 틀린 부분이 있거나 문제가 되는 부분이 있다면 답글 달아주세요!>

5번은 300점 짜리 문제이다.

5번에 들어가보면 처음에

이렇게 화면이 나온다.

login으로 들어가서 기본 id로 많이 사용되는 admin을 입력해보았다.

이렇게 wrong password가 뜨는 것을 보니 id는 맞은거 같다.

 

그럼 password를 알아야하는데 처음 페이지로 돌아와서 join을 누르니 access denied가 뜬다.

 

첫 페이지에서 개발자 환경 도구를 살펴보자.

 

소스를 살펴보니 이미지 및 파일의 경로가 적혀있는 부분이 있다.

 

이부분을 보고 5번 문제가 디렉토리 리스팅 문제라는 것을 알 수 있다.

 

 ※디렉토리 리스팅이란 ?? 웹 서버를 디렉토리로 접속할때 해당 디렉토리내의 파일과 디렉토리를 리스트로 보여준다. 파일을 열람이 가능하다면 악의적인 목적을 가지고 공격이 이루어질 수 있다. 

 

url부분에서 login.php파일명을 제외하고 입력해 보았다.

 

 

위의 그림과 같이 파일과 디렉토리가 나온다.

join.php에 들어가보면 검정 화면만 나온다.

들어가서 소스를 보면

 

이렇게 난독화 되어 있다.

 

필자는 콘솔창을 이용해서 해석하였다. 해석할 부분을 복사해서 콘솔창에 입력해 주었다.

 

이렇게 해석한 것을 정리해주면

 

 

이러한 소스코드를 얻어낼 수 있다.

 

소스를 간략하게 해석해보면 cookie에 oldzombie가 없으면 bye

url에 mode=1이 없으면 access denied 경고창 발생 후 이전 페이지로 back

id 및 pw 입력 할 수 있는 join창으로 들어가려면 조건을 만족해야 한다.

 

그러면 먼저 cookie에 oldzombie를 추가해주자

 

그러고 기존 url/mem/join.php?mode=1 을 url창에 입력해주어 access denied하지 않도록 해주자.

 

 

 

그러면 id와 pw 입력창이 뜰것이다.

근데 위에서 id는 admin으로 알게되어 admin으로 치고 비번 admin을 치고 join했더니 이미 있는 id라고 뜬다.

 

개발자 도구에 들어가서 소스를 살펴보자.

 

 

id의 maxlength가 5로 설정되어있다, .

 

maxlength를 10로 바꿔주자.

그리고 id에 admin스페이스바 pw에는 1234를 입력해주었다.

가입이 되었다.

로그인 창으로 들어가서 admin pw는 1234를 입력해주었다.

 

★여기서 admin을 치고 스페이스바를 이용하는 이유는 mysql에서는 slelect 'admin'='admin '이 참 값으로 정의됩니다.
 우아한 형제들 기술 블로그에 따르면 PostgreSQL과 SQLite를 제외하고는 위의 값을 모두 결과를 1(참)으로 산출합니다.
결과적으로 MySQL은 CHAR와 VARCHAR 모두 PAD방식으로 비교합니다. PostgreSQL은 CHAR을 저장할 때,PAD를 추가하는 방식이 아니라 제거하는 방식으로 저장하여 이러한 차이가 발생합니다.

끝!

'Security > Webhacking.kr' 카테고리의 다른 글

7. Webhacking.kr 41번  (0) 2020.06.13
6. Webhacking.kr 58번  (0) 2020.06.13
5. Webhacking.kr 32번  (0) 2020.06.13
4. webhacking.kr 24번  (0) 2020.06.13
3. webhacking.kr 18번  (0) 2020.06.13
Comments