読者です 読者をやめる 読者になる 読者になる

ゆずまの○○日記がシンプルでいいと思います!

プログラミング、英語、将棋、健康を中心に書いていこうと思ってます。

サーバー攻撃の基本的な手順

【4日で学ぶ】情報セキュリティマネジメント入門を勉強したので、 メモがてらアウトプットをします。 www.udemy.com

サーバー攻撃の基本的な手順

  1. ターゲットを特定する
  2. 情報を集める
  3. 間接アタックをする
  4. 直接アタックをする
  5. ハウスキーピング

1. ターゲットを特定する

2. 情報を集める

  • nmap
  • Zenmap

3. 間接アタック

4. 直接アタック

5. ハウスキーピング

  • ログの消去
  • タイムスタンプの改鼠
  • バックドア
  • Netcat
  • Cryptcat

gitのソースをデバッグ実行する〜git log , git log --oneline, git reflog~

概要

  • Eclipse CDT を起動する
  • Build All をする
  • git log をデバッグ実行する
    • git log の debugの構成を設定する
    • 設定した構成でデバッグを実行する
    • Eclipseのコンソールに、git log の結果が出力される。
  • git log –oneline をデバッグ実行する
    • git log –oneline の debugの構成を設定する
    • 設定した構成でデバッグを実行する
    • Eclipseのコンソールに、git log –oneline の結果が出力される。
  • git reflog をデバッグ実行する
    • git reflog の debugの構成を設定する
    • 設定した構成でデバッグを実行する
    • Eclipseのコンソールに、git reflog の結果が出力される。

今回やったことを動画にした。無音だけど。
gitのソースコードをステップ実行する。( source code of git step debugging) - YouTube

Build All をする

f:id:yuzuma_yuzuma_yuzuma:20170404205748p:plain

git logのdebug実行をする

git log の debugの構成を設定する

f:id:yuzuma_yuzuma_yuzuma:20170404205752p:plain f:id:yuzuma_yuzuma_yuzuma:20170404205757p:plain f:id:yuzuma_yuzuma_yuzuma:20170404205801p:plain

設定した構成でデバッグを実行する

f:id:yuzuma_yuzuma_yuzuma:20170404210123p:plain f:id:yuzuma_yuzuma_yuzuma:20170404210201p:plain f:id:yuzuma_yuzuma_yuzuma:20170404210208p:plain

Eclipseのコンソールに、git log の結果が出力される。

f:id:yuzuma_yuzuma_yuzuma:20170404210227p:plain

git log –oneline をデバッグ実行する

git log –oneline の debugの構成を設定する

f:id:yuzuma_yuzuma_yuzuma:20170404210123p:plain f:id:yuzuma_yuzuma_yuzuma:20170404210440p:plain f:id:yuzuma_yuzuma_yuzuma:20170404210447p:plain

設定した構成でデバッグを実行する

f:id:yuzuma_yuzuma_yuzuma:20170404211118p:plain

Eclipseのコンソールに、git log –oneline の結果が出力される。

f:id:yuzuma_yuzuma_yuzuma:20170404210504p:plain

git reflog をデバッグ実行する

git reflog の debugの構成を設定する

f:id:yuzuma_yuzuma_yuzuma:20170404210123p:plain f:id:yuzuma_yuzuma_yuzuma:20170404211219p:plain f:id:yuzuma_yuzuma_yuzuma:20170404211228p:plain

設定した構成でデバッグを実行する

f:id:yuzuma_yuzuma_yuzuma:20170404211302p:plain

Eclipseのコンソールに、git reflog の結果が出力される。

f:id:yuzuma_yuzuma_yuzuma:20170404211314p:plain

git logが実行されるまでの主要な流れ

  • common-main.c::main
  • cmd_main
  • handle_builtin
  • run_builtin
  • p->fn(argc, argv, prefix);
  • log.c::cmd_log()
  • コンソールに結果が出力される

