人生の目標

責任を負いたくない

稼ぐことに関して責任を負わずにやりたい事だけやって生きていけるようになるのが俺の人生の目標です。
責任:人や団体が、なすべき務めとして、自身に引き受けなければならないもの。
らしいです。
僕は自分一人の不利益に対するストレス耐性は強いけど他人が絡んできた瞬間ストレス耐性0になります。
自分の周りだけでも責任のない世界に行きたいのでその世界を実現できるように頑張ります。
Infosecは趣味として楽しみたいし、趣味の延長でお金になればよしくらいの気持ち。
自分は割と世間体というか社会的地位を好む傾向にあるから、セキュリティ業界ではつよつよになりたい。別に稼げなくてもいい。
そんな甘くねえって声が聞こえてきそうだけど無視して自分の道を歩む。

CTFがなぜ解けないのかについての考察

CTFが解けない😢

問題解けなすぎたので何で解けないのか考察してみた。

1. 問題の分類

「解くことができるか」という観点で問題を分類してみる。 以下の4つに分類できた。

A. 知っていて解ける問題
B. 知っているが解けない問題
C. 知らなくて解ける問題
D. 知らなくて解けない問題

そもそも解ける問題は考察の対象ではないためBとDについて掘り下げてみる。

B. 知っているが解けない問題

どういうことかというと,Write up見て特に新しい知識を得るでもなくただ試していなかったがために解けなかった問題のこと。
【原因】
失敗した試みを何度も繰り返してしまう。
😇「あれ、何でこれ通らんの?ちょっと変えてみるか!!エイ!!。。やっぱ通らねえなぁ。。」
みたいなやつ。
通らない似たような試みをしている間に時間が経っちゃって結局解けなくなる。
【TRY】
PDCAサイクルを意識する。
当たり前だけど、これができていないから無駄に時間食う。
解けても自分のためにならないからTry and Errorは害悪。
15分考えてダメだったら、全く違うアプローチを考える。
(例)
javascriptの問題だと思ったけど上手くいかなくてeasy問なのにもう30分もハマってる...(ってなる前に)
→合ってるかわからないけどとりあえずlocal proxy立てて通信を確認してみるか。

D.知らなくて解けない問題

簡単に片付けてしまえば知識不足。
しかし現代に生きる私達は知識不足をGoogle先生の力を借りることで補うことができる。
そのためDももう少し分解することができる。

1. 脆弱性を知らない/気づいていない
【原因】
知らない→完全なる知識不足。 気づいていない→知識が定着していない。 【TRY】
知らないに関しては本やネットの記事で勉強する。
気づいていないに関しては
「ある技術に対して3つ以上の要素を説明できるようにする。」
(例)
Content Security Policyを説明してくださいって言われたときに、
🙃「XSSを防ぐやつでしょ。」
以上のことが言えないような理解を避ける。
- 😎「リソースをどこから取得できるかを制限する仕組み。」
- 😎「HTTP headerで指定する。」
- 😎「CSPを利用してXSS脆弱性を潰すことができる。」
くらいまで理解することを心がけてみる。

2. 脆弱性に気づいているが解けない 【原因】
調査力がないことと,考察力がないことが原因としてあげられる。
もう少し細かく分析すると、 - 問題のヒントとなる材料を集めることができていない。

【TRY】
問題のヒントとなる材料を集めることができていない。
ヒントを探しまくる。(これ以上分解できなかった。。。)
(例)
SQL injectionは攻撃手法が豊富なため問題中にヒントとなるものが隠れている可能性が高い。 admin' -- #であったり,UNION attackなど試したけどどうも上手くいかない時は,ヒントを探してみる。
ヒントになりそうなものがあればググってみると何か見つかるかも...!!!

2021年やりたいことを宣言しとく

全体的な目標

やりたいことをたくさんやる。
去年は色々手を出しすぎて時間が取れなかったので、今年はやりたいことをやります。

2022年やりたいこと

⚠️実現可能性無視して詳細な技術については触れずに書きます。

  • 応用情報技術者試験合格
  • 情報処理安全確保支援士
  • OSCP取得
  • SecCon2021に参加
  • セキュリティ・キャンプに参加
  • 野良CTFに毎月2回以上参加
  • ネットワークまたはセキュリティ関連のツールを自作(Golangがいいなぁ)
  • webとpwnでmediumレベルの問題なら解けるぜ!!ってなりたい
  • 彼女と5回くらい旅行行きたい
  • 友達とも旅行行きたい
  • 健康に生きる!!
  • 就職先を妥協せずに決める
  • 20人以上の人と新しく出会う

まとめ

全部達成できるとは思っていないですが、できるだけ達成できるように頑張ります。
今年はやりたいことをやるのが目標なので、別のことやりたくなった時はその時の流れに任せます。
あまり無理せずkeep tryします。

2020年振り返り

前書き

2020年振り返ります

出来るようになったこと

基本的にIT技術関連について。

2019年にプログラミング学習を開始しました。

