SWLUG/μ›Ή ν•΄ν‚Ή

[Dreamhack/λ“œλ¦Όν•΅] Command Injection Advanced

waterproof 2023. 11. 19. 20:04

 

https://dreamhack.io/wargame/challenges/413

 

Command Injection Advanced

Description Exercise: Command Injection Advancedμ—μ„œ μ‹€μŠ΅ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€. 문제 μˆ˜μ • λ‚΄μ—­ 2023.07.27 Dockerfile 제곡

dreamhack.io

 


 

[1] 문제 뢄석

 

# μ›Ή νŽ˜μ΄μ§€ 뢄석

 

URL을 μ œμΆœν•  수 μžˆλŠ” ν˜•μ‹μ˜ 폼이 μžˆλŠ” νŽ˜μ΄μ§€μ΄λ‹€.

 

 

<html>
    <head></head>
    <link rel="stylesheet" href="/static/bulma.min.css" />
    <body>
        <div class="container card">
        <div class="card-content">
        <h1 class="title">Online Curl Request</h1>
                <form>
                <div class="field">
                    <label class="label">URL</label>
                    <input class="input" type="text" placeholder="url" name="url" required>
                </div>
                <div class="control">
                    <input class="button is-success" type="submit" value="submit">
                </div>
            </form>
                </div>
        </div>
    </body>
</html>

 

"url" μ΄λΌλŠ” μ΄λ¦„μ˜ νŒŒλΌλ―Έν„°λ‘œ λ‚΄κ°€ μž…λ ₯ν•œ 값이 λ°›μ•„μ Έμ„œ 전솑이 λ˜λŠ” κ΅¬μ‘°μž„μ„ μ•Œ 수 μžˆλ‹€.

.

.

.

μ—¬κΈ°κΉŒμ§€λŠ” μ•Œ 수 μžˆλŠ” 게 μ—†μ–΄μ„œ λ°”λ‘œ λ‹€μš΄λ‘œλ“œν•œ νŒŒμΌμ„ 뢄석해보겠닀.

 

 

# λ‹€μš΄λ‘œλ“œν•œ 파일 뢄석

 

 

βš™οΈ index.php

 

<html>
    <head></head>
    <link rel="stylesheet" href="/static/bulma.min.css" />
    <body>
        <div class="container card">
        <div class="card-content">
        <h1 class="title">Online Curl Request</h1>
    <?php
        if(isset($_GET['url'])){
            $url = $_GET['url'];
            if(strpos($url, 'http') !== 0 ){
                die('http only !');
            }else{
                $result = shell_exec('curl '. escapeshellcmd($_GET['url']));
                $cache_file = './cache/'.md5($url);
                file_put_contents($cache_file, $result);
                echo "<p>cache file: <a href='{$cache_file}'>{$cache_file}</a></p>";
                echo '<pre>'. htmlentities($result) .'</pre>';
                return;
            }
        }else{
        ?>
            <form>
                <div class="field">
                    <label class="label">URL</label>
                    <input class="input" type="text" placeholder="url" name="url" required>
                </div>
                <div class="control">
                    <input class="button is-success" type="submit" value="submit">
                </div>
            </form>
        <?php
        }
    ?>
        </div>
        </div>
    </body>
</html>

 

<뢄석 λ‚΄μš©>

 

1. λ‚΄κ°€ URL을 μ œμΆœν–ˆμ„ λ•Œ f(isset($_GET['url'])) 블둝이 μ‹€ν–‰λœλ‹€.

 

2. 제좜된 URL이 'http'둜 μ‹œμž‘ν•˜λŠ”μ§€ ν™•μΈν•˜κ³ , 그렇지 μ•ŠμœΌλ©΄ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œν•˜κ³  μ’…λ£Œν•œλ‹€. (μ΄μƒν•œ νŒŒμΌμ„ μ‚½μž…ν•˜λŠ” 것에 λŒ€λΉ„ν•˜λŠ” 역할을 ν•œλ‹€.)

 

3. shell_exec ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ cURL λͺ…령을 μ‹€ν–‰ν•˜κ³  escapeshellcmd ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ©”νƒ€λ¬Έμžλ₯Ό 받아듀이지 μ•ŠλŠ”λ‹€.

 

4. κ²°κ³ΌλŠ” $result λ³€μˆ˜μ— μ €μž₯되고, κ²°κ³Όλ₯Ό 화면에 좜λ ₯ν•˜λ©΄μ„œ λ™μ‹œμ— κ²°κ³Όλ₯Ό νŒŒμΌμ— μ €μž₯ν•œλ‹€.

 

