Wargame/Webhacking.kr

[Webhacking.kr] Old-39

핏디 2021. 8. 11. 22:21
SMALL

[문제]


[풀이]

view-source를 통해 코드를 확인하면 php코드에서 문제 풀이를 위한 조건을 확인할 수 있다.

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Chellenge 39</title>
</head>
<body>
<?php
  $db = dbconnect();
  if($_POST['id']){
    $_POST['id'] = str_replace("\\","",$_POST['id']);
    $_POST['id'] = str_replace("'","''",$_POST['id']);
    $_POST['id'] = substr($_POST['id'],0,15);
    $result = mysqli_fetch_array(mysqli_query($db,"select 1 from member where length(id)<14 and id='{$_POST['id']}"));
    if($result[0] == 1){
      solve(39);
    }
  }
?>
<form method=post action=index.php>
<input type=text name=id maxlength=15 size=30>
<input type=submit>
</form>
<a href=?view_source=1>view-source</a>
</body>
</html>

$_POST['id'] = str_replace("\\","",$_POST['id']);

-> 입력 값 중에 \\가 있으면 없앰
$_POST['id'] = str_replace("'","''",$_POST['id']);

-> 입력 값 중에 '가 있으면 ''으로 치환
$_POST['id'] = substr($_POST['id'],0,15);

-> 입력 값을 15바이트만 입력 받음
$result = mysqli_fetch_array(mysqli_query($db,"select 1 from member where length(id)<14 and id='{$_POST['id']}"));

-> id = '{$_POST['id']} 부분을 살펴보면 싱글쿼터로 닫아줘야 하는데, 짝이 맞지 않는 것을 볼 수 있다.
    if($result[0] == 1){
      solve(39);

 

문제를 풀기 위해서는 무조건 싱글쿼터가 들어가야 한다.

해결 방안은?

-> 15바이트만큼 길이를 잘라 14바이트만 인식하므로 admin 뒤에 공백으로 채운 뒤 마지막 바이트를 '로 입력하면 ''로 치환되더라도 짤리게 될 것!

 

LIST

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

[Webhacking.kr] Old-19  (0) 2021.08.12
[Webhacking.kr] Old-54  (0) 2021.08.11
[Webhacking.kr] Old 26  (0) 2021.08.04
[Webhacking.kr] Old 18  (0) 2021.07.28
[Webhacking.kr] Old 17  (0) 2021.07.28