반응형
문제 14번 - giant
query : select 1234 fromprob_giant where 1
<?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__);
?>
일단 다른 문제들과 마찬가지로 php 코드가 주어져있다.
먼저 필터링 함수를 확인해보면 shit을 받는 변수에 1보다 큰 크기의 문자열이 들어가면 안되고 공백, 엔터, \r, 탭을 필터링한다는 것을 알 수 있다. 추가로 i를 통해 대소문자를 구별하지 않는다는 것을 확인 할 수 있다.
<?php
if(strlen($_GET[shit])>1) exit("No Hack ~_~");
if(preg_match('/ |\n|\r|\t/i', $_GET[shit])) exit("HeHe");
?>
또 clear 조건을 확인하기 위해 조건문 코드를 확인해보니 query문을 참으로 만들어줄 문자열(?)이 1234에 들어가면 clear가 된다는 것을 알 수 있다.
<?php
$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__);
?>
위에 조건들을 확인해보니 query문에 from과 prob 사이에 공백이 필요하다는 것을 알 수 있는데 shit에 공백을 의미하는 문자를 넣어주면 된다는 것을 알 수 있다. 따라서 앞선 문제에서 사용한 %0a를 사용해보았다. %0a는 엔터랑 같은 의미인데 엔터를 필터링하므로 실패했다. 같은의미를 가지는 공백 문자 우회방법을 찾아보니 다양한 방법이 있었는데 %0b나 %0c가 있었다. 자세한 공백 우회 방법은 다른 게시물에 따로 정리해야겠다.
따라서 해당 주소 php 뒤에 shit=%0b를 입력한다.
solve
https://los.rubiya.kr/chall/giant_18a08c3be1d1753de0cb157703f75a5e.php?shit=%0b
반응형
'write-up > LOS write-up' 카테고리의 다른 글
LOS (Lord of SQL injection) 문제 16번 succubus write-up (0) | 2021.07.10 |
---|---|
LOS (Lord of SQL injection) 문제 15번 assassin write-up (0) | 2021.07.07 |
LOS (Lord of SQL injection) 문제 13번 bugbear write-up (0) | 2021.07.07 |
LOS (Lord of SQL injection) 문제 12번 darkknight write-up (2) | 2021.07.07 |
LOS (Lord of SQL injection) 문제 11번 golem write-up (0) | 2021.07.06 |