5. κ²°κ³Όλ₯Ό cache 디렉토리 μ•ˆμ— μ €μž₯ν•˜λŠ”λ°, 파일 이름은 ν•΄λ‹Ή URL의 MD5 ν•΄μ‹œ κ°’μœΌλ‘œ μƒμ„±λœλ‹€.


6. μƒμ„±λœ νŒŒμΌμ— λŒ€ν•œ 링크λ₯Ό νŽ˜μ΄μ§€μ— ν‘œμ‹œν•œλ‹€.

.

.

.

 

메타 문자 μ•žμ— λ°±μŠ¬λž˜μ‹œ(\)λ₯Ό μΆ”κ°€ν•˜μ—¬ μ΄μŠ€μΌ€μ΄ν”„ μ‹œν‚€λŠ” ν•¨μˆ˜λ•Œλ¬Έμ—,

μ–΄λ–»κ²Œ 곡격을 ν•΄μ•Ό ν•˜λŠ”μ§€ 방법이 λ– μ˜€λ₯΄μ§€ μ•Šμ•˜λ‹€.

 

κ·Έλž˜μ„œ 뢄석 이후에 곡격 방법에 λŒ€ν•΄μ„œλŠ” λ‹€λ₯Έ λΈ”λ‘œκ·Έμ˜ 풀이 글을 μ°Ύμ•„λ³΄μ•˜λ‹€.

 


 

[2] 곡격

 

 

escapeshellcmd ν•¨μˆ˜λŠ” '-'문자λ₯Ό μ΄μŠ€μΌ€μ΄ν”„ ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ λͺ…λ Ήμ–΄μ˜ μ˜΅μ…˜κ³Ό 인자λ₯Ό μ‘°μž‘ν•  수 μžˆλ‹€.

 

문제 νŽ˜μ΄μ§€ 상단에 μ¨μ ΈμžˆλŠ” "Online Curl Request"와, app.py에 μ‚¬μš©λœ curl μš”μ²­μ„ 보면,

λ‹€μ–‘ν•œ μ˜΅μ…˜λ“€ 쀑에 '-o' λͺ…령을 μ‚¬μš©ν•΄μ•Ό 함을 μ•Œ 수 μžˆλ‹€.

 

PHPμ—μ„œλŠ” shell_exec ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ»€λ§¨λ“œ λΌμΈμ—μ„œ cURL을 μ‹€ν–‰ν•˜κ³  κ·Έ κ²°κ³Όλ₯Ό κ°€μ Έμ˜¬ 수 μžˆλ‹€.

.

.

.

 

이λ₯Ό μ΄μš©ν•΄μ„œ curl의 인자λ₯Ό λ°›λŠ” 곳에 또 curl을 μ“°κ³  -oμ˜΅μ…˜μœΌλ‘œ νŒŒμΌμ„ μƒμ„±ν•˜λŠ” 곡격을 μ‹œλ„ν•  것이닀.

 

κ·Έλ ‡κ²Œ 되면 두 번 curl이 μ‹€ν–‰λ˜λ©΄μ„œ, 인자 μ•ˆμ—μ„œ μ‹€ν–‰λ˜λŠ” curl은 md5둜 ν•΄μ‹±λ˜μ§€ μ•Šμ„ 것이닀.

.

.

.

 

 

λ‹€λ₯Έ μ‚¬λžŒ 풀이 글에 올렀져 μžˆλŠ” μ›Ή 셀을 λ§Œλ“œλŠ” 방법을 μ°Έκ³ ν•΄μ„œ,

κΉƒν—ˆλΈŒ ν˜ΈμŠ€νŒ… μ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•΄ λ§Œλ“  λ‚΄ μ„œλ²„μ— μ›Ή 셀을 μ˜¬λ €λ†“μ•˜λ‹€.

 

(κΉƒν—ˆλΈŒ ν˜ΈμŠ€νŒ… μ„œλΉ„μŠ€λ₯Ό 처음 μ΄μš©ν•΄λ΄μ„œ 쑰금 ν—€λ§Έλ‹€.)

 

 

 

 

 

이와 같이 μ΅μŠ€ν”Œλ‘œμž‡ μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€.

λ‚˜μ˜ μ›Ή μ„œλ²„μ— μžˆλŠ” test_curl.phpλ₯Ό -o μ˜΅μ…˜μœΌλ‘œ cache 디렉토리에 test_curl.phpλΌλŠ” μ΄λ¦„μœΌλ‘œ μ €μž₯ν•΄λ‹¬λΌλŠ” μ½”λ“œμ΄λ‹€.

 

(μ•„νŒŒμΉ˜μ˜ 기본적인 κ²½λ‘œκ°€ var/www/html인 점을 μ°Έκ³ )

 

 

