Wargame/webhacking.kr

Challenge old 53 (350)

마띠(쥔장) 2020. 2. 11. 16:58

 

<?php
  $db = dbconnect();
  include "./tablename.php";
  if($_GET['answer'] == $hidden_table) solve(53);
  if(preg_match("/select|by/i",$_GET['val'])) exit("no hack");
  $result = mysqli_fetch_array(mysqli_query($db,"select a from $hidden_table where a={$_GET['val']}"));
  echo($result[0]);
?>

$hidden_table로 표현된 숨겨진 테이블 명과 answer 쿼리가 같으면 풀리는 문제인 것 같다.

일단 select 문에서 val와 a를 언급하고 있으니 ?val=1부터 넣어봤다.

val=1일 때, 1이 그대로 출력되었다

이는 2, 3, 4 동일했으며 0과 5는 아무 반응이 없었다.

?val=a로 넣었을 때도 1이 출력되었다.

 

별 의미 없겠지만 테이블을 추측할 수 있다.

a val
1 1
2 2
3 3
4 4

 

테이블명은 Blind SQL Injectinon으로 알 수 있을 것 같다.

UNION SELECT table_name FROM information.schema.tables를 사용하여 테이블명을 알아낼 수 있지만

select가 필터링 되기 때문에 procedure analyse()를 사용해보자.

 

select a from $hidden_table where a={$_GET['val']}에서

val 부분을 a procedure analyse();로 넣어보자

728x90