허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.
조금 더 구체적인 내용들은 [LOS] Lord of the SQL Injection - gremlin 문제를 풀면서 작성해 두었고, 빠진 부분이나 필요한 부분들에 대해서는 조금씩 추가하면서 작성 하도록 하겠습니다.
[LOS] Lord of the SQL Injection - goblin
preg_match : porb _ . ( ) 필터링이 되어 있고 i 옵션을 통하여 대소문자를 구분하지 않음 no='필터링값'이 있을 경우 "No Hack ~_~" 문구를 출력합니다.
preg_match : ' " ` 필터링이 되어 있고 i 옵션을 통하여 대소문자를 구분하지 않음 no='필터링값'이 있을 경우 "No Quotes ~_~" 문구를 출력합니다.
$query = "select id from prob_goblin where id='guest' and no={$_GET[no]}";
쿼리문에서는 id 값은 'guest'로 고정되어 있고, no 변수에 입력되는 값만 GET으로 넘겨주는 것을 알 수 있습니다.
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("goblin");
검색된 쿼리 결과를 통하여 조건이 맞을 경우 id 값을 반환해 주고 있으며, 최종적으로 id가 'admin'일 경우 문제가 해결되는 것을 알 수 있습니다.
아무 생각 없이 no 변수에 1을 입력하였더니 Hello guest 문구가 출력되는 것을 확인할 수 있었습니다. 즉 id가 'guest'일 경우 no의 값은 1이라는 것을 알 수 있습니다.
조금 더 이해하기 쉽게 비박스 데이터 베이스를 통하여 예시를 들어 보도록 하겠습니다.
bWAPP DB로 예를 들어 보면 여기서 bWAPP의 login 값은 LOS의 id, bWAPP id 값은 LOS의 no로 생각하시면 조금 더 이해가 되실 거라고 생각됩니다.
그럼 다시 문제로 돌아와서 id='guest' and no=1이라는 것을 알았습니다. 그렇다면 'admin'도 다른 no값을 가지고 있다는 것을 추측할 수 있습니다.
?no=0 OR no=2
select id from prob_goblin where id='guest' and no=0 OR no=2
연산은 and 연산부터 수행되기 때문에 id='guest'이고 no=0은 거짓이기 때문에 OR 연산을 수행하여 no=2의 값을 출력하게 됩니다. 즉 'admin'의 no 값은 2가 되게 됩니다.
bWAPP DB로 예시를 들어 보겠습니다.
select login, id from heroes where login='neo' and id=1;
heroes 테이블의 login, id 컬럼에서 login='neo' and id=1 값의 결과를 출력합니다.
select login, id from heroes where login='neo' and id=0 or id=2;
heroes 테이블의 login, id 컬럼에서 login='neo' and id=0 값을 출력하였으나 조건에 맞지 않아 or 조건을 통하여 id=2의 값을 출력합니다.
해당 문제에서는 ' " ` 필터링이 되어 문자를 입력하지 못하게 막고 있지만, char, hex, binary를 통하여 문자를 입력할 수도 있습니다.
10진수 - char(97,100,109,105,110)
16진수 - 0x61646D696E (16진수는 앞에 0x를 표기하여 줍니다.)
2진수 - 0b0110000101100100011011010110100101101110
char를 이용하여 admin을 출력하였습니다. 이처럼 필터링된 문자열을 우회할 수 있는 방법도 있으니 참고하여 직접 테스트를 해보시기를 추천드립니다.
참고
'Code::War Game > los.rubiya.kr' 카테고리의 다른 글
[LOS] Lord of the SQL Injection - wolfman (0) | 2023.01.05 |
---|---|
[LOS] Lord of the SQL Injection - orc (0) | 2023.01.04 |
[LOS] Lord of the SQL Injection - cobolt (0) | 2022.12.28 |
[LOS] Lord of the SQL Injection - gremlin (0) | 2022.12.27 |
[LOS] Lord of the SQL Injection 소개 (0) | 2022.12.19 |