DINGA DINGA
article thumbnail
Published 2021. 10. 9. 16:01
[Challenge(Old)] old-53 (35) WEB/Webhacking.kr
728x90

https://webhacking.kr/challenge/web-28/

 

Challenge 53

 

webhacking.kr

소스코드를 살펴보았다.

 

<?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>

GET 방식으로 받은 파라미터 answer가 $hidden_table과 같으면 문제가 해결된다.

즉, 이 문제를 풀려면 $hidden_table을 알아내야 한다.

val에는 'select'와 'by'가 필터링이 걸려 있다.

 

쿼리를 보내는 방식을 보면, 입력한 값(val)이 a 컬럼으로 존재하면 출력하게 되어 있다.

 

메인 페이지로 돌아와서 val에 1을 넣어보았다.

1이 출력되었다.

마찬가지로 4까지 넣었을 때 값이 출력되었고, 0과 5 이상은 출력되지 않았다.

 

따라서 데이터베이스에 1, 2, 3, 4의 값이 존재한다고 추측할 수 있다.

select가 필터링되기 때문에 procedure analyse() 함수로 우회했다.

더보기

procedure analyse() : 선택한 컬럼을 기준으로 데이터베이스명.테이블명.컬럼명 출력

 

아래와 같이 입력했다.

 

출력된 결과를 통해

데이트베이스명은 webhacking, 테이블명은 chall53_755fdeb36d873dfdeb2b34487d50a805,

컬럼명은 a인 것을 알 수 있다.

 

answer에 테이블명을 넣어주었다.

 

 

 

Clear!

728x90

'WEB > Webhacking.kr' 카테고리의 다른 글

[Challenge(OId)] old-29 (40)  (0) 2021.11.05
[Challenge(Old)] old-55 (40)  (0) 2021.10.09
[Challenge(Old)] old-46 (30)  (0) 2021.10.02
[Challenge(Old)] old-35 (35)  (0) 2021.10.02
[Challenge(Old)] old-08 (35)  (0) 2021.09.25