반응형
이번 문제는 상대적으로 간단하다.
그리고 문제 내용도 간단하다.
소스보기
<?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 |