ããããã³ã°ã»ã©ãã®ã¤ãããã å®å
¨ç ä»®æ³ç°å¢ã«ãããããã«ã¼ä½é¨å¦ç¿ãã¨ãä½ç³»çã«å¦ã¶ å®å
¨ãªWebã¢ããªã±ã¼ã·ã§ã³ã®ä½ãæ¹ ç¬¬2ç èå¼±æ§ãçã¾ããåçã¨å¯¾çã®å®è·µãï¼é称ï¼å¾³ä¸¸æ¬ï¼ãåèã«ãã»ãã¥ãªãã£ã®åå¼·ãé²ãã¦ãã¾ãã
ååã¯ã以å ã«è¡ã£ã OWASP ZAP ã®èªåèå¼±æ§ã¹ãã£ã³ã®çµæã®ããã¹ãã©ãã¼ãµã«ãã«ã¤ãã¦ãåæã¨å¯¾çã¾ã§ããã¾ããã
ä»åã¯ãã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ï¼XSSï¼ãè¦ã¦ããã¾ãã
ããã§ã¯ããã£ã¦ããã¾ãã
â»2024/8/16ï¼å
¨ä½ãæ¸ãç´ã
å½åã®è¨äºã¯ãXSSï¼DOMãã¼ã¹ï¼ãåéããã¦ããã®ã§ãå
¨é¢çã«æ¸ãç´ãã¾ããã
åèæç®
ã¯ããã«
ãã»ãã¥ãªãã£ãã®è¨äºä¸è¦§ã§ããè¯ãã£ããåèã«ãã¦ãã ããã
ã»ãã¥ãªãã£ã®è¨äºä¸è¦§
徳丸æ¬ã®ç°å¢æ§ç¯ã«ã¤ãã¦ã¯ã以ä¸ã®ç¬¬9åã§ããã¾ããã
daisuke20240310.hatenablog.com
ã¾ãã徳丸æ¬ãç¨æãã¦ããã¦ãããèå¼±ãªã¢ããªã±ã¼ã·ã§ã³ Bad Todo ã®æºåã«ã¤ãã¦ã¯ã以ä¸ã®ç¬¬12åã§ããã¾ãããä»åã¯ããã®ç°å¢ã使ã£ã¦ãã£ã¦ããã¾ãã
daisuke20240310.hatenablog.com
ã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ã®æ¤åºçµæã®ç¢ºèªï¼Reflectedï¼
ã¾ããå
é ã«ããåå°åã®ã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ã®æ¤åºã«ã¤ãã¦è¦ã¦ããã¾ããGET 㨠POST ã®2件ãããã¾ãã
ã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ï¼Reflectedï¼ã®èå¼±æ§ã®åæï¼GETï¼
GETãªã¯ã¨ã¹ãã®æ¹ã®ææå
容ãè¦ã¦ã¿ã¾ãã
以ä¸ã®æ¤ç´¢ããã¯ã¹ã§ãé©åãªã¨ã¹ã±ã¼ãå¦çãè¡ããã¦ããªããããä»»æã®ã¹ã¯ãªãããå®è¡ã§ããã¨ãããã®ã®ããã§ãã
åé¡ã® todolist.php ã®ã½ã¼ã¹ã³ã¼ãã®æç²ã¯ä»¥ä¸ã§ãã
$key
ã«ã¯ãæ¤ç´¢ããã¯ã¹ã«å
¥åãããæååãå
¥ãã¾ãã確ãã«ãã¨ã¹ã±ã¼ãå¦çãè¡ãããã«ããã¼ã¿ãã¼ã¹ã«ã¢ã¯ã»ã¹ãã¦ãã®ã¨ãæ¤ç´¢ããã¯ã¹ã® value ã«è¨å®ãã¦ãã¾ããåè
ã¯ãSQLã¤ã³ã¸ã§ã¯ã·ã§ã³ã®å¯¾çã«ãªãã®ã§ãããã§ã¯å¾è
ã«ã¤ãã¦åç¾ã¨å¯¾çããã¦ããã¾ãã
<?php
require_once('./common.php');
$id = $user->get_id();
if (empty($id))
$id = -1;
$reqid = filter_input(INPUT_GET, 'id');
$key = filter_input(INPUT_GET, 'key');
if (empty($reqid))
$reqid = -1;
try {
$dbh = dblogin();
$sql = "SELECT todos.id, users.userid, todo, c_date, due_date, done, org_filename, real_filename, public FROM todos INNER JOIN users ON users.id=todos.owner AND (todos.owner=? OR ?) AND (todos.owner = ? OR todos.public > 0 OR ? > 0)";
if (! empty($key)) {
$sql .= " AND todo LIKE '%$key%'";
}
$sth = $dbh->prepare($sql);
$sth->execute(array($reqid, $reqid < 0, $id, $user->is_super()));
?><html>
<head>
<link rel="stylesheet" type="text/css" href="css/common.css">
<script src="../js/jquery-1.8.3.js"></script>
<title>ä¸è¦§</title>
</head>
<body>
<div id="top">
<?php $menu = 1; require "menu.php"; ?>
<div id="search">
<form action="" method="get">
<input type="text" name="key" value="<?php echo $key; ?>">
<input type="submit" value="æ¤ç´¢">
</form>
</div>
ã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ï¼Reflectedï¼ã®èå¼±æ§ã®åç¾ï¼GETï¼
å®éã«ãã¨ã¹ã±ã¼ãå¦çãç¡ãã¨ãã©ããªããããã£ã¦ã¿ããã¨æãã¾ãã
æ¸ç±ã§ãç´¹ä»ããã¦ãã XSS ã®æ»ææ¹æ³ã試ãããã¨æãã¾ãã
æ¤ç´¢ããã¯ã¹ã«ã"><script>alert(document.cookie)</script>
ãå
¥åãã¾ããããã¯ãinput ã®ã¿ã°ãçµäºããã¦ãJavaScript ã追å ãã¦ãã¾ããå
¥åããããæ¤ç´¢ãã¿ã³ãã¯ãªãã¯ãã¾ãã
Cookie ã®å
容ã表示ããã¾ãããèå¼±æ§ã®åç¾ãåºæ¥ã¾ããã
ããã ãã ã¨ãèªåã® Cookie ã®å¤ãè¦ããã ããªã®ã§ãããã¾ãæå³ã¯ããã¾ããããæ¸ç±ã«æ¸ããã¦ããããã«ãç½ ãµã¤ãã«èªå°ãããªã©ã¨ãçµã¿åããããã¨ã§ãä»è
ã®ã»ãã·ã§ã³ID ãåå¾ã§ãããããããã§ãã
ã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ï¼Reflectedï¼ã®èå¼±æ§ã®å¯¾çï¼GETï¼
ã¨ã«ãããã¨ã¹ã±ã¼ãå¦çãç¡ããã¨ãåé¡ã ã¨æãã®ã§ã対çãã¦ã¿ã¾ãã
PHP ã§ã¯ãhtmlspecialcharsé¢æ°ã使ã£ã¦ãã¨ã¹ã±ã¼ãå¦çãè¡ãã¾ããcommon.php ã« htmlspecialcharsé¢æ°ãç°¡åã«ä½¿ããã©ããã¼é¢æ°ãç¨æããã¦ãã¾ãï¼ä»¥ä¸ã¯ãcommon.php ã® eé¢æ°ï¼ããecho ãå
¥ã£ã¦ãã®ã§ãããã§ã¯ä½¿ãã«ããã§ãã
function e($s)
{
echo htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
}
htmlspecialcharsé¢æ°ã使ã£ã XSS ã®å¯¾çã¯ä»¥ä¸ã§ãã
--- todo.org/todolist.php 2018-08-16 12:03:14.000000000 +0900
+++ todo.change/todolist.php 2024-08-16 19:40:02.000000000 +0900
@@ -27,7 +27,7 @@
<?php $menu = 1; require "menu.php"; ?>
<div id="search">
<form action="" method="get">
- <input type="text" name="key" value="<?php echo $key; ?>">
+ <input type="text" name="key" value="<?php echo htmlspecialchars($key); ?>">
<input type="submit" value="æ¤ç´¢">
</form>
</div>
ã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ï¼Reflectedï¼ã®èå¼±æ§ã®åæï¼POSTï¼
次ã«ãPOSTãªã¯ã¨ã¹ãã®æ¹ãè¦ã¦ã¿ã¾ããlogindo.php ã«ã XSS ã®èå¼±æ§ãããããã§ãã
ç¾å¨ã® logindo.php ã®ã½ã¼ã¹ã³ã¼ãã§ãã
3ã¤ã®å
¥åãããã¾ãããããããã¨ã¹ã±ã¼ãå¦çãããã¾ããã
<?php
require_once './common.php';
if (! isset($_POST['userid']) || ! isset($_POST['pwd']) || ! isset($_POST['url'])) {
exit;
}
error_log("userid=" . $_POST['userid'] . ", pwd=" . $_POST['pwd'] . ", url=" . $_POST['url']);
try {
$dbh = dblogin();
$userid = filter_input(INPUT_POST, 'userid');
$pwd = substr($_POST['pwd'], 0, 6);
$url = filter_input(INPUT_POST, 'url');
$sql = "SELECT id, userid FROM users WHERE userid='$userid'";
$sth = $dbh->query($sql);
$row = $sth->fetch(PDO::FETCH_ASSOC);
$sth = null;
if (! empty($row)) {
$sqlstm = "SELECT id, userid, super FROM users WHERE userid='$userid' AND pwd='$pwd'";
$sth = $dbh->query($sqlstm);
$row = $sth->fetch(PDO::FETCH_ASSOC);
if (! empty($row)) {
$_SESSION['login'] = true;
$user = new User($row['id'], $userid, $row['super']);
setcookie('USER', serialize($user), 0, '/');
header('Location: ' . $url . '?' . SID);
} else {
e("ãã¹ã¯ã¼ããéãã¾ã");
exit;
}
} else {
e("ãã®ã¦ã¼ã¶ã¼ã¯ç»é²ããã¦ãã¾ãã");
exit;
}
} catch (PDOException $e) {
die('æ¥ç¶ã«å¤±æãã¾ãã: ' . $e->getMessage());
}
?><body>
ãã°ã¤ã³æåãã¾ãã<br>
èªåçã«é·ç§»ããªãå ´åã¯ä»¥ä¸ã®ãªã³ã¯ãã¯ãªãã¯ãã¦ä¸ããã
<a href="<?php echo "$url?" . SID; ?>">todoä¸è¦§ã«é·ç§»</a>
</body>
1ç¹ç®ã¯ã$sql = "SELECT id, userid FROM users WHERE userid='$userid'";
ã®ã¨ããã§ãããããããããã§ä»åã®ææã¯åºã¦ããã§ãããã®å¯¾çã¯ãSQLã¤ã³ã¸ã§ã¯ã·ã§ã³ã®å¯¾çã«ãªããããªã®ã§ã次åã«å¯¾å¿ãããã¨æãã¾ãã
2ç¹ç®ã¯ã$sqlstm = "SELECT id, userid, super FROM users WHERE userid='$userid' AND pwd='$pwd'";
ã§ããã¡ãããSQLã¤ã³ã¸ã§ã¯ã·ã§ã³ã®å¯¾çã«ãªãããã§ãã
3ç¹ç®ã¯ã<a href="<?php echo "$url?" . SID; ?>">todoä¸è¦§ã«é·ç§»</a>
ã§ãã¨ã¹ã±ã¼ãå¦çãããã¾ããããææãåºã¦ãªãããã§ããããã®åç¾ããã£ã¦ã¿ããã¨æãã¾ãã
ã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ï¼Reflectedï¼ã®èå¼±æ§ã®åç¾ï¼POSTï¼
åç´ã«ãã£ã¦ã¿ã¦ãåç¾ã§ãã¾ããã§ããããã°ã¤ã³ã¯ããã°ã¤ã³å¦çãçµããã¨ãTodo ã®ä¸è¦§ã¸ãªãã¤ã¬ã¯ããã¦ããããã§ããalerté¢æ°ãå®è¡ãããï¼å®è¡ããããã©ãªãã¤ã¬ã¯ãããã¦åãããªãã ãï¼ï¼ãTodo ã®ä¸è¦§ã«é·ç§»ãã¦ãã¾ãã¾ããã
ããã§ãåç¾ã確èªãããããheader('Location: ' . $url . '?' . SID);
ãã³ã¡ã³ãã¢ã¦ããããã¨ã«ãã¾ããã
å°ãå°ç´°å·¥ããã¾ããããå®éã«åç¾ããã¦ã¿ã¾ãã
ã¾ããåç¾ãããããããã°ã¤ã³ãã¦ããå ´åã¯ããã£ãããã°ã¢ã¦ããã¾ãããã°ã¤ã³ç»é¢ã«é·ç§»ããã¦ãid ã¨ãã¹ã¯ã¼ããå
¥åããBurp Suite 㧠Intercept ãæå¹ã«ãã¦ããã°ã¤ã³ãã¿ã³ãã¯ãªãã¯ãã¾ãã
ããã¨ãPOSTãªã¯ã¨ã¹ããéä¿¡ãããåã«ãBurp Suite ãæ¢ãã¦ããã¾ããPOST ãããã¼ã¿ã以ä¸ã®ããã«æ¸ãæãã¾ãããã¨ãã¨ã¯ãuserid=daisuke&pwd=useruser&url=todolist.php
ã§ãããæ¸ãæããã§ããããForwardãã¿ã³ãã¯ãªãã¯ãã¾ãã
ããã¨ããªãã¤ã¬ã¯ãã¯ç¡å¹åããã®ã§ãCookie ã®å¤ã表示ãããåç¾ãããã¨ãã§ãã¾ããã
ã¨ããããã§ãããã®ã¨ã¹ã±ã¼ãå¦çãç¡ãã£ãé¨åã«ã¤ãã¦ãOWASP ZAP ãææããããã§ã¯ãªãã§ãããåé¡é¨åã¨ãããã¨ã§ä¿®æ£ãè¡ãããã¨æãã¾ãã
ã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ï¼Reflectedï¼ã®èå¼±æ§ã®å¯¾çï¼POSTï¼
ã§ã¯ã対çãã¾ããä¿®æ£ç¹ã¯ä»¥ä¸ã§ãã
--- todo.org/logindo.php 2018-08-15 15:29:23.000000000 +0900
+++ todo.change/logindo.php 2024-08-14 22:20:21.000000000 +0900
@@ -1,5 +1,8 @@
<?php
require_once './common.php';
+ if (! isset($_POST['userid']) || ! isset($_POST['pwd']) || ! isset($_POST['url'])) {
+ exit;
+ }
try {
$dbh = dblogin();
$userid = filter_input(INPUT_POST, 'userid');
@@ -33,5 +36,5 @@
?><body>
ãã°ã¤ã³æåãã¾ãã<br>
èªåçã«é·ç§»ããªãå ´åã¯ä»¥ä¸ã®ãªã³ã¯ãã¯ãªãã¯ãã¦ä¸ããã
-<a href="<?php echo "$url?" . SID; ?>">todoä¸è¦§ã«é·ç§»</a>
+<a href="<?php echo e("$url?" . SID); ?>">todoä¸è¦§ã«é·ç§»</a>
</body>
èªåèå¼±æ§ã¹ãã£ã³ã®åå®è¡
ã§ã¯ãèªå診æãå®è¡ãã¦ã¿ã¾ãã
ã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ï¼Reflectedï¼ã® GET ã®æ¹ã¯ãææãããªãããã«ãªãã¾ãããPOST ãæ®ã£ã¦ãã¾ã£ã¦ãã¾ããããã®ã¨ãã¯ã¢ã©ã¼ããã¯ãªã¢ãå¿ãããããªã®ãã次ã«å診æãè¡ã£ãçµæãè¦ã㨠POST ã®æ¹ãææãããªããªã£ã¦ãã¾ããã
ã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ã®æ¤åºçµæã®ç¢ºèªï¼DOMãã¼ã¹ï¼
次ã¯ãã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ï¼DOMãã¼ã¹ï¼ããè¦ã¦ããã¾ãã
ã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ï¼DOMãã¼ã¹ï¼ã®èå¼±æ§ã®åæ
3件ã®ææãä¸ãã£ã¦ãã¾ãã
徳丸æ¬ã®èª¬æãèªãã¨ãXSS ã® DOMãã¼ã¹ã¯ãJavaScript ã«åå ãããèå¼±æ§ã¨ã®ãã¨ã§ããtodolist.php
ã® JavaScript ãè¦ã¦ããã¾ãã
1ã¤ç®ã®é¢æ°ãcheckOrClearAll()ãã¯ãTodoãªã¹ãï¼è¡¨ï¼ã®ã¿ã¤ãã«ã«ãããã§ãã¯ããã¯ã¹ã«åå¿ããé¢æ°ã§ãå
¨ä½ããã§ãã¯ON ã«ãããããã§ãã¯OFF ã«ãããã§ãã¾ãã
2ã¤ç®ã®é¢æ°ãcheck()ãã¯ããªããªãé£ãããã¡ããã¨èª¬æã§ãã¾ãããããã® todolist.php
ã«å¯¾ãã¦ã#
ï¼ããã·ã¥ããã¼ã¸å
ãªã³ã¯ï¼ãä»ãã¦å¼ã³åºãï¼ä¾ï¼https://example.jp/todo/todolist.php?#all
ï¼ã¨ã対象㮠Todo ããã§ãã¯ON ã«ãªãã¨ããæ©è½ã§ããä¾ã®ããã«ã#all
ã§ãã¼ã¸ãéãã¨ãç¾å¨ã®å
¨ã¦ã® Todo ã®ãã§ãã¯ã ON ã«ãªãã¾ãã
3ã¤ç®ã®é¢æ°ã¯ããã¾ãåãã£ã¦ãªãã®ã§ããããã¼ã¸å
ã§ããã·ã¥ãå¤æ´ãããå ´åã¯ãwindow.addEventListener("hashchange", check, false);
ãåå¿ãã¦ããã§ãã¯ãå¤åãã3ã¤ç®ã®é¢æ°ã¯ãæåã«ãã®ãã¼ã¸ããã¼ãããã¨ãã«åå¿ããããã®é¢æ°ããªãã¨æãã¾ãã
<script>
window.addEventListener("hashchange", check, false);
function checkOrClearAll(checkbox) {
$('input[name="id[]"]').prop('checked', checkbox.checked);
}
function check() {
var checklist = decodeURIComponent (location.hash.slice(1));
if (checklist === 'all') {
$('input[name="id[]"]').prop('checked', true);
} else {
var a = checklist.split(',');
a.map(function(id) {
$('input[name="id[]"][value="' + id + '"]').prop('checked', true);
});
}
}
$(function() {
check();
});
</script>
ç解ã¯ååã§ã¯ãªãã§ãããèªåã¹ãã£ã³ã®ææã®ããã«ãhttps://example.jp/todo/todolist.php#<img src='random.gif' onerror=alert(5397)>
ã URL ã¨ãã¦æå®ããã¨ãä»»æã® JavaScript ãå®è¡ã§ããã¨ãããã¨ã ã¨æãã¾ãã
ã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ï¼DOMãã¼ã¹ï¼ã®èå¼±æ§ã®åç¾
ã§ã¯ãå®éã«ãã©ã¦ã¶ã«ãä¸ã®ãããªã¢ãã¬ã¹ãç´æ¥è¨å®ãã¦åç¾ããã¦ã¿ããã¨æãã¾ãã
alerté¢æ°ãå®è¡ããã¾ãããåç¾ã§ããããã§ãã
ã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ï¼DOMãã¼ã¹ï¼ã®èå¼±æ§ã®å¯¾ç
対çã¨ãã¦ã¯ããã¯ãã¨ã¹ã±ã¼ãå¦çãè¡ããã¨ã«ãªãã¾ããJavaScript ã«ã¯ã¨ã¹ã±ã¼ãå¦çãè¡ãé¢æ°ã¯ç¨æããã¦ãªããããªã®ãã徳丸æ¬ã§ã¯ãã¨ã¹ã±ã¼ãå¦çãå®è£
ããé¢æ°ãæä¾ãã¦ããã¦ãã¾ãã
以ä¸ã¯ãã½ã¼ã¹ã³ã¼ãã® 4h/4h-002a.html
ã§ãã
<body>
ã¢ã¯ã»ã¹è§£æãµã³ãã«
<script>
function escape_html(s){
return s.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, "> ")
.replace(/"/g, """)
.replace(/'/g, "'");
}
var url = decodeURIComponent(location.href);
document.write('<img src="http://api.example.net/4h/4h-003.php?' + escape_html(url) + '">');
</script>
</body>
ãã®é¢æ°ã使ããã¦ããããã¨ã«ãã¾ãã
以ä¸ãä¿®æ£å
容ã«ãªãã¾ããã¨ã¹ã±ã¼ãå¦çãããå¤æ°ã使ãããã«ãã¾ããã
--- todo.org/todolist.php 2018-08-16 12:03:14.000000000 +0900
+++ todo.change/todolist.php 2024-08-16 21:09:50.000000000 +0900
@@ -27,7 +27,7 @@
<?php $menu = 1; require "menu.php"; ?>
<div id="search">
<form action="" method="get">
- <input type="text" name="key" value="<?php echo $key; ?>">
+ <input type="text" name="key" value="<?php echo htmlspecialchars($key); ?>">
<input type="submit" value="æ¤ç´¢">
</form>
</div>
@@ -89,8 +89,17 @@
$('input[name="id[]"]').prop('checked', checkbox.checked);
}
+function escape_html(s){
+ return s.replace(/&/g, "&")
+ .replace(/</g, "<")
+ .replace(/>/g, "> ")
+ .replace(/"/g, """)
+ .replace(/'/g, "'");
+}
+
function check() {
var checklist = decodeURIComponent (location.hash.slice(1));
+ checklist = escape_html(checklist);
if (checklist === 'all') {
$('input[name="id[]"]').prop('checked', true);
} else {
èªåèå¼±æ§ã¹ãã£ã³ã®åå®è¡
ã§ã¯ãèªå診æãå®è¡ãã¦ã¿ã¾ããã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ï¼DOMãã¼ã¹ï¼ã®3件ã®ææãç¡ããªãã¾ããããã ãXSSï¼DOMãã¼ã¹ï¼ã®ææã¯ãä½åº¦ãèªåèå¼±æ§ã¹ãã£ã³ããã¦ãã¨ãåºããæ¶ããããããã§ãããããå°ãé·ãç®ã§è¦ãå¿
è¦ãããããã§ãã
ãããã«
ä»åã¯ãã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ã®èå¼±æ§ã«ã¤ãã¦ãåç¾ã¨å¯¾çãè¡ãã¾ãããå½åã¯ãDOMãã¼ã¹ã®ç解ãåºæ¥ã¦ããããããããªè¨äºã«ãªã£ã¦ãã¾ããããå
¨é¢çã«æ¸ãç´ãã¾ãããããã¾ããã
次åã¯ãSQLã¤ã³ã¸ã§ã¯ã·ã§ã³ãè¦ã¦ããããã¨æãã¾ãã
ä»åã®è¨äºã«ã¯ãã¾ãé¢ä¿ãªãã§ãããwasbook ã§ã¯ãnginx 㨠apache ã使ããã¦ã¾ããä»åã¯ãapache ã®ãã´ã使ããã¦ããã ãã¾ããããããã¨ããããã¾ãã
æå¾ã«ãªãã¾ããããã¨ã³ã¸ãã¢ã°ã«ã¼ãã®ã©ã³ãã³ã°ã«åå ä¸ã§ãã
æ°æ¥½ã«ãããã¨ãããããé¡ããããã¾ãð
ä»åã¯ä»¥ä¸ã§ãï¼
æå¾ã¾ã§ãèªã¿ããã ãããããã¨ããããã¾ããã