メールヘッダのメモ


Received: from foo.bar.com (10x10x10x5.example.net. [10.10.10.5])
by mx.google.com
with ESMTPS id ab1235dedeaollld
for <test@test.com>
Fri, 26 Aug 2016 08:28:02 -0700 (PDT)
From: hogehoge@foo.net


上記のメールヘッダを以下に解説します。

Received: from string (hostname [host IP address])
by recipient host
with protocol id message ID
for recipient
timestamp
From: sender


string
通常は送信側のMTAのホスト名を表す。任意の名前を付けられるので偽造も可能

hostname
IPアドレスからのリバースDNSルックアップ(逆引き)で得られたホスト名

host IP address
送信側MTAのIPアドレス

recipient host
通常は受信側のMTAのホスト名を表す

protocol
転送に使用されたメール転送プロトコルを表す

message ID
受取人のMTA上のログファイルで検索できるようにするための転送用の固有識別子

recipient
受取人のEメールアドレス

timestamp
MTAが受信したメッセージの日付と時間

sender
送信者のEメールアドレス。任意のアドレスを付けられるので偽造も可能。

ポイント:
メールを受信した際、真っ先に目につくであろうFromヘッダで定義された送信者のアドレスは簡単に偽造できる。同様にReceivedヘッダのfrom直後のホスト名も偽造ができる。ただし()内のホスト名は受信側MTAによるIPアドレスからのリバースDNSルックアップに基づいているので、こちらのほうが情報としては信用できる*1。
なので、from直後のホスト名と()のホスト名が食い違っている場合は、送信者がホスト名を偽っている可能性がある*2。

*1.. 受信側のMTAを悪者が管理していて名前解決に関する設定やファイルをいじくられていなければですが。。。
*2.. 正当な理由があって敢えてホスト名を変更している可能性も十分ありそうですが。。。

以上。

JavaScriptのコード内容の手っ取り早い確認方法

JavaScriptの大まかなコードの内容を手っ取り早く確認したいときは、コードのキモとなっていそうな変数や関数の中身を出力させるのが有効です。
例えば以下のようなコードがあったとします。


fojbldfd = String.fromCharCode(81, 50, 57, 117, 65, 51, 74, 104, 100, 72, 86, 115, 89, 88, 82, 112, 98, 50, 53, 122, 73, 83, 66, 84, 100, 87, 78, 106, 65, 88, 78, 122, 65, 110, 86, 115, 98, 72, 107, 103, 65, 71, 86, 106, 98, 50, 82, 108, 65, 67, 69, 61).replace(/A/g, 'Z');
eval(fojbldfd);


変数fojbldfdにゴニョゴニョと値を入れてevalで実行しているようです。変数fojbldfdの中身を出力すれば何をしようとしているのか分かりそうです。変数の出力にはdocument.writeWScript.Echo(Windows環境の場合)を使います。

■document.writeを使う場合
evalの部分をdocument.writeに書き換えます。またコード全体をscriptタグで囲って.htmlとして保存します。

<script>
fojbldfd = String.fromCharCode(81, 50, 57, 117, 65, 51, 74, 104, 100, 72, 86, 115, 89, 88, 82, 112, 98, 50, 53, 122, 73, 83, 66, 84, 100, 87, 78, 106, 65, 88, 78, 122, 65, 110, 86, 115, 98, 72, 107, 103, 65, 71, 86, 106, 98, 50, 82, 108, 65, 67, 69, 61).replace(/A/g, 'Z');
document.write(fojbldfd);
</script>

保存したhtmlファイルをブラウザで開くと変数の中身が確認できます。
browse.png

■WScript.Echoを使う場合
evalの部分をWScript.Echoに書き換えて、.jsとして保存します。

fojbldfd = String.fromCharCode(81, 50, 57, 117, 65, 51, 74, 104, 100, 72, 86, 115, 89, 88, 82, 112, 98, 50, 53, 122, 73, 83, 66, 84, 100, 87, 78, 106, 65, 88, 78, 122, 65, 110, 86, 115, 98, 72, 107, 103, 65, 71, 86, 106, 98, 50, 82, 108, 65, 67, 69, 61).replace(/A/g, 'Z');
WScript.Echo(fojbldfd);

