zoomzoomzoom

解決方法の共有に主眼を置くブログ・他雑談

2017年1月からWEBエンジニアになった中途組ド文系の時間の使い方

2017年1月から3ヶ月の研修期間を含め、そろそろ1年になるので、振り返りもかねてまとめました。また、参考になる部分が何かしらあればと思って共有することにしました。「1月から研修」ってことで、中途組です。

 

目次

・スペック

・入社前の過ごし方

・環境構築

・1月~現在まで

・これはやっておいてよかったと思う事

・この後やりたいこと

 

スペック

これまでは営業畑でした。

法人営業も個人営業もやりました。海外向け国内向けやりました。

産業用のどでかいものから、ちっさい半導体などの営業を担当していました。

英語はTOEIC850くらいです。

東京の私立4年制大学の法学部でした。文系です。数学は今勉強中です。

プログラミングの経験はなかったです。

物事の仕組みや人の思考の仕組みを考えるのが好きです。行動心理学とかも読み漁っていた時期があります。詐欺とペテンの大百科とかおもしろかったです。

 

入社前の過ごし方

2016年のこと。10月以降くらいから書きます。

転職が決まり、1月からJavaの研修に参加させていただけるということが決定したので、プログラミングってどんなものなんだろうと思って学習を始めました。

ガジェットいじりがもともと好きだったので、(Iphoneの脱獄とかPSPの改造とかをやってみる程度)機械が嫌いとか、PC怖いとかいうことはありませんでした。

それまでPCとの付き合いは、エクセルのショートカット覚えまくって、周囲から「うわっ」て言われるくらいで、全くプログラミングの経験はありませんでした。HTMLもCSSもJSもかけませんでした。しかし、プログラミングによって達成できるいろいろなことの自動化にはとっても興味がありましたし、例えばエクセルのマクロとかに興味がありました。マクロは今でも全く勉強してませんが。

1月からJava漬けになることはわかっていたので、積極的にいろいろな言語を学ぼうとしました。

勉強したのはPython、C、Lisp、シェル芸(bash)です。

各言語を勉強しようとした理由は、

Python:簡潔だから。

C:「ポインタ」っていうのがみんなが詰まるポイントだって書いてあって面白そうだったし、PC使う上では避けて通れない概念だと思ったから。

Lisp:プログラミング観が変わるっていうネットの評判を見かけて興味を持ったから。

(言語ではないけど)シェル芸:環境構築いらずで手軽に実行できて、かつ強力な操作ができてコスパいいし、面白そうだったから。

 

下記を使ってインプットしました。

Land of Lisp(書籍)

みんなのPython(書籍)

Head first python(書籍)

苦しんで覚えるC(WEB&書籍)

Head first C(書籍)

シェル芸勉強会問題集(シェル芸勉強会問題一覧 | 上田ブログ)

シェルスクリプト高速開発手法入門(書籍)

 

なぜ最初から複数の言語を触ったかというと、2つ理由がありました。

1つ目の理由は、何回も「入門」を練習したかったからです。なにか始める時って、「入門」が色々な意味で一番大変だと思うんですが、その練習をするには、ある言語の入門を一通りやって、別の言語に入門して一通りやって、また別の言語で、を繰り返すのがいい練習になると考えました。おかげで「入門」の練習は結構できたと思いますし、新しい環境で何か始めるのに抵抗が無くなりました。

2つ目の理由は、(これはPythonやったあとのCやったくらいから実感してきてその後のLispとかにも繋がるんですが、)言語を比較することで、言語の癖というか気をつけなければならないところを理解しやすくなるからです。たとえば、Pythonは代入の時に型意識しないですが、Cはめっちゃ意識しなきゃならなくてめんどいな、とか。Pythonは全部オブジェクトという固まった結果を代入で受け渡していてなんかもっさりだけど、Lispは走る処理自体を代入で受け渡すことができて良さそうだなとか。記法にもいちいち細かくなります。

 

そうそう、言語を勉強する上でよく「壁」として語られるCのポインタの理解ですが、メモリやCPUなど、PCの中身がどういうふうに動いているのかというあたりの勉強を意識的にしたところ、クリアできました。

逆に言うと、CPUとメモリとストレージがどういうふうに関連しているか、(ざっくりと)理解できるまでは、他の方の例にもれず、意味不明でした。