git log –onelineが実行されるまでの主要な流れ

  • common-main.c::main
  • cmd_main
  • handle_builtin
  • run_builtin
  • p->fn(argc, argv, prefix);
  • log.c::cmd_log()
  • コンソールに結果が出力される

git reflogが実行されるまでの主要な流れ

  • common-main.c::main
  • cmd_main
  • handle_builtin
  • run_builtin
  • p->fn(argc, argv, prefix);
  • reflog.c::cmd_reflog
  • コンソールに結果が出力される

どこかで時間作って、興味あるコマンドの実体をみていきたいですね。

gitのソースコードをステップ実行する〜環境構築編〜

gitのソースコードをステップ実行する〜環境構築編〜

環境

Eclipse CDTのダウンロード

http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/neon3

Java8のインストール

なんか証明書が必要っぽかった。

apt install -t jessie-backports  openjdk-8-jre-headless ca-certificates-java
vi /etc/apt/sources.list
deb http://ftp.de.debian.org/debian jessie-backports main 
apt-get update

ここにインストールされた

/usr/lib/jvm/java-8-openjdk-amd64/bin/java

eclipse.iniを編集する

vmargsの上に、以下を追記した。

-vm
/usr/lib/jvm/java-8-openjdk-amd64/bin/java

eclipse neon3がここで起動する

gdb, make , gccのインストール

apt-get install -y gdb make g++

makeとg++はすでにインストールされていた。

gitのインストール

apt-get install -y git

gitのリポジトリを複製する

// 一般ユーザーで実行する
cd /home/yuzuma/develop
git clone https://github.com/git/git.git git_source

gitをコンパイルするために必要なものをインストール

apt-get install -y libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev

複製したリポジトリEclipse CDTにimportする

  • File > New > Makefile Project with existing code
  • Toolchain for Indexer Settings

gitのソースコードデバッグする。

  • Project > Build All
  • diff.c を開いて、Run > Debug を実行する
  • ステップ実行できるようになる

総括

CLionでやってみたかったが、CmakeListというもので、
Makefileとは別だったため、Eclipse CDTを使った。
C言語ソースコードをステップ実行する知識がなかったため、2日間かかったけど、
ステップ実行できてよかった。
引数を与えたりして、本格的に任意のコマンドをステップ実行したい。

— 追記:20170404
引数を与えて、任意のコマンドをステップ実行できた。
gitのソースをデバッグ実行する〜git log , git log –oneline, git reflog~
http://yuzuma-yuzuma-yuzuma.hatenablog.jp/entry/git-source-debug

debian の初期設定

debian jessieをGUIインストール直後にやったこと。

apt-transport-https のインストール

http://ftp.jp.debian.org/debian/pool/main/a/apt/apt-transport-https_1.0.9.8.4_amd64.deb

dpkg -i apt-transport-https_1.0.9.8.4_amd64.deb

vimのインストール

vi /etc/apt/sources.list
deb http://security.debian.org/debian-security jessie/updates main 
apt-get update

mozcのインストール(日本語環境)

vi /etc/apt/sources.list
deb http://ftp.de.debian.org/debian jessie main 

aptitude -y install fcitx-mozc
reboot

https://packages.debian.org/ja/jessie/amd64/fcitx-mozc/download

Microsoft Visual Studio Code のインストール

dpkg -i code_1.10.2-1488981323_amd64.deb  

Google Chrome のインストール

aptitude -y install libappindicator1
dpkg -i google-chrome-stable_current_amd64.deb 