保存したjsファイルをダブルクリックするとメッセージボックスが表示されて変数の中身が確認できます。
message.png

あるいはコマンドプロンプトでcscript.exe example.jsと打てばコマンドプロンプト上で結果を確認できます。
cmdp.png

WScript.Echoを使ったほうがコードにエラーがあった場合エラー箇所を教えてくれるので、修正がしやすいです。document.writeでブラウザ表示だと、コードにエラーがあって正しい出力結果が得られ無い場合、すぐには異常に気づかないかも。
でも、出力結果をコピペしたいときはブラウザに表示させたほうが楽です。(メッセージボックスの内容はコピペできないし、コマンドプロンプト上でコピペするのは少し面倒) 状況に応じて使い分けるのが良いかと。

ちなみに最後のbase64をデコードすると"Congratulations! Successfully decoded!"となります。

以上。

Manually insert RIGHT-TO-LEFT OVERRIDE character into the filename


67c71e8e-1599-11e7-9f20-4b75e769f3a1.png

MountedDevices registry key

HKLM\System\MountedDevices

The MountedDevices subkey stores the database of mounted devices for the NTFS filesystem
https://technet.microsoft.com/en-us/library/cc978525.aspx

mounteddevices_20170404221711d0e.png

USBドライブならHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR\配下のレジストリにデバイス情報があります。

参考
http://www.forensicswiki.org/wiki/USB_History_Viewing
https://www.forensicmag.com/article/2012/08/windows-7-registry-forensics-part-6

Snort メモ

Snortの個人的メモ
随時更新予定
参考
http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node27.html
http://blog.joelesler.net/2010/03/offset-depth-distance-and-within.html

offset [どこから検索するか]
パケットのどこから検索を開始するか指定する
content:"cgi-bin/phf"; offset:4;
パケットの4バイト目以降から"cgi-bin/phf"の検索を行う

depth [どこまで検索するか]
パケットのどこまで検索するかを指定する
content:"GET"; depth:3;
パケットの1バイト目から3バイト目の間に現れる"GET"を検索する。ちなみにルール中の一番最初のcontentは自動的にオフセット0から検索されるので、offset:0と指定する必要はない。

distance [どこから次の検索を開始するか]
content Aが見つかったあと、次のcontent Bの検索をどこから開始するかを指定する
content:"ABC"; content:"DEF"; distance:1;
"ABC"が見つかったら、1バイト無視してから"DEF"の検索を開始する
/ABC[.]DEF/
「"ABC"のあとに"DEF"が現れるはずだけど、何バイト目以降に現れるかは分からない」という場合にはcontent:"ABC"; content:"DEF"; distance:0 とすれば、"ABC"のあとに何バイトあろうと関係なく"DEF"を検索します。

within [~以内を検索する]
content Aが見つかってから、何バイト以内にあるcontent Bを検索する
content:"ABC"; content:"EFG"; within:10;
"ABC"のあとの10バイト以内にある"EFG"を検索する。大体何バイト以内に次のcontentがあるか分かっている場合に有効。

PCRE あれこれ

先読み: 肯定先読みは"(?="、否定先読みは"(?!"と記述

\w+(?=;)

末尾にセミコロンがついた単語にマッチする

foo(?!bar)

末尾に"bar"が続かない"foo"にマッチする

個人的によく使うパターンは下記のようなもの

pcre:"/(?![a-zA-Z]{10})(?![0-9]{10})[a-zA-Z0-9]{10}/";

英数字が混ざった文字列10文字にマッチする。アルファベットのみで構成された10文字あるいは数字のみで構成された10文字にはマッチしない。

参考
http://www.pcre.org/original/doc/html/pcrepattern.html

| NEXT>>

プロフィール

トニヒコ

Author:トニヒコ
趣味は旅行と読書とマンガ。
将来の夢はコスモポリタン!

リンク・フリーです。

My hobby is traveling and reading(include manga).
My dream is to become cosmopolitan!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
スポンサード リンク
マクロミルへ登録
FC2カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR