[LOS] 2. Cobolt

고둑·2021년 7월 11일
0

LoS

목록 보기
2/21
post-thumbnail

힌트

  • get 방식으로 전송 가능한 파라미터는 2가지 있다.
  • 사서 고생을 하는 건 나중에도 충분하다.

풀이

코드 해석

<?php
  include "./config.php"; 
  login_chk();
  $db = dbconnect();
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  $query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')"; 
  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if($result['id'] == 'admin') solve("cobolt");
  elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>"; 
  highlight_file(__FILE__); 
?>

저번 Gremlin과 비슷한 소스 코드이다.
가장 큰 차이점은 pw값이 md5()함수를 32자리의 16진수 값을 반환하게 된다.

md5()로 인해 pw로 뚫으려면 길어지므로 그냥 문제 취지로 추정되는 id를 이용해보겠다.

문제 풀이

id에 인젝션

소스 코드를 보면 id=='admin일 때 문제가 해결된다. 따라서 id값에 admin 값을 넣어주고 나머지 뒤에 존재하는 쿼리는 주석으로 씹어주면 해결이 된다.

https://los.rubiya.kr/chall/cobolt_b876ab5595253427d3bc34f1cd8f30db.php?id=admin%27%23

profile
문워킹은 하지말자

0개의 댓글