본문 바로가기

보안공부/Webhacking.kr 풀이

webhacking.kr 25번 문제 풀이 - NULL TO FLAG

WEBHACKING.KR 25번 문제 풀이

NULL TO FLAG ]


오늘은 webhacking.kr의 25번 문제를 풀어보자.


이 페이지의 파라미터값을 확인해보니 GET 메소드를 통해 file값을 전달하고 있었다.

첫값이 ?file=hello 인것으로 보아 이 사이트의 코드를 다음과 같이 예상했다.

<?php
    if(!$_GET[file]){
        echo '<meta http-equiv=refresh content=0;url=?file=hello>';
    }
    switch($_GET[file]){
        case 'hello':
            hello.txt 출력
            break;
        case 'index':
            index.php 출력
            break;
        case 'password':
            password.php 출력
            break;
        default:
            hello.txt 출력
            break;
    }
?>

file값이 없으면 메타태그를 이용해 기본값이 hello인 file 파라미터를 생성해주고 확장자를 제거한 이름을 입력하면 그 파일을 열어주는것으로 예상했다.


하지만 예상대로 진행되지는 않았다.

file 파라미터를 통해 password 를 넘겨줬는데 결과값은 hello.txt 값이었다.


이 과정을 통해 새로운 사실을 찾게 되었다.

넘겨진 file 파라미터는 어떠한 코드에 의해 변조된다는 사실을 말이다.

<?php
if(!$_GET[file]){
        echo '<meta http-equiv=refresh content=0;url=?file=hello>';
    }
    // 여기서 정체모를 코드에 의해 file값이 변조됨.
    switch($_GET[file]){
        case 'hello':
            hello.txt 출력
            break;
        case 'index.php':
            index.php 출력
            break;
        case 'password.php':
            password.php 출력
            break;
        default:
            hello.txt 출력
            break;
    }
?>

따라서 이제 우리는 이 값의 뒤에 null값을 추가해주자.


null을 인코딩하면 \0이므로, \이 다시 인코딩되어 0이 되는것을 방지하기 위해 %00을 넣고 실행하면 파라미터는 다음과 같이 생성된다.

?file=password.php%00


쨘!




WEBHACKING.KR 25번 문제 클리어!