-
[HTB] LoveTok WriteupWargame/Hack The Box 2023. 4. 12. 23:30
주어진 URL에 접근하면 아래와 같은 페이지가 나타난다.
별다른 기능은 없고, 하단의 Nah,~ 를 누르면 /?format=r 로 요청이 가고, 시간 정보가 바뀐다.
주어진 소스를 분석해보자.
//TimeController.php <?php class TimeController { public function index($router) { $format = isset($_GET['format']) ? $_GET['format'] : 'r'; $time = new TimeModel($format); return $router->view('index', ['time' => $time->getTime()]); } }
페이지상에서 보여지는 기능이 /?format=r 밖에 없기때문에 우선 관련된 부분을 찾았다. format 파라미터의 내용을 읽어 TimeModel의 인자로 사용한다는 내용이었다.
TimeModel이 어떻게 동작하나 확인해보았다.
//TimeModel.php <?php class TimeModel { public function __construct($format) { $this->format = addslashes($format);// ............ (1) [ $d, $h, $m, $s ] = [ rand(1, 6), rand(1, 23), rand(1, 59), rand(1, 69) ]; $this->prediction = "+${d} day +${h} hour +${m} minute +${s} second"; } public function getTime() { eval('$time = date("' . $this->format . '", strtotime("' . $this->prediction . '"));'); // ................................ (2) return isset($time) ? $time : 'Something went terribly wrong'; } }
format 파라미터의 값이 addslashs()처리가 된 후에 eval문에 사용된다. 즉, addslashes 를 통해 어느정도 필터링이 되어 있지만, 이를 우회 할 수 있다면 커맨드인젝션이 가능 할 것이다.
참고로 addslashes는 '(따옴표) , "(쌍따옴표), \(백슬래시), \x00(NULL) 앞에 백슬래시를 추가해주는 메소드이다.
우회 기법 관련해서 조사를 해보다가 아래 내용에서 이번 문제와 유사한 내용을 발견했다.
https://swordandcircuitboard.com/php-addslashes-command-injection-bypass/
PHP addslashes() Command Injection Bypass
How to bypass addslashes when it's incorrectly used as a sanitizer.
swordandcircuitboard.com
${system($_GET[1])}&1=명령어
와 같이 ${system()} 를 통해 필터링 되지 않는 명령 실행 구문을 만들고,
$_GET[1] 과 같이 따로 파라미터를 통해 명령어를 입력받는다면 addslashes에서 필터링하는 특수 문자 없이 명령어를 전달한다는 의미이다.
실제로 작동하여 최상위를 조회해보니 flagWKlXr과 같이 flag 뒤에 임의의 문자열이 붙은 파일이 존재함을 알 수 있었고,
이를 읽어 플래그를 획득 할 수 있었다.(롸업 작성하면서 보니 "); // 등 처리는 불필요해보인다.)
FLAG = HTB{wh3n_l0v3_g3ts_eval3d_sh3lls_st4rt_p0pp1ng}
반응형'Wargame > Hack The Box' 카테고리의 다른 글
[HTB] Toxic Writeup (0) 2023.04.21 [HTB] Inject Writeup (1) 2023.04.19 [HTB] Weather App Writeup (0) 2023.04.07 [HTB] Popcorn Writeup (0) 2023.03.31 [HTB] Phonebook Writeup (0) 2023.03.28