02_数値型を操作する

  • Pythonでは数値もオブジェクトであり、メソッドを持っています。
  • 数値のメソッドを呼び出すことはほとんどありません。
  • 16進数の表記
  • 先頭に「0」をつける
  • そのあとに「x」を記述する
  • 0から9、a〜fまで
    • 16進数は、数値型
    • hex()
      • 16進数相当の文字列を得る
    • int()
      • 16進数相当の文字列を数値に変換する
      • 第2引数に、基数として「16」を渡す。
  • 2進数の表記
  • 先頭に「0」をつける
  • そのあとに「b」を記述する
  • 0か1
    • bin()
      • 10進数の数値を2進数相当の文字列に変換する
    • int()
      • 基数は「2」を渡す
  • 8進数の表記
  • 先頭に「0」をつける
  • そのあとに「o」を記述する
  • 0から7までの数値を続ける
    • oct()
      • 数値を8進数相当の文字列に変換するため
    • int()
      • 基数は,8
  • ビット演算子
# coding: utf-8

# In[1]:

# 16進数のリテラルを入力
0x1ff


# In[2]:

# 10進数の数値を16進数相当の文字列に変換
hex(1023)


# In[3]:

# 16進数相当の文字列を数値に変換する
int("0x100", 16)


# In[4]:

# 2進数のリテラルを入力
0b1000


# In[5]:

# 10進数の数値を2進数相当の文字列に変換する
bin(1023)


# In[6]:

# 2進数相当の文字列を数値に変換
int("0b1111111111", 2)


# In[7]:

# 8進数のリテラルを入力
0o1777


# In[10]:

# 10進数の数値を8進数相当の文字列に変換
oct(1023)


# In[11]:

# 8進数相当の文字列を数値に変換する
int("0o1777",8)


# In[ ]:



01_オブジェクトとしての組込型

  • メソッドとは
    • データに紐づいて、データに対する処理や操作をする関数のことを言う。
    • メソッドの呼び出しの記法
      • データ.メソッド名(引数1, 引数2, …)
  • set型とディクショナリ型(変更不可能なデータのコレクション型)
    • set型、ディクショナリ型はともに、複数の要素を順番なしに保存することができるデータ型。
    • 変更不可能

リストで使える演算子、関数、メソッド

  • 演算子や関数
    • +
    • *
    • sum()
    • len()
    • max()
    • min()
  • メソッド
    • index()
    • reverse()
    • sport()
    • pop()
    • remove()
    • append()
    • extend()
メソッド 解説
count() ある要素がリストにいくつ含まれているか数える
reverse() リスト要素の順番を逆にする
sort() リスト要素をならべかえる

06_関数の応用

  • 関数にデフォルトの引数を定義する
  • 引数のキーワード指定
    • 引数はカンマで区切って、複数指定できる
    • 順番には大事な意味がある。
    • データの種類(データの型)
    • あえて順番を入れ替えて呼び出す方法がある。
      • 関数に引数を渡す時、引数の名前を明示する。
    • 1つだけデフォルト値以外の引数を指定したいときに、キーワード指定を使うことがある。
  • 関数とローカル変数
  • 関数の中と外で同盟の変数を定義すると、別の変数として扱われる
  • 関数内からは外の変数が見えるが、外から中は見えない
  • 関数内世界のような機能を、「名前空間」や「ネームスペース」と呼ぶことがある
# coding: utf-8

# In[4]:

#  関数にデフォルト引数を定義する
def fizzbuzz(count=100, fizzmod=3, buzzmod=5):
    for cnt in range(1, count+1):
        if cnt%fizzmod == 0 and cnt%buzzmod == 0:
            print("FizzBuzz")
        elif cnt%fizzmod == 0:
            print("Fizz")
        elif cnt%buzzmod == 0:
            print("Buzz")
        else :
            print(cnt)

fizzbuzz()


# In[5]:

# 引数のキーワード指定
## class int(x, base=10)
## https://docs.python.jp/3/library/functions.html#int
int(base=2, x="1010")


# In[6]:

# 関数の外側で定義した変数を関数内で使う
local_var = 1

def test_func(an_arg):
    local_var = an_arg
    print("test_func()の中", local_var)

test_func(200)
print("test_func()の外", local_var)


# In[ ]: