728x90
반응형

상단에 나오는 쿼리문은 DB에 해당 쿼리문으로 데이터가 들어간다고 알려준다.
이번문제 쿼리문을 보면 기존 문제들과 쿼리문 형식이 바뀌었다.
query : select 1234 fromprob_giant where 1
아래에는 php 코드가 나와있으며, 이걸 참고해서 문제를 푸는 것 이다.
해당 php 코드에서 자세하게 봐야 하는 부분은 이 부분인 것 같다.
preg_match 조건문 부분을 보면 다음과 같이 필터링하고 있다.
- 공백, \n, \r, \t
문자 16진수(Hex) 설명
tab | %09 | \t 필터링 |
line feed | %0a | \n 필터링 |
vertical tab | %0b | |
form feed | %0c | |
carriage return | %0d | \r 필터링 |
/**/ | 길이 초과 |
문제를 풀기 위해서는 shit이라는 파라미터 값을 받고 있으며, 입력값의 길이가 1을 넘지 않아야한다.
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";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result[1234]) solve("giant");
shit의 입력 길이가 1을 넘지 않으려면 필터링된 줄바꿈을 우회하여 해봐야 할 것 같다.
?shit=%0b

?shit=%0c

728x90
반응형