https://dreamhack.io/wargame/challenges/413
[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λ₯Ό νμΈν΄λ³΄κ² λλ©΄ μ μΆλ ₯λλ κ²μ λ³Ό μ μλ€.
flagλ νμΌλ‘ λμ΄μλ€κ³ νμΌλ
/flagλ₯Ό μ λ ₯ν΄μ flagλ₯Ό μ€νμν€κ³ flagλ₯Ό μ»μ μ μλ€.
λ¬Έμ νμ΄ μλ£
!
[3] μ°Έκ³
https://minseosavestheworld.tistory.com/156?category=1133576
[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 |