エクセルの操作方法(最低限編)
windows利用していたら、必ず使うソフト。
知らないとマウスでかちゃかちゃやるハメになって不便と思うコマンドをまとめました。
これ以外でも「おまえこれ知らないでエクセル使ってたの?え?どうやって仕事してるの?」という操作方法知っていたらコメントください。
Ctrl押しながら押すキー:効果
1:セルの設定
p:印刷
a:全選択
s:セーブ
f:文字列検索
h:文字列置換
+:今日の日付を表示
;:現在時刻を表示
z:一つ操作を戻す
x:切り取り
c:コピー
v:ペースト
b:文字を太くする
矢印:その方向に障害物(値が入ったセル)までワープ
home:A1セルに戻る
pageup:左のシートに移動する
pagedown:右のシートに移動する
alt押した後押すキー:効果
fa:名前を付けてファイルを保存する
hba:選択したセルに格子線をひく
hbt:選択したセルの周囲に太線をひく
hbn:選択したセルの罫線を消す
hhn:選択したセルの塗りつぶしを消す
wav:エクセルウィンドウを横に並べる
wff:選択した行でスクロールを固定する
hac:選択したセルを中央揃えする
hmm:選択したセルを結合する
hmu:結合を解除する
Ctrl+Shift押しながら押すキー:効果
l:選択した行をリストにする
矢印:行や列を複数選択する
なんだかんだエクセル便利ですよね。
CTF問題集問1 メモ
考え方と具体的分析操作(★は自分が慣れていない考え方):
どんなファイルなんだろう。file Selfreferenceで調べてみよう。
32bitで動作する実行ファイルだ。今私が利用しているのは64bitのubuntuだから32bitファイルを実行できるようにする準備をしなければ。sudo apt-get install gcc-multilib g++-multilibを実行しよう。
今度はファイルの中に含まれている文字にヒントはないかを調べよう。
strings Selfreferenceを実行。すると、このファイルに含まれる関数とその関数が認識する引数(オプション)が表示された。
★試しに関数を動作させよう。実行形式を与えて実行。
結果、使い方が出てきた。ご丁寧にhexとか書いてあるから16進数(hexadecimal)を使って暗号化されているということも分かった。
★解析ツール(radare2等)を利用して、暗号化を行う関数を特定する。なぜなら今回の問題では暗号化関数は実装されているが、復号化関数は実装されていないから。つまり、暗号化の実装から、復号化の実装を推測しなければ(関数を自作するときの参考にしないと)いけないから。←自分で関数作ってしまうという考え方。
参考:
radare2についてのブログ
使えれば良いやradare2(静的解析編) - 拾い物のコンパス
radare2公式本
radare2の今回の流れを整理。
関数の一覧表示→main関数の逆アセンブル結果表示→暗号化関数のアドレス特定→
radare2 ./Selfreferenceして
aa
afl(関数の一覧表示)。
pdf @ main(main関数の逆アセンブル結果表示。@の後ろに関数名指定)
ltrace ./Selfreference -encrypt abcd (共通ライブラリ関数をトレースfor暗号化関数特定)
→この段階で「文字列比較の後に関数実行」という流れが把握できるから、この文字列の位置がわかれば関数はその近くにあるやろーってことがなんとなく推測できる。つまり関数の位置をダイレクトに把握しにいかなくても、オプション文字列がどこにあるか、もしくは比較関数どこにあるのかを把握すれば(それらのアドレスを見つけられれば)関数の位置わかるやんという考え方ができる。
まずオプション文字列を参照するアドレス探してみる。別端末でrabin2を実行。尚、この操作を別端末じゃなくてtmuxで別ウィンドウをだしてやろうとしたんだけど、tmuxでは画面スクロールが億劫な感じだったので素直に別端末起動して実行するのがお勧め。tmuxでのスクロールのコツがあったらコメントください。
rabin2 -z ./Selfreference
rabin2で得られた情報を基にradare2のaxtコマンドをつかってそのアドレスを参照しているのはどのアドレスか(どの関数か)というのを把握。
axt アドレス
===================
→したいのですが、私の環境では実行不可でした。arというコマンドと衝突(conflict)が発生します。
my実行環境:
Linux ubuntu 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
radare2のバージョン:
0.9.6-3.1ubuntu1
===================
得られた情報を基にそのアドレスからさらに詳細情報を取得してみます。
s アドレス
pd
「レジスタに文字列入れてる処理」と「比較処理がどこにあるか」を特定すること。そうすればその後に実行されてる関数がずばり「暗号化処理」。暗号化処理候補が見つかったところで、それらを一つ一つ見ていく。
s 関数名(←関数名では飛べなかった。※追記:radare2最新版では飛べました)
===閑話休題===
→関数内の処理に飛ぶことができない。ここから先は、radare2のバージョンを最新にしてから再トライする。(※追記済)
sudo apt-get purge radare2
適当にmkdirしてcd
git clone radare2公式repoURL(結構長い時間がかかる)
sudo sys/install.sh(便利ですね)
===
表示された情報から関数の実行内容を読み取る。特に「利用関数のアドレス」と「関数及びオプションのアドレス遷移」を理解することに努める。そして、理解できたらC言語でそれを復元する。
もう一つの関数も調べる
s 関数名
処理内容を理解できたら、それをC言語で復元してみる。インラインアセンブラの練習が必要。
ここまで理解できたらあとは復号化関数を作成する。
その他この問題を通して理解したこと。
movzx:代入する値が代入先レジスタの格納領域より小さい場合にゼロ拡張して入れてくれる便利命令。
ゼロ拡張:値の同一性を保ったままにする処理。空いてる領域にゼロを入れる。
謎:
・radare2コマンドのうち、axtを利用しようとすると、下記メッセージが表示され利用できない。
XXX: This command conflicts with 'ar'
←radare2のアップデートで解決
・fopen関数のアドレスがなぜ教科書で示されたアドレスなのか理解できない。
・calloc関数はどこで実行されたのか
・なぜ”排他的論理和をとった”ということになるのか。要排他的論理和の理解。
dockerのinstall方法for Ubuntu16.04LTS
CTFの練習問題を解く前提として、dockerをインストールしてください、って軽く書いてあったんですが、どうしてもdocker buildの操作がうまくいかない。その苦しみの軌跡が誰かの役に立つかなと思い筆を取りました。
懸念点1:実行結果のstep 1/15のところ、ubuntu:15.10ってなってるけど、私が利用しているubuntu16.04とバージョン違ってるのは大丈夫なのでだろうか。
懸念点2:wily-updatesとかwily-securityとか wily-*ってなってるけれども、最新版のdockerではxenialを取ってくるはずなのになんでwilyをとってこようとしているんだろうか。これが原因何じゃなかろうか。
root@bhjp1002-CF-SX1WEUHR:/etc/apt/sources.list.d# docker --version
Docker version 17.05.0-ce, build 89658be
root@bhjp1002-CF-SX1WEUHR:~# cd /usr/local/docker \
>
root@bhjp1002-CF-SX1WEUHR:/usr/local/docker# docker build -t ctf_loginme ./
Sending build context to Docker daemon 22.53kB
Step 1/15 : FROM ubuntu:15.10
---> 9b9cb95443b5
Step 2/15 : RUN apt-get -y update && apt-get -y upgrade
---> Running in 27fa6982074d
Ign http://archive.ubuntu.com wily InRelease
Ign http://archive.ubuntu.com wily-updates InRelease
Ign http://archive.ubuntu.com wily-security InRelease
Ign http://archive.ubuntu.com wily Release.gpg
Ign http://archive.ubuntu.com wily-updates Release.gpg
Ign http://archive.ubuntu.com wily-security Release.gpg
Ign http://archive.ubuntu.com wily Release
Ign http://archive.ubuntu.com wily-updates Release
Ign http://archive.ubuntu.com wily-security Release
Err http://archive.ubuntu.com wily/main Sources
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily/restricted Sources
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily/universe Sources
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily/main amd64 Packages
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily/restricted amd64 Packages
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily/universe amd64 Packages
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily-updates/main Sources
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily-updates/restricted Sources
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily-updates/universe Sources
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily-updates/main amd64 Packages
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily-updates/restricted amd64 Packages
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily-updates/universe amd64 Packages
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily-security/main Sources
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily-security/restricted Sources
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily-security/universe Sources
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily-security/main amd64 Packages
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily-security/restricted amd64 Packages
404 Not Found [IP: 91.189.88.162 80]
Err http://archive.ubuntu.com wily-security/universe amd64 Packages
404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily/main/source/Sources 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily/restricted/source/Sources 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily/universe/source/Sources 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily/main/binary-amd64/Packages 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily/restricted/binary-amd64/Packages 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily/universe/binary-amd64/Packages 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily-updates/main/source/Sources 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily-updates/restricted/source/Sources 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily-updates/universe/source/Sources 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily-updates/main/binary-amd64/Packages 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily-updates/restricted/binary-amd64/Packages 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily-updates/universe/binary-amd64/Packages 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily-security/main/source/Sources 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily-security/restricted/source/Sources 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily-security/universe/source/Sources 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily-security/main/binary-amd64/Packages 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily-security/restricted/binary-amd64/Packages 404 Not Found [IP: 91.189.88.162 80]
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/wily-security/universe/binary-amd64/Packages 404 Not Found [IP: 91.189.88.162 80]
E: Some index files failed to download. They have been ignored, or old ones used instead.
The command '/bin/sh -c apt-get -y
こんなふうなコマンド結果になる。
ちなみに/etc/apt/souces.listの記述内容はこんな感じ。
root@bhjp1002-CF-SX1WEUHR:/usr/local/docker# cat /etc/apt/sources.list
###### Ubuntu Main Repos
deb http://archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse
###### Ubuntu Update Repos
deb http://archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse
deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable
# deb-src [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable
# deb-src [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable
ついでに、/etc/apt/sources.list.d/docker.list の記載内容はこれ。
deb https://apt.dockerproject.org/repo ubuntu-xenial main
進展があったら追記いたします。
これが原因じゃない?っていうのあったらコメントで教えてくださいこのとーりm(__)m
追記(20170924):
上記懸念点1と2はだいたいあたっていた。docker buildコマンドを実行した結果が思わしくなかったため、docker buildが参照するファイルってどれだろうと調べると、Dockerfileというファイルを見に行っていることが判明。
そのファイルのFROMから始まる行には15.10と記載が。。。あれ?どっかでみたことあるぞ。。。
試しに16.04にすると、、、エラー。
試しにバージョンの数字は消してubuntuだけにしてみると。。。成功!!と思いきや、今度は、
'ascii' codec can't decode というメッセージが出てきて、localeを変更しないといけない様子。私は当初ja_JPになっていたので、en_USにしないといけないと思って、localeの変更に勤しみました。設定変更を反映させるためにrebootもしましたよ。はい、意味ありませんでした。同じエラーが私をあざ笑うかのように出ますよ。もう少し調べていくと、c.UTF-8ならいけるとの記事があったので、Dockerfileを再編集し、実行。
すると、
Step 19/25 : RUN bash -c "mysql_install_db --datadir=/tmp --basedir=/tmp --user=mysql"
---> Running in eb6e9af49886
2017-09-23 17:23:23 [WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize
2017-09-23 17:23:23 [ERROR] Can't locate the server executable (mysqld).
The command '/bin/sh -c bash -c "mysql_install_db --datadir=/tmp --basedir=/tmp --user=mysql"' returned a non-zero code: 1
→もう疲れた。。。でもmysql_install_db is deprecated. Please consider switching to mysqld --initializeってことだから、ココの記述をかえれば。。。で変えてみたけど、今度は、
2017-09-23T18:02:12.403947Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2017-09-23T18:02:12.404022Z 0 [ERROR] Aborting
とのこと。
(更に追記)
directoryにすでにファイルが入っていると言われてしまうので、強制的にクリアできるように下記のコマンドを実行するようにファイルに記述。
RUN rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql /var/run/mysqld
エラーは出ずにdocker imageは作成できるようになった。
しかし、docker runしたところ、下記のメッセージ。
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!
→socket接続ではなくtcp接続で試すことに。結果、3歩進んで2歩下がる状態。ログは下記。
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to MySQL server on 'localhost' (99)'
Check that mysqld is running on localhost and that the port is 3306.
You can check this by doing 'telnet localhost 3306'
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
他に試してみようと思っていること:
1.編集前のDockerfileの状態に戻す(エラーがでないように)
2.mysqlとアプリサーバを別々のimageにして作成してみる。(教科書はそのような指示を明確にしていないので、別々にimage作る必要は無いと思うが)
利用するdockerコマンド
docker build -t ctf_loginme_rv3 ./
docker run -it -p 8080:80 ctf_loginme_rv3
現在のDockerfileの内容
root@bhjp1002-CF-SX1WEUHR:/usr/local/docker# cat Dockerfile
FROM ubuntu
RUN apt-get -y update && apt-get -y upgrade
RUN apt-get -y install software-properties-common
RUN LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php
RUN apt-get update
RUN apt-get -y install build-essential
RUN apt-get -y install wget
RUN echo "mysql-server mysql-server/root_password password SeC-0n4b" | debconf-set-selections && \
echo "mysql-server mysql-server/root_password_again password SeC-0n4b" | debconf-set-selections && \
apt-get -y install mysql-server
RUN apt-get -y install apache2
RUN apt-get -y --allow-unauthenticated install php5.6
RUN apt-get -y --allow-unauthenticated install php5.6-mysql
RUN apt-get -y --allow-unauthenticated install php5.6-mcrypt
RUN apt-get -y --allow-unauthenticated install php5.6-dev
RUN apt-get -y install curl
RUN apt-get -y install vim
RUN a2enmod rewrite
RUN bash -c "echo \"[mysqld]\nsecure-file-priv = '/usr/local/sqli/pub/'> /etc/my.cnf\";mkdir -p /usr/local/sqli/pub"
RUN bash -c "chown www-data:www-data /usr/local/sqli -R"
RUN rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql /var/run/mysqld
RUN bash -c "mysqld --initialize --datadir=/var/lib/mysql --ignore-db-dir=lost+found --explicit_defaults_for_timestamp --user=mysql"
ADD ./apache2.conf /etc/apache2/apache2.conf
ADD ./000-default.conf /etc/apache2/sites-enabled/000-default.conf
ADD ./sql.sql /tmp/sql.sql
ADD ./index.php /usr/local/sqli/pub/index.php
CMD ["bash", "-c", "export APACHE_LOG_DIR=/tmp/; /usr/bin/mysqld_safe & sleep 3 | /usr/bin/mysqladmin -h localhost --protocol=tcp -u root password 'SeC-0n4b' & /usr/sbin/apache2 -D FOREGROUND"]
EXPOSE 80
tmuxに惚れたって話(激遅
シェル芸(awk)
「こういうデータを持ってるんだけど、こういう風に加工したいな」という願望は、大層なプログラムを作らなくても実現できる。
シェル芸(ワンライナー)でデータ加工をよくしています。
シェル芸はコマンドをひたすら覚えるのではなく(覚える人もいるのかもしれませんが自分にはムーリーマン(ムーニーマン的なテンポで))、どういう風な考え方でそれを書いたのか、その書き方を採用したのかという頭の働かせ方の方が大事だと思うんです。
というわけでシェル芸の王様(と勝手に最近おもっている)awkコマンドを使う上での頭の働かせ方of mineを書きます。読んでね。
1.awkはパターンとアクションでできている。どちらかがあればいい。
2.まずファイル各行の情報を使って連想配列を作ってしまって、END句で一気に連想配列を使って処理するという考え方。
3.a[$1]=$2 という記述で、連想配列キーを無理矢理第一フィールドの文字に設定し、かつ代入も同時におこなう。
4.#! /usr/bin/awk -f をスクリプト作成時に書いておけば、実行時にファイル名を引数に指定できる。
5.awk整形→他コマンドで整形(sortとか)→awk整形 のように他コマンドを挟んでもよい。
6.特定の文字列の後にスペースを入れたいなら、printfの利用を考える。例)printf("%s ", $0)
7.不要なフィールドは$1=""のように空文字で上書きするという考え方。
awk最高。追記あればこの記事に書きます。
SECCON for Beginners参加します(おそらく)
10月7日に開催予定のSECCON for Beginnersという集いに参加しようと考えています。
目的:
・独学でわからなかった箇所を教えてもらえる師匠を見つける。
・DEFCON出場を本気で狙っている同士・師匠を見つける。
・セキュリティ事始めを体験する。
約1か月あるので、それまで一生懸命お勉強して不明点を溜めまくりたいでつ。
解析楽しい。
追記(更新日:20170920)
参加申し込みしました。抽選に受かった場合、現地でどうぞよろしくお願いいたします。
バイナリ解析 問題を解く2(書評)
バイナリ解析でネット検索していると、下記の本に出会った。
萌え萌え感満載の本で、まさに私が読みたかった本であった。
変な誤解をされそうなので、もう一度表現しなおすと、
萌え萌え感満載の本で、内容はレジスタの利用方法、処理の追いかけ方、処理を変更する方法が詳細に解説されている、そういった意味で、まさに私が読みたかった本であった。また、細かいところではあるが、ESIやEDIといったレジスタは、なぜ他のレジスタのようにHigh,Lowと区切って使われないのか、という部分など、基礎事項・基礎単語の補足情報も豊富に載っておりとても勉強になった。
実際にこの本の解説に従ってデモソフトを、アセンブラを解読しながら、自分の思うように操る体験をすることができた。もう一度この本を復習し、「本を見ないで」OllyDbgを操れるようにする。
この本で初めて知ったこと:
・WebTrap:特定のソフトがインターネットにアクセスするのを遮断する機能。
・ロジックボム:条件が整うと発動するウィルスや破壊ソフトのこと。
・クラックするのに一番大切な心構えは「一番脆いところに着眼すること」であって、全体を理解しようとすることではない、という事。
・クラックの基本は条件分岐を書き換えること。
・SYSENTERとSYSCALL命令は戻りアドレスを保存しないで制御が移る
・RETNとRTNは同じ
・RET 4:RETするときにESPのアドレスを+4する。
・Shift-JISとUnicodeの見分け方:利用しているAPIの末尾の文字がAだったらANSI(Shift-JIS)、WだったらUnicodeのことらしい。文字列検索をする前に文字コードを適切に設定する際に参照する。
・.textセクション:プログラムコード領域
・.rdata, .dataセクション:文字列置き場
・.rsrc:アイコン等置場
・Ollydbgでハードウェアブレークポイントを利用する時には、DR0~DR7というデバッグ用のレジスタがあり、これを利用するためコード自体が変更されない。
・hooking:インポートセクションの中から任意のWindowsAPIの実行アドレスを特定してそれを書き換えてしまうことで、自分の実行したい処理を介在させること
・DLLInjection,function interception:呼び出し先のモジュールとそっくりのモジュールを作り出して、そのモジュールを使わせてしまうこと。またその結果処理内容を傍受すること。