본문 바로가기

wargame/LOS

[LOS]2번 COBOLT

2번 COBOLT



<?php 
  include "./config.php"; 
  login_chk();
  dbconnect();

  if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  // id, pw 필터링

  $query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')";
  // prob_coblot 테이블에서 id가 $_GET[id]이고 pw가 $_GET[pw]를 복호화한 값인 record의 id값을 select하는 쿼리 작성

  echo "<hr>query : <strong>{$query}</strong><hr><br>"; // 쿼리 출력
  $result = @mysql_fetch_array(mysql_query($query)); // 쿼리 실행하여 배열 형태로 $result에 저장

  if($result['id'] == 'admin') solve("cobolt"); // $result['id']가 admin이면 문제 해결!

  elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>"; 
  // $result['id']가 admin이 아니지만 존재할 때 $result['id']를 포함한 특정 문구 출력

  highlight_file(__FILE__); 
?>


1번 문제와 유사하다. url에 id가 admin이고 그 외 조건을 만족하게 값을 입력했다.

띄어쓰기가 되지 않아서 실패했다.

띄어쓰기를 하고 다시 시도했다. 안 됐다.

생각해보니 조건이 id가 admin이거나 TRUE이므로 즉 조건은 TRUE이다. 이 말은 모든 id가 $result에 저장될 수 있으므로 문제 해결이 되지 않을 수 있다.

id를 제외한 나머지를 주석으로 처리하고 id가 admin일 때를 조건으로 작성하였더니 성공하였다.
(이 때 주석인 #를 입력할 때 url encoding된 %23으로 입력해야 한다)


'wargame > LOS' 카테고리의 다른 글

[LOS]6번 DARKELF  (0) 2019.07.21
[LOS]5번 WOLFMAN  (0) 2019.07.12
[LOS]4번 ORC  (0) 2019.07.11
[LOS]3번 GOBLIN  (0) 2019.07.09
[LOS]1번 GREMLIN  (0) 2019.07.09