f:id:taisec:20210101095915j:plain
去年の秋
まだまだ未熟ですが初学者だっただけに学んだことも多かったように感じます。

1~3月

  • 初めてプログラミングバイトをさせてもらった
  • 初めて自分でwebアプリを作った

    感想

    全てが新しいことだったので学ぶのが大変でした(汗
    この時利用してた言語はKotlinです。 自分で実装してみて初めてこんな感じの図の意味がわかるようになりました。

    f:id:taisec:20210101102643p:plain
    こんな感じの図

4~6月

  • 基本情報レベルの知識の定着
  • CTF始めた
  • OWASP 仙台に行ってみた

感想

元々基本情報技術者試験は合格していたのですが、定着していないところも多かったので学び直しました。これが結構良かったように思います。
プログラミングを始めた頃からなんとなく情報セキュリティを学びたいなぁと思っていたのでCTFにもチャレンジしてみました。
全く解けずにwrite up を読んでもどかしい気持ちになる毎日でしたね。。。 OWASP 仙台はお世話になってる方が紹介してくれて行きました。あの頃の僕にはレベル高すぎてついていけなかったです。

7~9月

感想

バイトが忙しくて特別何かしたわけではなかったです。

10~12月

  • CTFに出まくった
  • Golangをちゃんと勉強した
  • pwnable.krをやりまくる

感想

ctfがeasy問であれば解けるようになってきました。
secconの学生向けctfチャレンジで上位15%くらいに入れたのも良かったです。
pwnを始めたのもこの時期です。
buffer overflow, ret2lib, GOT overwritte, ROP, one gadlet rce, use after free
あたりを学びました。演習が足りないのは感じているので精進します。

反省

こうやって振り返ってみるといろいろ学んだけど実績が伴ってないなと感じます。 来年は継続した学びをしながら実績を積んでいきたいと思います。

おまけ

技術関係なく学んだことについて

学び

1. 足を動かすということ

足を動かす=興味のある分野のイベントやコミュニティに参加すること。 足を動かしてから、人生を180°どころか540°変える出会いがありました。
助けてくれる方、応援してくれる方、憧れのあの人、良き友人などいい出会いがたくさんあった年でした。
そんなわけで来年も足を動かします。世界が広がるので。

2. 自律

僕は素晴らしい出会いがたくさんありました。
その結果僕はコミュニティ(や個人)に依存してしまいました。
自分の人生を自分の足で進む感覚を忘れないようにするために自律する必要がありました。 自律とは責任を持つことなのかなぁと思ってます。
怒られたくない、嫌われたくないといった感情に流されてしまったせいで自分の選択に責任を持ってませんでした。 怒られても、嫌われても自分の選択だと割り切れてからはかなり生きやすくなりました。

バイトで学んだこと

職場でも素晴らしいことをたくさん学びました。 忘れないように残しておきます。

  • 質問に定量的に答える
  • 評価できる目標を立てる
  • 理解してから手を動かす

後書き

一年の振り返りを記録するのは初めての試みでした。 拙い文章ですが読んでくれた方、ありがとうございます。
学びの多い一年だっただけにこの記事が5年後,10年後の僕や読んでくれた誰かの役に立つものでありますように。

【メモ】objdumpでPLTとGOTを表示する

やり方

PLTを表示する

objdump -dj .plt ./a.out
-jで指定したセクションだけ表示できる

GOTを表示する

objdump -R ./a.out
-Rで動的再配置エントリを表示する(よくわかっていない)

【メモ】GDBでアセンブリコード記法をAT&TからIntelに変更する

やり方

一時的な変更

(gdb) set disassembly-flavor intel

継続的な変更

.gdbinit ファイルをhomeディレクトリに作成して
set disassembly-flavor intel

Pythonで16進数文字列を扱う際のメモ書き

やりたいこと

Pythonで16進数を扱うときにbyteに変換したり文字列に変換したり,LittleEndianとBigEndianを変換したりしたい。

型変換

class 'int' → class 'bytes'

num = 0x68656c6c6f
str_num = format(num, 'x') #文字列に変換 
print(str_num) # '68656c6c6f'
bytes_num = bytes.fromhex(str_num) #bytesに変換 
print(bytes_num) # b'hello'

class 'str' → class 'bytes'

greet = 'hello'
bytes_greet = 'hello'.encode() #bytesに変換
print(bytes_greet) # b'hello'
bytes_greet_num = bytes_greet.hex()
print(bytes_greet_num) # '68656c6c6f'

Endian変換

16進数文字列は1文字1バイト
つまり1文字表すのに16進数2桁で表現する。
16進文字列の単純な並び替えではうまくいかない。

BigEndian → LittleEndian

... #変換したいbytes型の変数を用意する
print(bytes_num) # b'hello'
pirnt(bytes_num.hex()) # '68656c6c6f'
rev =bytes_num[::-1] 
print(rev) #b'olleh'
print(rev.hex()) # '6f6c6c6568'

LittleEndian → BigEndian

ほぼ上と同じなので割愛