なぜ意味不明になってしまったのか、おそらくはポインタの演算子が3種類くらいの意味のバリエーションを持っているからだと考えています。ホントわかりづらい。でも機能自体はシンプル。

 

環境構築

家にあったLets noteのCF-SX1にubuntu入れました。たしか14.04だったと思います。当時はWindowsしか家になかったんですが、「プログラマやるならLinuxやろ」と思ってデビューしやすいdistを選びました。「usbブート ubuntu」とか検索してそのとおりやればできました。

WindowsLinuxの比較ですが、開発用途で利用するなら、ファイル操作のコマンドや権限管理やパスを通す作業など、Linuxのほうが優れていると思います。

しかし利用当初は、操作や設定で、つまづきが非常に多かったです。インストール直後、まず動画が再生できません。次に音声が出力されません。作成したファイルを実行しようにも、実行できません。ディレクトリを消去することができません。テキストの編集がまともにできません。わからないことがあってもどのようにググればいいのかわかりません。パーミッション?なんじゃそれ?状態でした。でもググれば大体解決できます。Let'snoteの蓋を占めてサスペンド状態に入ったあと、復帰時に入力を一切受け付けなくなる、というバグも、良記事のおかげで助けていただけました。

power management - How can I tell Ubuntu to do nothing when I close my laptop lid? - Ask Ubuntu

※どのようにググれば良いのかわかって来るとLinuxで行う環境構築の方が楽です。ググったらだいたいどうすればいいかlinux向けの情報がたくさん出てくるし、何よりterminalで設定が完結するからです。Windowsは設定をするためのボタンがあっちゃこっちゃで大変すぎ、という印象です。

 

2017年1月〜3月

Java研修が始まりました。

最初の月はJavaの基本書で勉強して簡単なアプリを作りました。Javaではこう書くのかなるほど、という程度でした。

次の月はStrutsを勉強して簡単なアプリを作りました。アプリに機能追加する課題をこなしました。

最後の月はSpring使って簡単なアプリを集団で開発しました。作成したのは簡易なECサイトでした。

進行にばらつきがあったため、遅れをとっているメンバーの補助にも回ったり、私の端末の電源がお亡くなりになって(何故か私だけ)開発最終日の2日前に環境構築し直しなど、大変な部分もありましたが、和気藹々と楽しい研修生活でした。

この研修を通して、プログラミング観のベースを築くことができました。

「プログラミングって結局、入力受け止める変数をつくって、そこへ入力渡して、その値を利用して何らかの処理や判断を行って、結果値をまたどこかに渡して・・・以下ループなんじゃないの?」というものです。入力、処理、出力のどこに関わる話をしているのか、と分析する視点が身に付きました。

 

4月

正式に入社しました。

 

5月〜9月

初めての現場に入りました。金融系の案件でJavaアプリの保守業務案件でした。

参加当初、案件がどのように進むかが頭にインプットされておらず、「単体テスト」と「結合テスト」の違いや進め方もよくわからない状態での参加でした。

担当は主にテストエビデンスの編集とバッチ運行でした。加えて、シェル芸練習の甲斐もあって、負荷テスト用のデータ増幅作業などのバッチを書く作業も担当していました。

業務時間後は、LPIC受験のための勉強を主にしていました。

受験の理由は2つあって、

1つは、Linuxについて詳しくなりたかったから、

もう1つは、会社からの受験費補助、合格時の報奨金も出ると聞いたから。

4ヶ月でLv3まで取得しました。受験ハウツーは他記事参照。

受験を通して、アーキテクチャの理解を深めることができたと思いますし、何より、シェル芸の幅が広がった気がして楽しかったです。

受験級(合格日)

LPIC101(5月6日)

LPIC102(5月29日)

LPIC201(7月1日)

LPIC202(8月5日)

LPIC303(8月26日)

 

8月末の社員研修で「将来を一生懸命考えてみよう」というテーマでプレゼンをすることになりました。

私はセキュリティ分野にとても興味があったので、2つの目標をたてました。

「10年以内にDEFCONに日本代表として出場していること」

「セキュリティ人材の教育に携わっている」

DEFCON出場のためにやることは多いですが、Todoを潰していけば10年もあれば1回くらい行けるだろうと考えています。(本当か?)

このプレゼン発表のおかげで、IDApro購入をしてもらえるかもしれません。うれしい限りです。

