본문으로 바로가기

Webhacking.kr 2번

category Wargame/Webhacking.kr 2014. 4. 12. 20:33
반응형

소스를 확인해본다.

    <area shape="rect" coords="15,8,517,54" href="index.php" target="" alt="" />
    <area shape="rect" coords="339,63,403,93" href="about.php" target="" alt="" />
    <area shape="rect" coords="413,63,490,92" href="member.php" target="" alt="" />
    <area shape="rect" coords="500,63,582,92" href="research.php" target="" alt="" />
    <area shape="rect" coords="592,63,651,92" href="bbs/index.php" target="" alt="" />
    <area shape="rect" coords="662,64,745,93" href="fun.php" target="" alt="" />
    <area shape="rect" coords="756,63,825,93" href="contact.php" target="" alt="" />
    <area shape="rect" coords="851,7,890,65" href="admin/" target="" alt="" />

admin 이란 페이지를 찾았다.

쿠키를 확인해보면 time 이라는 값이 있다.

이 부분이 Injection 포인트가 되며 소스값에 주석으로 표시되는 시간값이 참/거짓을 알 수 있는 부분이 된다.

time=1397298833 뒤에 and 1=1 과 1=2 를 넣어서 참/거짓일 때의 서버반응을 확인해보았다.

1. 참 일때의 반응

<!--2070-01-01 09:00:01-->

2. 거짓 일때의 반응

<!--2070-01-01 09:00:00-->

 

참과 거짓일때의 반응을 확인했다. 이제 테이블명과 컬럼명을 알아내야 하는데 이부분에는 게싱이 필요하다.

이 부분에서 상당히 헤매다가 admin 페이지 라면 테이블 명도 admin 이라고 생각을 하였고 패스워드 컬럼명은 당연히

password 라고 생각을 하고 Injecton 을 시작하였다.

time=1397298833 and (select ascii(substring(password,1,1)) from admin)>

(이부분에서 select 앞에 왜 괄호가 들어가는지 궁금하여 리셋이에게 물어봤더니 앞부분과 비교를 하려면 괄호로

묶어줘야 한다고 한다.)

password : 0XXXXXXXXX


해당 암호를 통해 admin 페이지에 로그인을 시도하였다.



메뉴얼 패스워드라고 하는걸 보니 무언가 더 남아있는 것 같다.

사이트를 좀더 돌아다니다보니 게시판에서 비밀글을 발견하였다.

해당 게시판 상단에 FreeB0aRd 라고 써있는것으로 보아 테이블명은 FreeB0aRd 라고 추측하고 또다시

인젝션을 시도하였다.

time=1397298833 and (select ascii(substring(password,1,1)) from FreeB0aRd>

password : 75XXXXXXX


해당 암호를 통해 게시글을 조회하니 zip 파일이 하나 있었고 위에서 알려준 메뉴얼 패스워드를 통하여 압축을

해제하니 암호를 얻을 수 있었다.

반응형

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

Webhacking.kr 7번  (0) 2014.04.13
Webhacking.kr 5번  (0) 2014.04.13
Webhacking.kr 4번  (0) 2014.04.13
Webhacking.kr 3번  (0) 2014.04.12
Webhacking.kr 2번  (4) 2014.04.12
Webhacking.kr 1번  (0) 2014.04.12

댓글을 달아 주세요

  1. rubiya 2014.04.22 13:58

    비교 목적이 아니라 서브쿼리를 사용하기 때문인 것 같네요.

    select 쿼리 안에서 또 select 구문을 사용하기 위해서는 () 로 묶어서 서브쿼리로 만들어줘야한다고 알고있습니다.

    • Hide­ 2014.04.22 22:44 신고

      아직도 살짝 헷갈렸는데 명확한 지적감사합니다!
      블로그에 포스팅하시는 글 잘보고있습니다 루비야님 :)

  2. 손님 2014.07.18 19:31

    안녕하세요~ 혹시,
    Blind SQL Injection을 할 때, 프로그램을 이용해서
    쉽게 접근을 한다던가.. 하는 방법은 없을까요? ㅎ..
    일일이 시도해 봤는데 너무 오래걸리네요 ㅎ.. 감사합니다.