반응형
Lord of SQLInjection
los.rubiya.kr
los의 거인을 처리해보자.
기본 쿼리문 및 소스코드는 아래와 같다.
소스코드를 살펴보자.
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(strlen($_GET[shit])>1) exit("No Hack ~_~");
if(preg_match('/ |\n|\r|\t/i', $_GET[shit])) exit("HeHe");
$query = "select 1234 from{$_GET[shit]}prob_giant where 1";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result[1234]) solve("giant");
highlight_file(__FILE__);
?>
쿼리문을 보면 from과 prob_giant 사이에 공백이 없고 shit 인자를 집어넣은 상태이다. 따라서 우리는 shit 인자를 통해 저 사이에 공백을 주어 쿼리문이 정상적으로 실행되도록 해야 한다.
그런데 스페이스와 개행(\n), 캐리지리턴(\r), 탭(\t)가 필터링 되고 있다.
그러나 공백문자, 화이트스페이스에는 필터링 된 문자들 말고도 2개나 더 있다.
문자 | 유니코드 | 아스키코드 | 이름 |
U+0020 | 32 | space (SPC) | |
\\t | U+0009 | 09 | horizontal tab (TAB) |
\\n | U+000A | 0A | newline (LF) |
\\v | U+000B | 0B | vertical tab (VT) |
\\f | U+000C | 0C | feed (FF) |
\\r | U+000D | 0D | carriage return (CR) |
%0b, %0c로 우회가 가능할 것이다.
참고로, url에서는 +도 화이트스페이스로 처리가 되지만, 스페이스로 처리되므로 필터링된다.
아스키코드 값인 2b를 입력하면 문자 +가 입력된다.
아래와 같이 거인을 처리가능 하다.
shit: %0c
url: ?shit=%0c
query : select 1234 fromprob_giant where 1
반응형
'해킹 > LoS(Lord of SQL Injection)' 카테고리의 다른 글
[Los] succubus 풀이 (0) | 2022.06.12 |
---|---|
[Los] assassin 풀이 (0) | 2022.06.12 |
[Los] bugbear 풀이 (0) | 2022.06.12 |
[Los] darkknight 풀이 (0) | 2022.06.12 |
[Los] golem 풀이 (0) | 2022.06.12 |