Gae Ko's Blog

los:xavis 본문

웹해킹 /[los] Lord of SQL

los:xavis

Gae Ko 2017. 9. 3. 18:28


[코드분석]


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

↑DB와 연결을 위한 코드


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

↑preg함수를 통한 필터링


  $query "select id from prob_xavis where id='admin' 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>"

↑첫번째 쿼리 실행


  $_GET[pw] = addslashes($_GET[pw]);

↑addslashes함수 이용


  $query "select pw from prob_xavis where id='admin' and pw='{$_GET[pw]}'"
  
$result = @mysql_fetch_array(mysql_query($query)); 

↑두번째 쿼리 실행


  if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("xavis"); 

↑문제의 포인트  



[내 풀이]


코드를 보니 

- preg함수를 통해 필터링하는데 특히 regex와 like를 필터링

- 첫번째 쿼리가 실행되기만 하면 hello 어쩌고 라고 출력

- 두번째 쿼리실행과 문제의 포인트를 통해 blind injection임을 알 수 있음

  즉, id='admin'인 정확한 pw값을 구하여야 문제가 풀림


일반적인 blind injection문제 해결법처럼 pw의 길이를 구하고 정확한 pw값을 구하면 된다. 라고 생각했는데 

길이부터가 구하기가 만만치 않을 거 같은 느낌이 들었다. 왜냐면 0-20까지 다 해보았는데 나오지 않았기 때문이다...

이건 하나하나 구하는건 분명 아님을 예상한다.


like를 필터링하는 것을 보니 .... 혹시 문자패턴을 아용해 검색하는 like연산자를 이용하는 것처럼 푸는게 아닐까...? 


- hex화해서 length를 찍어본다





'웹해킹 > [los] Lord of SQL' 카테고리의 다른 글

los:nightmare  (0) 2017.09.03
los:succubus  (0) 2017.09.03
los:zombie_assassin  (0) 2017.09.03
los : assassin  (0) 2017.08.26
los : giant  (0) 2017.08.17