https://webhacking.kr/challenge/web-11/
관련 문제
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 26</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
a { color:lightgreen; }
</style>
</head>
<body>
<?php
if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); }
$_GET['id'] = urldecode($_GET['id']);
if($_GET['id'] == "admin"){
solve(26);
}
?>
<br><br>
<a href=?view_source=1>view-source</a>
</body>
</html>
- 한 번 인코딩된 문자열 검사:
- 문자열: %61%64%6d%69%6e
- preg_match("/admin/", "%61%64%6d%69%6e")는 %61을 a, %64를 d, %6d를 m, %69를 i, %6e를 n으로 인식합니다.
- 따라서, %61%64%6d%69%6e는 admin을 포함한다고 인식하여 "no!"를 출력하고 종료합니다.
- 이중 인코딩된 문자열 검사:
- 문자열: %2561%2564%256d%2569%256e
- preg_match("/admin/", "%2561%2564%256d%2569%256e")는 %25를 %로 인식하고, 뒤에 오는 61은 그대로 61로 인식합니다.
- 따라서, %2561는 %61로, %2564는 %64로 인식됩니다.
- 이는 admin과 일치하지 않으므로, 이 문자열에는 admin이 포함되지 않는다고 인식합니다
이중 인코딩된 문자열 검사:
입력: id=%2561%2564%256d%2569%256e
preg_match("/admin/", "%2561%2564%256d%2569%256e")는 %61%64%6d%69%6e로 변환되므로 admin을 포함하지 않는다고 인식합니다.
$_GET['id'] = urldecode($_GET['id']);는 %2561%2564%256d%2569%256e를 %61%64%6d%69%6e로 변환합니다.
변환된 값은 urldecode에 의해 다시 디코딩되어 admin이 됩니다.
따라서, if($_GET['id'] == "admin") 조건이 참이 되어 solve(26);이 호출됩니다.
'웹 해킹 > 웹 공부' 카테고리의 다른 글
문자열 인코딩이란? 문자열 인코딩 종류 (ASCII,EUC-KR, 유니코드, UTF-8 등) (0) | 2024.01.10 |
---|---|
Javascript DOM 접근 및 조작 (CRUD, 이벤트 핸들러) (0) | 2024.01.04 |
URL이란? URL 구조, 도메인과의 차이 (4) | 2024.01.03 |
정적 페이지와 동적 페이지 (2) | 2023.12.27 |
HTTP 상태 코드 (Response Status Code) 200, 300, 400, 500 정리 | 404 에러 (0) | 2023.12.12 |