IDA: Overview

 

10月〜現在

次の現場に入りました。

10月からは勉強会に積極的に参加するようになりました。(主にセキュリティ関連)

参加理由は主に2つ。

1、勉強会でセキュリティ界隈の先輩方と手を動かして一緒に学べると考えたから。

2、先輩方がどのようなインプットをしているかを知りたかったから。

勉強会に参加してわかったことは、

・勉強会で手を動かすことは少ない。(メモは別として)

・基本的に手を動かす機会では無いので、メモった知識をどのように自分で使うかまで考えないと勿体無い。

・先輩方が使っているツールや、使っている用語を知る良い機会だった。

・議論の場というより発表の場

 

2017年参加した勉強会(一部参加予定のものを含む)を列挙しました。

勉強会運営の方、発表者の方、本当にありがとうございます。

 

大熱血!アセンブラ入門 読書会

シェル芸勉強会 meets バイオインフォマティクス vol.1

脆弱性診断ええんやで(^^)

ssmjp

基礎から学べるIoT/ビックデータのための大規模分散システム基盤構築セミナー第2回ネットワーク基礎

デバッガでWordPress本体やプラグイン脆弱性を追いかけてみよう

Sphinx をはじめよう

Kubernetes ときどき Serverless -- cndjp第1回

IoTSecJP東京

第2回 ハニーポッター技術交流会

Vimconf2017

AVTOKYO

濱せっく

 「社会人のための IoT入門」 ~150分でIoTを実感するハンズオン

「社会人のための IoT実践180分」 ~ 2つの「モノ」でIoTを実証するハンズオン

 

これはやっておいてよかったと思う事

シェル芸

理由:

黒い画面で暮らすのがとても楽になったし、好きになれた。

とても強力な処理が可能。

自分のコマンド結果が出るまで一瞬なので、プログラミングの練習にちょうどいい。(Hello World出すまでに環境設定で挫折してあぼーんなんてことは絶対ない。)

便利な処理はエイリアスシェルスクリプトとしてまとめておくことができ、気軽に再利用できて捗る。

正規表現に慣れる事ができる。

 

セキュリティの勉強

理由:

多方面の知識が身につく。たとえば、コンパイラ、デバッガ、CPUとメモリの関係、アセンブラ文字コード、名前解決、パケットの構成、認証、様々なプロトコルetc.を半強制的に学べる。

16進数と2進数に耐性がつく。

 

vimの利用

理由:

vimシェル芸の際に役立つ。

プラグインがとても豊富かつ管理が簡単(vim8以降でgit submodule addを利用。)

vim ファイル名 と打つだけでプログラミングが始められるようになる。

 

この後やりたいこと

CとPythonでexploitコードを記述する練習

セキュリティツールの利用の練習

ハニーポットの運用で生データを集める

集めた生データを攻撃毎に分類しGUI上に表示する(機械学習を利用)

 

大熱血!アセンブラ入門part4メモ

part2の延長の章?という印象。様々なCPUのアセンブラを読む。

 

知っていると役に立つアセンブラ業界用語

・インライン展開:関数の中で他の関数の呼び出しをしている場合に、その「他の関数」の内容を、呼び出し元の関数の内容として埋め込んでしまうこと。呼び出し処理がいらなくなる。

・積和演算:MAC演算とも呼ばれる。積の和を求める演算の事。

・飽和演算:上限で止める演算の事。

・ベクトル演算:SIMD命令とも呼ばれる。4つの加算をへ並列で一気に行う演算。この演算をするCPUでは演算だけでなくロード/ストアも並列に行う。

プログラマ:内蔵フラッシュROMへの書き込み器のこと。

・rot:ローテート命令。ビットシフトすることではみ出したビット部分を、反対側に戻す処理を行う。

FPGAField Programmable Gate Array。ソフトウェアCPU。内部回路をソフトウェア的に組み替え可能なデバイスの事。

・ISA:Instruction Set Architecture。命令セットアーキテクチャ。利用できる命令(機械語コード)、レジスタの数、種類、割り込み方式、例外処理方式、メモリ領域の方式などを定めたもの。ISAが同じなら異なるCPU上でも機械語コードを動作させることが出来る。

・ゼロページ:アドレスが0x0000-0x00ffの256バイトの領域のみ、アドレス指定を1バイトとした小さいサイズの命令で読み書きできるというもの。

 

 

