3학년1학기 2주차_웹해킹 과제(chellenge 39)

2025. 4. 26. 01:08hacking : p_study/webhack

Chellenge 39

 

Chellenge 39

 

webhacking.kr

 

✅ 내 풀이

 

문제를 열어봤는데, 들어오자마자 위와 같이 제출하는 입력칸이 있고, view-source를 클릭하여 들어가면 아래와 같이 코드를 확인할 수 있다.

 

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

 

php코드가 들어있고, 일단 id를 입력받았을때, 아이디가 입력되면 \\ ,공백, ' ,'', 등으로  대체되는 것인가 추측해보았다.

나머지는 정확한 내용은 모르겠지만, id 길이를 측정하게 하는 부분이 있었는데, sql 문을 사용해야하나 추측.. 이유는

select 부분이나 db와 관련된 부분이 있어서 였다.

또 위에 select 부분에 싱글쿼터하나가 누락된 것을 확인할 수 있음.

 

일단 아무값이나 입력해보려고 hi를 입력했더니 아래와 같이 url에 / index.php 입력한 값이 제대로 보내진 것 같았다.

 

 

그리고 나서 싱글쿼터가 하나 누락된 것에 초점을 두고 싱글쿼터를 넣은 쿼리값을 보내도록 시도해봤지만.. 풀리지는 않았다.

 

 

그래서 내용을 찾아보니, 

쿼리가 제대로 수행되려면 id를 입력한 후 싱글쿼터(')를 제대로 닫아주어야 한다.

그러나 싱글쿼터(')를 1개만 입력하면 str_replace 함수에 의해 싱글쿼터가 쌍으로(' ') 입력되기 때문에, str_replace 함수를 우회하여 싱글쿼터(')를 1개만 입력해야 한다고한다.

 

일반적으로 str_replace를 우회하여 싱글쿼터(')를 입력하는 방법은 백슬래시를 사용하여 싱글쿼터(')를 문자열로 인식시키는 것이다. 하지만 이 문제에서는 백슬래시(\) 역시 str_replace 함수에 의해 필터링되므로 이 방법은 사용할 수 없다.

이 문제에서는 substr 함수에 주목해서 id의 길이가 15를 넘어가면 substr 함수가 15글자까지만 잘라내므로, id의 15번째 인덱스 부분에 싱글쿼터(')를 넣어주면, str_replace 함수에 의해 싱글쿼터(')가 2개 입력되고, 마지막 싱글쿼터가 16번째 인덱스가 되어 substr 함수에 의해 잘려나가므로, 공백을 채워내고 ' 싱글쿼터를 입력해야함.

 

따라서 공백을 9칸 입력하고 싱글쿼터를 입력하였다. 나는 해당 문제를 풀기위해 admin공백9칸' 이런식으로 풀이를 했다.

 

해당 부분도 개념을 좀더 심도 있게 공부해야겠다.

 

[참고 자료]

 

[Webhacking.kr] Challenge 39 풀이 :: 끄적끄적

 

[Webhacking.kr] Challenge 39 풀이

39번 문제로 들어가보면, id를 입력하는 칸과 제출 버튼만 달랑 있다. 일단 아무거나 입력하고 제출해봤더니 아래와 같은 에러 문구가 출력되었다. 17번째 줄에서 mysql_fetch_array()를 통해 요청한 쿼

g-idler.tistory.com