티스토리 뷰


※ 던전을 클리어하는 과정에서 얻은 힌트를 공유하려고 합니다.

※ 정확한 답을 알려드리지 않습니다. 스스로 해결하시길 권장합니다.



http://los.eagle-jump.org/(클릭)







  문제 분석





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

  -- DB연결을 위한 코드 ↑--


  if(preg_match('/prob|_|\.|\(\)/i'$_GET[pw])) exit("No Hack ~_~"); 
  if(
preg_match('/ /i'$_GET[pw])) exit("No whitespace ~_~"); 

  -- preg_match를 통한 필터링 ↑--


  $query "select id from prob_wolfman 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("wolfman"); 
  
highlight_file(__FILE__); 

  -- 해결 포인트 ↑--
?> 



  해결 과정



- 필터링 

    prob, _ , . , ( , ) → 이는 테이블에 직접 접근을 막고, 추가적으로 information_schema에 접근 방지

    /  / → 공백을 필터링하고 있다. 공백을 필터링 함으로서 SQL injection 쿼리를 완성하지 못하게 하고 있다.


-  실행 쿼리 

   SELECT id FROM prob_wolfman WHERE id='guest' and pw='{$_GET[pw]}';

   ㆍ조건 id는 'guest'로 픽스 되어있고, pw를 GET메서드로 넘겨받고 있다.


-  해결 포인트

   ㆍ if($result['id'] == 'admin'solve("wolfman");

   ㆍ해결 포인트는 goblin과 유사하다. 현재는 id가 guest로 고정 되어있지만, id값에 admin을 가져오면 해결 된다.


공백이 필터링 되고 있기 때문에 SQL injectrion query를 넣을 수가 없다고 생각할 수 있지만, 공백을 우회 할 수 있는

우회 문제가 여러가지 존재한다. SQL Injetcion의 정수는 필터링 되고 있는 많은 SQL함수를 우회 할 수 있는 다른 함수를 

얼마나 알고 있는 지가 중요하다.


 ↑ 일반적으로 URL상에서 공백은 %20으로 변환되어 사용된다. 

   # 현재 공백이 필터링 되고있기 때문에 %20은 사용할 수 없다.


현재 공백이 필터링 되고 있기 때문에 공백을 우회할 수 있는 문자들을 알아야 한다.


- 공백 필터링을 우회 할 수 있는 문자

  ㆍ/**/ ( 주석 ) : 주석을 통해 공백을 대체할 수 있다. ex). pw='/**/or/**/1=1/**/%23

  ㆍ+ ( %2B )    : 문자 + 를 통해  공백을 대체할 수 있다. ex) pw='+or+1=1+%23

  ㆍ( )              : 괄호를 통해 공백을 대체할 수 있다. ex) pw='(or)1=(1)%23

  ㆍ%09, %0B, %0C, %0D, %0A 등등


 공백 대신 위와같은 특수 문자를 이용해 공백을 우회할 수 있다.


 ↑ 공백을 우회해서 SQL Injectrion query를 완성할 수 있다. 

   # 인젝션 쿼리는 결과가 항상 참이게 만들고, 모든 결과가 조회 되었을때, id값에 admin을 넣어준다.




  wolfman 중요 포인트



  ㆍInjection에서 공백을 우회 할 수 있는 문자

 



'War Game > [ los ] Lord of the SQL' 카테고리의 다른 글

los : orge  (0) 2017.06.22
los : darkelf  (0) 2017.06.22
los : orc  (0) 2017.06.21
los : goblin  (1) 2017.06.19
los : cobolt  (1) 2017.06.12