これからのアセンブラリーディングの際、覚えておくべき情報:

gcc -gオプションを利用すると、実行ファイルにデバッグ情報が付加される。

コンパイラの過剰な最適化はデバッグ時のアセンブラリーディングの際に、障害となる。(インライン処理になってしまい、ブレークが適切にできない等。)

・最適化されているソースのデバッグ時は、表示されている引数や自動変数の値を信用することはできない。

・関数末尾にjmp命令=呼び出し先の関数をそのまま返す処理だな、という推測が出来る。

・命令によっては、複数の処理を1命令で行ってしまうものもある。例えば、レジスタ復旧、スタックフレーム解放、戻り先アドレス取り出し、そこへジャンプまでを1命令で行う場合がある。

・実際のプログラムでは、演算命令は少ない。反対にデータ転送命令が多い。

・セミコロンの行(コメント行)を省いてみると読みやすくなる。

・旧来のマイコンでは、よく使われる命令を1バイトにして、機械語コードのサイズを節約していた。

アセンブラを理解するために、CPUのエミュのソースコードを読むという方法もある。

windowsの上のvmwareの上のvirtualboxのゲストOSにsshログインした話

virtualboxの上に乗せるOSは32bitしか選択肢がありませんでした。

仮想化機能がvmware上で有効になっていないために64bitを選択できなくなっていると考えております。。。解決策をご存知の方教えてくださいまし。

 

構成:

ホストOS(vmware上、"クライアント側"):Ubuntu16.04_64bit

ゲストOS(vmware上のvirtualhost上、"ホスト側"):Ubuntu16.04_32bit

virtualboxのネットワーク設定:ブリッジ接続

 

>||

#ゲスト側。deb関連のコメントを外します

vi  /etc/apt/sources.list

 

#openssh-server導入

sudo apt-get update

sudo apt-get install openssh-server

 

#PasswordAuthenticationをyesにします。

vi /etc/ssh/sshd_config

 

#ゲスト側でIPアドレスを確認。inet addrの値を確認。

ifconfig 

 

#クライアント側からパスワード接続(単なる接続確認)

ssh 接続先ホストユーザ名@接続先IPv4アドレス

exit

 

 

#パスワード認証無しで次からログインするための鍵作成から渡しまでのコマンド↓ 

#クライアント側

ssh-keygen

#Enter連打して作成完了。homeディレクトリの下に作成される。

scp 作成したキー 接続先ホストユーザ名@接続先IPv4アドレス:~/

 

#ホスト側

cd ~/

mkdir .ssh

chmod 700 .ssh

cat id_rsa.pub >> ./ssh/authorized_keys

chmod 600 ./ssh/authorized_keys

 

#クライアント側

ssh 接続先ホストユーザ名@接続先IPv4アドレス

||<

 

"初期設定"って毎日やるようなものでもないから、都度調べながらという状態になり、時間がかかってしまう。要は習熟度を高めづらいってことなんだが、なんとかならんものか。

CTF問題集問2 メモ

問題に対してのアプローチ方法をまとめた。

「事象」に対して「正しい反応とその結果」という形でまとめてみる。

====こんな感じ====

(事象を説明)→(正しい反応と結果)

改行

(事象を説明)→(正しい反応と結果)

改行

================

 

zipファイルが存在→zipファイルを解凍してls -la

ファイルが存在→「ファイルなのでとりあえず」fileコマンドで分析。実行形式を見ると32ビット実行ファイル。

・実行ファイルが存在→実行権限つけて実行してみる。usageが見えた。

・usageがわかっている→とりあえず実行してみる。flagって見えたけど、何も見えない。

・usageがわかっている→ltraceコマンドでちょっと詳しく実行してみる。実行される関数が丸見え。

・実行される関数が丸見え→じっくり動作を確認する。利用されている関数の種類、引数の使い方、引数がアドレスのどこにマッピングされているのか、が判明。

・ある程度ファイルの動作がわかった→1命令ずつ詳しくデバッグ実行していく。そういうことができる道具gdb-padaを使う。関数呼び出し部分、条件分岐、文字列あたりの内容を確認する。関数呼び出しの後のeaxレジスタの値(戻り値)はその関数が利用するために確保したメモリの先頭アドレスという前提から、calloc関数によって確保したメモリの先頭アドレスをチェックする。先頭アドレスを見つけた。

