Gae Ko's Blog

los:succubus 본문

웹해킹 /[los] Lord of SQL

los:succubus

Gae Ko 2017. 9. 3. 05:38



[코드분석]


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

↑DB와 연결



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

↑preg함수를 이용한 필터링



  $query "select id from prob_succubus where id='{$_GET[id]}' and pw='{$_GET[pw]}'"
  echo 
"<hr>query : <strong>{$query}</strong><hr><br>"

↑쿼리 실행



  $result = @mysql_fetch_array(mysql_query($query)); 
  if(
$result['id']) solve("succubus"); 

↑문제의 포인트



[내풀이]


코드를 보니 preg_match함수를 이용해 필터링을 하구 있는데 이전 문제와 다른 점은 이전 문제에서는 ereg함수를 이용해 싱클쿼터를 필터링한 반면, 이번 문제에서는 싱글쿼터마저 preg_match함수로 필터링하고 있다.


그래서 ereg함수의 취약점이 있듯이 preg_match도 취약점이 있어서 싱글쿼터 우회를 할 수 있지 않을까 싶어서 구글링해보았지만 싱글쿼터를 사용하면서 필터링을 피할 방법을 찾지 못하였다. ㅠㅠ


결국 힌트를 보고 말았다

힌트. 문자열 이스케이프 형태로 바꿔줌


이스케이프 문자(escape character)이란 어떤 부호 또는 언어로부터 이탈하는 것으로 아래와 같은 예시가 있다.

  표현

 영어이름 

 한국어이름 

 \'

 single quote 

 작은따옴표 

  \"

 double quote 

 큰따옴표 

  \/

 slash

 슬래시 

  \\ 

 backslash 

 역슬래시

  \n

 new line 

 뉴라인 

  \r 

 carriage return 

 캐리지리턴 

 \t

  tab

 탭

  \b 

 backspace

 백스페이스 

  \f

 form feed

 폼피드

  \v

 vertical tab

 수직탭

  \0

 null character 

 널
  \$

 dollar sign 

 달러표시

(https://en.wikipedia.org/wiki/Escape_character)


역슬래시를 사용해서 싱글쿼터를 문자열 싱글쿼터로 바꿔준다. 

id=''에서 두번째 싱글쿼터를 문자열 싱글쿼터로서 인식되도록 하면 닫는 싱글쿼터가 사라진 셈이니까 pw=''의 첫번째 싱글쿼터가 id의 닫는 싱글쿼터로 인식하게된다 !! (감탄감탄)


id값만 존재하면 되니까 where뒤 조건을 무조건 참이 되도록하면 된다.



SUCCESS!



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

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