IT·정보보안/워게임

[webhacking.kr] Challenge 2번(500) 문제풀이

핵피티 2016. 8. 31. 11:09
반응형


[webhacking.kr] Challenge 2번(500) 문제풀이

 

 

 

 

첫 화면을 보니 홍길동(?) 으로 보이는 사람이 명상을 하고 있네요

이 페이지에서 힌트를 얻어 보고자 소스를 한번 열어 봤습니다..

 

 

소스를 열어보니 웬 주석처리 된 시간이 있네요

일종의 힌트 같습니다

하지만 일자는 같지만 현재시간하고는 다르다는 것을 알 수 있습니다.

 

그리고 소스를 자세히 들여다보니

어떤 좌표에 admin/ 이라는 링크가 걸려있군요..

저부분이 심상치 않네요

 

페이지안에 특정한 좌표를 클릭하면

admin 페이지로 넘어간다는 소리 같습니다.

 

 

 

 

어디있나 했더니 바로 이 '' 머리 부분을 클릭했더니

admin 페이지로 들어갈 수 있었습니다

역시 범상치 않아 보이는군요..

 

용머리 부분을 클릭해서 admin 페이지에 들어온 모습입니다

 

무언가 로그인을 해야 될 것 같습니다만

SQL injection 을 시도해보았지만 쉽지 않네요

 

흠.. 힌트를 다른데서 구해봐야 겠군요

 

다시 홍길동 아저씨가 명상하고 있는 페이지로 돌아와

다른 부분에서 힌트를 얻어 봅시다..

 

ABOUT / MEMBERS / RESEARCH 등의

다른 페이지에 들어가 보았지만

힌트를 얻을 수 없었던 와중에 BOARD를 눌러보니!!

 

 

 

 

요런 모습을 볼 수 있었습니다

oldzombie 님께서 반갑게 인사를 해주시는군요

 

저기에 무언가가 있어 보입니다

일단 한번 들어가봅시다..

 

 

 

들어가보니 비밀글이라며

수상한 이 있고 쿼리를 보내라는군요... 흠

 

이 부분에서 쿼리를 날리면 뭔가 얻을 수 있을것 같습니다만

 

어떻게 쿼리를 보내지.. 하던 와중에 쿠키값을 보니

 

 

(Cooxie 툴을 이용함 )

 

 

세션ID를 나타내는 PHPSESSID 와

time이라는 수상한 값이 들어가 있네요..

 

이 time이라는 것이 방금전 소스에서 보았던 시간과 연관이 있어 보입니다..

time값을 이용해 injection을 시도해 보았습니다

 

 

 

그랬더니 방금전 메인화면에 소스부분에 주석처리된 시간부분이 수정되었습니다

DB와 연동이 되어있는 듯 보입니다

 

이부분을 통해 전 Blind SQL Injection을 시도해봤습니다

 

10.png

 

방금전과는 다르게 참(1=1)인 값을 넣어봤더니

 

 

주석처리 된 시간이 다시 수정되어있네요..

 

(1=1)일 때는 시간 뒤에 부분이 1로 나타나고

거짓(1=0)일 때는 시간 뒤에 부분이 0으로 나타나고 있는 것을 확인할 수 있으며

 

이 취약점을 통해 Blind SQL Injection을 통한 공격을 수행할 수 있었습니다

 

하지만

테이블 명을 알 수 없어 여러번의 뒤적뒤적 거리며 삽질을 하던 끝에...

 

 

테이블명을 확인 할 수 있었습니다

 

 

bbs 페이지의 테이블명 : FreeB0aRd

 

admin 페이지의 테이블명 : admin

 

 

테이블명도 알아 냈으니 password를 알아내 보겠습니다..

 

time 쿠키값 뒤에 and(select length(password) from FreeB0aRd)=1 을 추가한 뒤

 

 

소스를 확인해보면 ..

 

 

 인것을 확인 할 수 있는데

그러므로써 password는 9글자라는 사실을 알 수 있었습니다

 

이와 같은 방법으로 admin 역시 password의 길이를 알아 낼 수 있었으며

 

FreeB0aRd : 9자리

admin : 10자리

 

password의 길이를 알아 낼 수 있었습니다

 

이제 password를 substring과 ascii를 통해 글자를 한글자씩 비교하며 password를 알아내보겠습니다

하지만 이 방법은 너무 노가다 방식이라 (ascii 코드만해도 한두개가 아니므로 비추천)

 

저는 다른 블로그를 참고하여

 파이썬(Python)을 이용해 코드를 짜서

패스워드를 알아낼 수 있었습니다

 

(참고사이트 : http://rootnix.in/80)

코드공유 : [webhacking]ch2_PythonCode.zip

 

 

 

이런식으로 password를 알아 낼 수 있었습니다

패스워드는 모자이크 처리..

 

admin 역시 똑같은 방법으로 해봅시다

 

 

이제 패스워드를 두개 모두 알아냈으니 클리어 해봅시다..

 

게시판의 게시글에 얻어낸 비밀번호를 입력해보니..

 

 

 

 

admin manual 이 나오는데 이것은 그냥 텍스트가 아니고 링크가 걸려있는 파일입니다

이것을 다운 받습니다..

 

다운받아서 압축을 풀어보려 하니..

 

 

이건 뭐지..? 하는 순간

admin password가 떠오릅니다

 

admin page에 가서 패스워드를 입력하면

 

manual 패스워드를 알 수 있고

manual 압축을 풀게 되면..

 

 

 

 

password를 알아 낼 수 있었습니다..

 

blind sql injection을 할 수 있느냐 없느냐가

이 문제의 관건이었던것 같습니다

500점 짜리라 그런지 난이도가 조금 있군요msn030.gif

 

어쨋든 2번문제 기분좋게 Clear!!

반응형