gdb-pedaについてまとめてくれているブログ

CTFのための gdb/gdb-peda 頻出コマンドのメモ - teriyaki note

・先頭アドレスが判明→そのアドレスを利用している箇所を探す。関数が利用しているだろう(atoi関数)

・atoi関数が関係している→atoiの中身を分析する。check関数が利用されている。

・check関数が利用されていることが判明→check関数を分析する。sum関数が利用されていることが判明

・sum関数が利用されていることが判明→sum関数を分析する。動作がわかった。

・sum関数の動作条件を理解→動作条件を満たす数値を創りだす。ライブラリを使う(z3)。数値を創りだした。

・数値を入れてみて動作させる→フラグをゲットした。

・フラグをゲットした→ltraceで数値をいれてみて正常終了したかどうかを確認する。正常終了した。これが正解!

 

用語:

充足問題:与えられた制約(条件)を満たす解が存在する問題のこと。

 

この問題でわかったこれからしなければならないこと:

よく使われるライブラリ関数に精通すること(calloc,malloc,atoi,exit等)

gdb,gdb-pedaの基本操作(全部知る必要はないかな。まずは基本だけ。)

ツールを手足のように使えるように集中的に時間をかける。

 

その他所感:

デバッガの最低限の操作は、1命令ずつの実行と、特定のアドレスに飛ぶ動作、特定の関数に飛ぶ動作(関数内部をディスアセンブルして表示)。

それらをした時の、スタックとレジスタの内容の観察をする。

大熱血!アセンブラ入門part3メモ

アセンブラ出力環境を構築するためのpart。

 

アセンブラ出力までの流れ。

