2024. 11. 17. 13:43ㆍInformation Security 정보보안/DreamHack
배울내용 :
dreamhack,
web hacking,
개발자도구,
dreamhack 풀이,
dreamhack simple-phparse 문제,
dreamhack web 풀이 ,
Postman
문제
문제는 위와같이 나와있고 아래에는 문제를 열었을때 가장 먼저 보여지는 화면이다. host , path, query 가 나와있고 cannot access flag.php 로 나와있는걸 볼수있다
우선 코드를 확인해보자
<!-- php code -->
<?php
$url = $_SERVER['REQUEST_URI'];
$host = parse_url($url,PHP_URL_HOST);
$path = parse_url($url,PHP_URL_PATH);
$query = parse_url($url,PHP_URL_QUERY);
echo "<div><h1> host: $host <br> path: $path <br> query: $query<br></h1></div>";
if(preg_match("/flag.php/i", $path)){
echo "<div><h1>NO....</h1></div>";
}
else echo "<div><h1>Cannot access flag.php: $path </h1></div> ";
?>
이중에서 host , path, query 전부다 url 에서 나오는걸 볼수있고 아래의 조건문을 preg_match("/flag.php/i", $path)은 대소문자를 무시하며 /flag.php 문자열이 $path에 포함되어 있는지 확인합니다. 따라서 $path에 "flag.php"가 포함되면 "NO...."라는 메시지가 출력된다고한다.
if(preg_match("/flag.php/i", $path)){
echo "<div><h1>NO....</h1></div>";
}
그래서 URL 에 있는걸 parsing 하는과정중에 대소문자에 구분없이 flag.php 를 보내는 법을 알아야하는데 아래처럼 우선 값이 제대로 들어가는지 확인해준다
처음에는 제대로 안들어갔지만 가운데 스페이스(%20) 을 넣으니 값이 제대로 들어가는걸 볼수있었다
그러면 flag.php 를 검사를 못하게 url 인코딩을이용하면 된다
URL 인코딩 활용
PHP의 parse_url 함수는 URL을 파싱할 때 URL 인코딩된 문자열을 해석하는데 이 점을 이용하여 우회할 수 있다.
예를들어서 flag 에 소문자 "L" 대신에 써서 f l(%6c) ag 이렇게, 또는 다른 문자열을 바꿔보면 된다
예:
/fl%61g.php
/f%6cag.php
그리고 아까처럼 URL 에다가 집어넣어주면 아래와 같이 성공플레그를 뛰울수있게된다.
'Information Security 정보보안 > DreamHack' 카테고리의 다른 글
[DreamHack] [web] [LEVEL 1] what-is-my-ip 풀이 (0) | 2024.11.18 |
---|---|
[DreamHack] [web] [LEVEL 1] access-log 풀이 (1) | 2024.11.17 |
[DreamHack] [web] [LEVEL 1] baby-Case 풀이 (2) | 2024.11.16 |
[DreamHack] [web] [beginner] cookie 풀이 (0) | 2024.11.15 |
[DreamHack] [web] [beginner] pathtraversal 풀이 (0) | 2024.11.14 |