본문 바로가기
[웹해킹]/[Webhacking.kr]

[Webhacking.kr] 53번

by Hevton 2020. 11. 22.
반응형

이번 문제는 상대적으로 간단하다.

그리고 문제 내용도 간단하다.

 

소스보기

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

 

이렇게 나와있다. val 값으로 1 2 3 4 입력해보면 a값이 1 2 3 4로 잘 출력되고, 나머지 값들은 데이터에 없는지 결과가 나오지 않는다.

 

이 문제에서 쿼리의 결과가 0과 1 같은 Blind 형태가 아니라는 점에 주목해야한다.

Blind Injection 방식이 아니라는 것.

 

그럼 이에 대한 해결방법으로 매우 간단한 방법이 있다.

SELECT 문에서 마지막에 넣을 수 있는 procedure analyse() 라는 것이 있는데, 이는 해당 테이블에 대한 정보를 분석하여 출력해준다.

(SELECT A 한 결과에 따라서 해당(A) 컬럼에 대해서만 분석하여 출력할 수도 있다)

여기서 좋은점은, 컬럼명의 출력이 " DB명.테이블명.컬럼명 " 형식이기에 DB명과 테이블명 컬럼명을 한번에 확인해 줄 수 있다.

 

이 함수를 미리 알고 있으면 이 문제는 정말 간단히 풀 수가 있다.

https://webhacking.kr/challenge/web-28/?val=1%20procedure%20analyse();

를 입력하면

webhacking.chall53_755fdeb36d873dfdeb2b34487d50a805.a

가 출력된다. 여기서 점을 기준으로 테이블 명만 빼서 ?answer=에 넘겨주면 끝

숙 오!!

 

반응형

'[웹해킹] > [Webhacking.kr]' 카테고리의 다른 글

[Webhacking.kr] 55번 & 나중에 다시 보기  (0) 2020.11.24
[Webhacking.kr] 54번  (0) 2020.11.23
[Webhacking.kr] 52번 & 질문  (0) 2020.11.22
[Webhacking.kr] 51번  (0) 2020.11.15
[Webhacking.kr] 50번  (0) 2020.11.15