'' or 1=1'에 해당되는 글 1건
- 2016.09.07 [LOS] level1 gremlin(simple sql injection)
2016. 9. 7. 17:39
## LOS level1 gremlin(Simple SQLi)
LOS는 Lord of SQL injection의 약자로 Lord of Bufferoverflow를 모티브로 만들어진 webhacking을 다루는 워게임 사이트이다. 첫 번째 문제를 보자.
[그림 1] 문제(몹) 리스트
우선 첫 번째 문제의 이름은 gremlin이다. 몬스터를 클릭하면 소스코드가 나오는데 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 | <?php include "../config.php"; login_chk(); dbconnect(); if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); // do not try to attack another table, database! if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); $query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; echo "<hr>query : <strong>{$query}</strong><hr><br>"; $result = @mysql_fetch_array(mysql_query($query)); if($result['id']) solve("gremlin"); highlight_file(__FILE__); ?> | cs |
GET방식으로 id와 pw라는 파라미터를 받는데 주어진 쿼리문은 select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"이다. 문제를 풀기 위해서는 10번째 라인에서 $_result['id']에 값이 들어 있기만 하면 되므로 id파라미터로 '%20or%201=1--%20 정도의 쿼리문만 넣어도 위 쿼리문의 where절은 항상 참이게 되므로 테이블에 값이 있으면 가장 위의 컬럼을 반환한다.
이렇게 변환된 쿼리문을 구성해보면 아래와 같다.
"select id from prob_gremlin where id='' or 1=1-- ' and pw=''";
결과적으로 위 페이로드대로 구성하여 request를 날리면 아래 [그림 2]와 같이 문제가 풀리게 된다.
[그림 2] Gremlin Clear!
'Wargame > LOS(level1)' 카테고리의 다른 글
[LOS] level1 cobolt(주석) (0) | 2016.09.08 |
---|