/cache/test_curl.php 경둜둜 κ°€λ©΄ μœ„μ™€ 같이 μ›Ή μ‰˜μ΄ λ“±μž₯ν•œλ‹€.

 

 

 

ls -al

 

μœ„μ™€ 같이 ls -al둜 μƒμ„Έν•œ lsλ₯Ό ν™•μΈν•΄λ³΄κ²Œ 되면 잘 좜λ ₯λ˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.

 

 

 

/flag μž…λ ₯ κ²°κ³Ό

 

 

flagλŠ” 파일둜 λ˜μ–΄μžˆλ‹€κ³  ν–ˆμœΌλ‹ˆ

/flagλ₯Ό μž…λ ₯ν•΄μ„œ flagλ₯Ό μ‹€ν–‰μ‹œν‚€κ³  flagλ₯Ό 얻을 수 μžˆλ‹€.

 

 

 

문제 풀이 μ™„λ£Œ

!

 


[3] μ°Έκ³ 

 

https://minseosavestheworld.tistory.com/156?category=1133576

 

[Dreamhack Wargame] Command Injection Advanced

PHP escapeshellcmd() ν•¨μˆ˜ 우회 1. escapeshellcmd() ν•¨μˆ˜μ— λŒ€ν•΄ - 메타 문자λ₯Ό ν†΅ν•œ μ»€λ§¨λ“œ μΈμ μ…˜μ„ λ°©μ§€ν•˜κΈ° μœ„ν•΄ phpμ—μ„œ μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜ - μ‰˜ λͺ…령을 μ†μ΄λŠ” 데 μ‚¬μš©λ  수 μžˆλŠ” λ¬Έμžμ—΄μ˜ λͺ¨λ“  문자λ₯Ό 이

minseosavestheworld.tistory.com

 

 

https://velog.io/@jckim22/%EB%B9%A1%EA%B3%B5%ED%8C%9F-8%EC%A3%BC%EC%B0%A8-%EA%B3%BC%EC%A0%9C-11-%EB%93%9C%EB%A6%BC%ED%95%B5-%EC%9B%8C%EA%B2%8C%EC%9E%84-Command-Injection-Advanced

 

[WARGAME] λ“œλ¦Όν•΅ μ›Œκ²Œμž„ - Command Injection Advanced

μ•„λž˜λŠ” μ„œλ²„ μ½”λ“œμ΄λ‹€.μ½”λ“œλ₯Ό 보면 1.shell_exec으둜 λ¨Όμ € curl을 λ””ν΄νŠΈλ‘œ μ‹€ν–‰μ‹œμΌœμ£ΌλŠ” 것을 λ³Ό 수 μžˆλ‹€.2.λ¬Έμžμ—΄μ— httpκ°€ μžˆλŠ”μ§€ κ²€μ‚¬ν•œλ‹€.3.μ΄μƒν•œ νŒŒμΌμ„ μ‚½μž…ν•˜λŠ” 것에 λŒ€λΉ„ν•΄ md5둜 url을 ν•΄μ‹±ν•œ

velog.io

 

 


[4] λŠλ‚€ 점

 

ν•™νšŒ 과제둜 ν‘Ό 문제인데, μ’€ μ–΄λ ΅λ‹€κ³  λŠκΌˆλ‹€.

escapeshellcmd ν•¨μˆ˜μ˜ 취약점에 λŒ€ν•΄ λ”°λ‘œ κ³΅λΆ€ν•œ 적이 μ—†μ—ˆκ³ , μ„œλ²„μ— μ›Ή μ…€ μ½”λ“œλ₯Ό μ§œμ„œ μ˜¬λ¦¬λŠ” 것 λ˜ν•œ 아직은 λ‚˜ ν˜Όμžμ„œ λ– μ˜¬λ¦΄ 수 μ—†λŠ” μ•„μ΄λ””μ–΄μ˜€λ‹€.

 

κ·Έλ ‡μ§€λ§Œ, λ‚˜μ—κ²Œ μ–΄λ €μš΄ λ¬Έμ œλΌλ„ ν•œ 번 ν’€μ–΄λ³΄λŠ” 건 쒋은 κ²½ν—˜μ΄λ‹€!

'SWLUG > μ›Ή ν•΄ν‚Ή' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[webhacking.kr] Challange 44  (1) 2023.11.20
[Dreamhack/λ“œλ¦Όν•΅] command-injection-1  (2) 2023.11.20
[Dreamhack/λ“œλ¦Όν•΅] baby-linux  (0) 2023.11.16
[Dreamhack/λ“œλ¦Όν•΅] csrf-2  (1) 2023.11.11
[Dreamhack/λ“œλ¦Όν•΅] csrf-1  (0) 2023.11.10