Gae Ko's Blog

los : darkelf 본문

웹해킹 /[los] Lord of SQL

los : darkelf

Gae Ko 2017. 8. 12. 06:12

[코드분석]


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

↑DB분석을 위한 코드 


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

↑preg_match를 통한 필터링.  or 과 and 가 포함된 입력값은 필터링


  $query "select id from prob_darkelf 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("darkelf"); 

↑문제의 포인트 



[내 풀이]


코드를 통해 id='admin'일 때 문제가 해결된다고 한다.

앞의 문제와 비슷한 유형이지만 필터링하는 문자열이 다르다.


앞에서는 공백을 필터링해서 공백대신 가능한 문자열로 대체해주었다.

그렇다면 이번 문제는 or 과 and 를 필터링하는 경우이므로 or 과 and를 대체해줄 문자열로 대신해주면 된다.


구글링해본 결과,

 or 은 || 으로 and 는 && 로 대체하여 우회가능하다.



이상하게도 fail 하였다. ㅠㅠ

 


고민하다가 혹시나 하는 생각에 | 와 & 의 url 에서의 문자로 찾아보았다.

( url 인코딩 → | 은 %7c 그리고 & 은 %26 )


SUCCESS !!!



[p.s]

|| 과 && 를 인코딩한 문자열로 하지 않은 경우에 쿼리가 왜 중간이 잘려나갔는지 모르겠다.  ㅠㅠ 

이거 역시 내일 민지언니에게 물어봐야징 ㅎ.ㅎ


물어본 결과!!

&랑 #은 문자열 그대로 넣으면 인식은 못하더라고 한다. 아직 언니두 이유는 모르신다구 한다. 

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

los : troll  (0) 2017.08.16
los : orge  (0) 2017.08.12
los : wolfman  (0) 2017.08.12
los : orc  (0) 2017.08.12
los : goblin  (0) 2017.08.10