LOS 포스트는 이해한 내용과 복습을 위한 목적으로 작성되었습니다.
이번 포스트는 troll에 이어 vampire 문제에 대한 이해와 풀이를 진행해보도록 하겠습니다.
vampire는 단순 필터링 우회문제입니다.
|
문제 이해 |
문제 소스코드는 다음과 같이 PHP 소스를 그대로 보여주는 것을 알 수 있습니다.
<?php include "./config.php"; login_chk(); dbconnect(); if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~"); $_GET[id] = strtolower($_GET[id]); $_GET[id] = str_replace("admin","",$_GET[id]); $query = "select id from prob_vampire where id='{$_GET[id]}'"; echo "<hr>query : <strong>{$query}</strong><hr><br>"; $result = @mysql_fetch_array(mysql_query($query)); if($result['id'] == 'admin') solve("vampire"); highlight_file(__FILE__); ?>
위의 문제에서 6번 라인에서는 문자열을 모두 소문자로 바꿔주는 함수입니다.
또한 7번 라인에서는 admin이 발견되면 문자열을 한 번 삭제해주는 함수입니다.
이외의 조건은 없어보이며, 우리는 id='admin'이 되도록 열심히 필터링을 우회해주면 됩니다.
|
문제 풀이(쿼리) |
GET 형태이기 때문에 다음과 같이 쿼리를 짜주었습니다.
|
id 쪽에 값 삽입(admin 한번 삭제를 우회) |
이 문제에서는 admin을 한 번 발견하면, 딱 한 번 지워준다는 취약점을 가지고 있습니다.
따라서 admin이라는 문자열 안에 admin을 한 번 더 넣어주게 되면 안에 있는 admin은 사라지고 완전한 admin이 남게 되지요.
뭔가 랩 같이 글을 쓰게 됐는데 설명은 아래에서 더 자세히 하겠습니다.
https://los.rubiya.kr/chall/vampire_e3f1ef853da067db37f342f3a1881156.php?id=admadminin |
위의 쿼리는 id=admadminin 이라고 작성해주었습니다.
여기서 admadminin 이라고 작성된 부분에서 admin은 삭제되고 admin만 남게 된다는 겁니다.
query : select id from prob_vampire where id='admadminin' |
이렇게 되면 id에는 완전한 admin만 남게 됩니다.
'WARGAMES > LOS(rubiya)' 카테고리의 다른 글
[LOS - Lord Of SQL] Level 13 - bugbear (0) | 2019.03.27 |
---|---|
[LOS - Lord Of SQL] Level 12 - darkknight (0) | 2019.03.27 |
[LOS - Lord Of SQL] Level 11 - golem (0) | 2019.03.27 |
[LOS - Lord Of SQL] Level 10 - skeleton (0) | 2019.03.27 |
[LOS - Lord Of SQL] Level 08 - troll (0) | 2019.03.26 |
[LOS - Lord Of SQL] Level 07 - orge (0) | 2019.03.26 |
[LOS - Lord Of SQL] Level 06 - darkelf (2) | 2019.03.26 |
[LOS - Lord Of SQL] Level 05 - wolfman (0) | 2019.03.24 |