まず、高級言語のコード→オブジェクトコード(コンパイル

次に、オブジェクトコード→実行ファイル(リンク)←一般のmakeはここまで行う。

最後に、実行ファイル→アセンブラ(逆アセンブル)←大熱血提供のmakeはここまで行う。

高級言語のコードからいきなりアセンブラを作り出すこともできるし、オブジェクトコードからobjdumpで逆アセンブルしてアセンブラを作り出すこともできるが、一旦実行ファイルを作成した後逆アセンブルしたほうが、機械語の完全なバイトコードが手に入るとのこと。

 

環境構築:

「クロスコンパイル環境を準備するのはバージョン合わせがあって大変だから全部環境用意しておいたよ。仮想マシンで楽しんでね!」との著者の有難き心意気に感謝してVMで動作させることに。HDDの容量食うけど、環境構築で困るよりいい。この本のサポートサイトから仮想マシンをゲットしてVMで起動。その際、エラーメッセージが出たが、気にせずretryを押すと無事起動できた。

 

VMの使い方:

cross/sample ココに逆アセンブルコードが欲しいC言語のファイルを入れてmakeで実行

cross/exec コンパイル後、gdbでシミュレーションしたい時に利用。make→make runで実行。

 

その他:

環境構築のみ行ったので、APIを利用しないで(自分で対応するアセンブラを書いて)Hello Worldを出力させてみよう、という企画を楽しんでいない。機をみてトライしたい。

大熱血!アセンブラ入門part2メモ

このpartのエッセンスだと感じたことをメモ。

なお、part2はpart1で培ったアセンブラの読み方を使ってとにかく読み漁ってみようみたいなpartになっていました。アセンブラを適切なコーチングのもとに読む練習をしたいと思ってこの書籍を購入した私にとっては、待っていました!というようなpartでした。

 

・下記のようなアセンブラの業界用語を知っていると幸せになれる。

レジスタウィンドウ:仮想的にレジスタ層のようなものを作っておき、関数呼び出しの際に自動的にその層を切り替える。メリットはレジスタの保存の必要性がないこと。つまりレジスタの退避のための命令をせずに済むということ。

PC:Program Counterのこと。現在実行中のアドレスを保持するレジスタ

PC相対:ディスプレースメント付きレジスタ間接の反対語?アドレス指定の方法として、"PCの"アドレス値に即値を足すという方法を採用すること。

ディスプレースメント付きレジスタ間接:PC相対の反対語?アドレス指定の方法として、"レジスタの"アドレス値に即値を足すという方法を採用すること。

PIC:Position Independent Codeの略。共有ライブラリが仮想アドレス上のどのアドレスにマッピングされても動作可能なようになっている機械語のこと。

機械語:CPUが処理可能な情報。だいたい、バイナリ値のことを指す。

VLIW:数命令を並列に同時実行する仕組み。イメージ的には、まとめてドカーンという感じ。

メモリマップドI/O:I/Oレジスタをメモリアドレス上にマッピングして、ロードストア命令によって読み書きする。

プリデクリメント:フルスタックの場合に、スタックポインタを減算してからそこに値を格納すること。

フルスタック:使用中領域の終端をスタックポインタが表すこと。要は、スタックフレーム(関数の内容等)がぎっしり詰まっているメモリの先端アドレスをスタックポインタが示していること。

エンプティスタック:フルスタックとは違って、未使用領域のアドレスを指定すること。確保していない領域にいきなり値を設定した後に、スタックポインタを減算する。(ポストデクリメント)

ダイレクトアドレッシング:低位のアドレスをアドレス直接指定でアクセスすることでまるで汎用レジスタのように扱うこと。

命令の直交性:全ての命令で全てのオペランドを扱えるようにすること。CISCの思想。

パディング:決まったバイト列で空いてしまったバイト列を埋めること。」

アウトオブオーダー実行:OoOと略される。命令列の順番をCPUが適切に入れ替えながら実行すること。

 

・ディスプレースメントを利用しないでアドレスを取得する=加算処理でアドレス指定する

・引数を割り当てられるレジスタは暗記しておいたほうが読みやすい。

・戻り値をとるレジスタは暗記しておいたほうが読みやすい。

・中途半端な即値を表現するために、0付近の値を反転させて表現することがある。

例:0x11223344を0xffeeddccをビット反転させて表現する。

・関数呼び出しの際に、スタックポインタに数字"足していたら"上方伸長。スタックポインタから数字を"引いていたら"下方伸長。

・全ての処理に共通するような処理はわからなかったら「おまじないのようなものだろう」で読み飛ばす。

・PCの値を取得したい時に、次の命令に対して関数コールしてしまう常套手段がある。アセンブラ中に直後の命令を関数コールしていたらこの常套手段を利用している。

・(言われてみれば当たり前だが)or演算は加算のような繰り上がりが存在しない。特定のビット列にのみ演算をしたい場合には有効な手段。

・「多バイト値の演算は、値は付近において、PC相対でその値をロードして行う」というやり方を頭にいれておく。しかしPC相対でロードするにしても範囲指定を行うビットは限定されているので、そんなに遠くに置くことはできない。(ロードする値は、ロードしようとする命令の近くにあるということ。また範囲指定を行うビット列がいくつかを予め知っておけば最悪虱潰しにロード値を探すことができるということ)

 

part2を経て、最低限どのような意識で読めばいいのかを理解できる。しかし本気で詳細に理解したかったら、ある程度頭に入れておくべき情報がある。私が現時点で感じているのは下記。CTFではIntelアーキテクチャがでるのかな?

・引数レジスタ

・戻り値レジスタ

・3オペランドか2オペランド

・演算方向(→か←か)

・よく使われるオペコード

・上方伸長か下方伸長か

 

次はpart3。アセンブラ出力環境を構築する、というpartらしいので、詰まったポイントだけ記述する予定。

PowerShellのペイロードによく使われているオプションのお勉強

PowerShellを利用したペイロードによく使われているオプションの意味のメモ。

参考にさせていただいた記事:

EncodedCommandによるPowerShell攻撃を暴く - Palo Alto Networks

 

-NoP ユーザプロファイルを使用しないで起動する

-sta STAモードを利用する

-NonI ユーザー向けのインタラクティブ プロンプトの作成を阻止

-W Hidden コードを実行する際のPowerShellによるウィンドウの表示を阻止

$任意の変数名 = New-Object System.Net.WebClient ファイルをダウンロードするためのWebClientオブジェクトを生成

DownloadString("任意の情報ソースURI") URIから文字列を取得

 

ついでに:

PowerShell でコンピューターのハード情報を取得する

 

その他用語:

powershell empireとは?

https://null-byte.wonderhowto.com/how-to/use-powershell-empire-getting-started-with-post-exploitation-windows-hosts-0178664/

 

この記事を書こうと思ったきっかけ:

SensePost | Macro-less code exec in msword

 

 

WordやExcelすらも開いてはいけない世の中なのか。