Phosphophyllite

情報系学部に通う雑魚学生の日常・進捗・疑問ブログ

PySideのImportError(5/1 追記)

PySideを使おうとインストールした時にImportErrorが出て詰まった。

$ pip -U install PySide

でPySideをインストールした後、

import PySide

だと問題なく見えるが

from PySide import QtGui

とかやると

ImportError: dlopen(/usr/local/lib/python2.7/site-packages/PySide/QtGui.so, 2): Library not loaded: @rpath/libpyside-python2.7.1.2.dylib
Referenced from: /usr/local/lib/python2.7/site-packages/PySide/QtGui.so
Reason: image not found

って言われる。
結構出回ってるのが

$ python pyside_postinstall.py -install

を実行しろというものなんだけど、これはこれでsite-packageのPySideの中にpatchelfがないから無理と怒られた。
結局インストーラの一部が壊れているそうなのでパスを通すことで解決しました。

$ DYLD_LIBRARY_PATH=/your/path/to/pyside/libraryes
$ export DYLD_LIBRARY_PATH
参考

stackoverflow.com


そもそも自分の環境ではHomebrewで入れたPythonを使っていたのでpipで入れたPySideではうまくいってなかったのかもしれないと思い、PySideもbrewで入れたらあっさり動きました。
その場合は↓

$ brew install PySide
$ brew link --overwrite PySide

ImportError: numpy.core.multiarray failed to import


授業のファイナルプロジェクトで、PythonOpenCVでモジュール使いつつOCRでなんかしよう、ということになったので「import cv2」を試してみたら「ImportError: numpy.core.multiarray failed to import」が出てハマりました。
原因はPythonMacに元々インストールされているのものを使っていて、OpenCVはHomebrewでインストールしたものだったことだったみたい。
なのでPython自体もHomebrewでインストールしたものに乗り換えることにしました。

# install python
$ brew install python

# pythonと/Applicationsの結びつけ
$ brew linkapps python

# 今までPython2.7を使ってたので上書き
$ brew link --overwrite python 

$ brew link --overwrite python ですが、pipがconflictしたので必要でした。
brewPythonをインストールするとpipも一緒に入るので、元々pip入れてるとぶつかります。
次にOpenCVを再インストール。

# opencv再インストール
$ brew uninstall opencv
$ brew tap homebrew/science
$ brew install opencv

# conflict解消
$  brew link --overwrite numpy


で「import cv2」試してみたらうまくいったようです。
私の環境ごちゃごちゃになってそうだしそのうち整理しないといけない……。

John The RipperをMacにインストールした【OS X】

John the Ripperとは?


John the Ripperとは、パスワードクラック用のオープンソースフリーソフトです。
http://www.openwall.com/john/www.openwall.com
クラックといっても、あくまでパスワードが強固かどうかを確認するためのソフトなので悪用してはいけません。Yes Hacker, No Cracker。
授業の課題でこれ使って解いてこいと言われたのでインストールしました。
インストール方法と使い方を軽く紹介します。

1. パッケージダウンロード


John the Ripper password cracker
John the Ripper 1.8.0-jumbo-1をダウンロードします。
jumboは豊富なスクリプトが入ってるのでお得です。
一応Homebrewやapt-getにもありますが、中身が少し足りないという書き込みも見かけたので念のためサイトから直接落としました。

2. configure & make

解凍したら、srcディレクトリに移動します。

$ cd john-1.8.0-jumbo-1/src/

環境が揃っているか確認・makeします。

$ ./configure && make

ここで環境に不十分なところがあれば実行が止まるので、直してから再実行してください。
私はopensslのヘッダが参照できないと怒られたので(前記事参照)シンボリックを貼ってもう一度やったら通りました。
ちなみにインストール方法はdoc/INSTALLにも書いてあります。

3. 実行テスト

makeが済んだらrunディレクトリに移動してjohnが動くか確認します。

$ cd ../run
$ ./john --test

「--test」は実行テスト・各ハッシュ毎のベンチマークを表示します。
オプション・引数なしで実行すると使い方を確認できます。

4. 実際にクラックしてみる


実際にパスワードを破ってみます。
ファイルが中でごちゃごちゃするとアレなので一度johnのディレクトリから抜けます。

クラックされるパスワードファイルを作ります。
johnのunshadowを使います。
公式ではLinuxを前提に解説されているので/etc/passwdと/etc/shadowを使うよう書いてありますが、OS Xではshadowの代わりにmaster.passwdになります。
このshadow(master.passwd)にはroot権限がないとアクセスできません。

$ sudo john-1.8.0-jumbo-1/run/unshadow /etc/passwd /etc/master.passwd > passfile
$ john-1.8.0-jumbo-1/run/john passfile
No password hashes loaded (see FAQ)


_人人人人人人人人人人人人人人人人人人_
No password hashes loaded (see FAQ)
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
どうもパスワードファイルのハッシュフォーマットが違うと読めないそうです……。
Ubuntuで試したらうまくいったのでOSごとで違う部分があるのかもしれませんね。
これで数時間詰まりました。
John the Ripperのハッシュフォーマット↓
John The Ripper Hash Formats | pentestmonkey


なので別のパスワードファイルを作ります。
Wikiさんからお借りしました。
「user:AZl.zWwxIh15Q」と書かれたpassfileを作成します。


今回は辞書攻撃で検証します。
辞書を使うので、オプションに「--wordlist=/usr/share/dict/words」を指定して実行。

$ cat passfile
user:AZl.zWwxIh15Q
$ john-1.8.0-jumbo-1/run/john --wordlist=/usr/share/dict/words passfile
Loaded 1 password hash (descrypt, traditional crypt(3) [DES 128/128 AVX-16])
Press 'q' or Ctrl-C to abort, almost any other key for status
example          (user)
1g 0:00:00:00 DONE (2016-01-10 22:09) 16.66g/s 1102Kp/s 1102Kc/s 1102KC/s exactly..excelsin
Use the "--show" option to display all of the cracked passwords reliably
Session completed


>> example (user)
1秒足らずです。
辞書に載ってるパスワードを使うとこういうことになるのがよくわかります。


他にもシングルモード、ブルートフォース等いろいろあるのでリファレンス参照してみてください。
目の当たりにすると、改めてパスワードの管理には気をつけようと思いますね。

#include<openssl/md5.h>: No such file or directory【OS X】

gccとかで「opensslのヘッダナイヨ」って言われた。
openssl自体はHomebrewで入れてたので、ヘッダファイルを参照するディレクトリのどこかにリンクすればいいのかなと思った。

$ sudo ln -s /usr/local/Cellar/openssl/1.0.2e/include/ /usr/include/openssl

一応通った。
どっちかっていうと、/usrあたりのファイルをいじろうとした時の「Operation not permitted」にびびった。
Rootlessなんて機能ついたんですね。
Mac再起動後、リカバリーモードのターミナルで「csrutil disable」を打ってもう一度再起動すると直ります。

【ksnctf】q12 Hypertext Preprocessor

CVE-2012-1823の問題でした。
問題ページを開くと「2012:1823:20:」に続けて現在時刻等がコロン区切りで表示されます。
「2012:1823:20」でggると
CGI版PHPにリモートからスクリプト実行を許す脆弱性(CVE-2012-1823) | 徳丸浩の日記
がヒットしました。

CGIの仕様として、クエリ文字列に等号を含めない場合は、クエリ文字列がCGIスクリプトコマンドライン引数として指定されます。

"-s"がソースコード表示、"-d"が設定値(php.ini)変更オプションとして悪用されます。
とりあえず "/index.php?-s"を叩くとphpコードが表示され、「このディレクトリ内にflagファイルがあるよ」とコメントにありました。
現在時刻の後ろの4つの数字は0-59の乱数のようです。

上記サイトを流し読んで、

allow_url_include=On
auto_prepend_file=php://input

を-dにて設定し直し、一緒に渡したPHPを実行させればいいようだったのでpythonで書きました。

ksnctf Hypertext Preprocessor Writeup

実行したらとれました。
一発で通っちゃったのでちょっとうれしい。

【WeChall】Guesswork

すっごい久しぶりにWeChall開きました。
Guessworkが目についたのでやってみた。

  • Username: WeChall
  • Do not re-use important passwords!
  • I think you are not even a legit user, since you post news items :WEIRD:

ひとつ目の条件が「パスワードに誰でもわかるような情報を使わない、二度同じ言葉も使わない。」
だったのでお約束で「wechall」を送信してみたら「近いよ」と言われます。wechallという文字がキーワードなのでこれを含んでいると毎回言われます。
段々当てずっぽうが外れてくるといらいらを煽ってきます。

適当にggったWriteupに「:WEIRD:がヒントさ!『*wehcall*』で通るよ!」って書いてあったので試してみましたが間違い(少なくとも現時点では)でした。
ヒントは「:WEIRD:」ではなくて「正規ユーザーではない = bot」というところでした。
なのでパスワードは「wechallbot」です。

HTTPリクエストならurllib2じゃなくてRequestsを使え【Python】

もともとはurllib, urllib2の違いってなんだんだろう?と思ってggっていたら違う記事に行き当たりました。

urllib2モジュールはHTTPの色々をほとんど提供してくれていますが、その実APIぶっ壊れてるらしいのです。
またurllib2でリクエストを書こうとするとクッソ長ったらしくてPythonらしくないのです。
よって、HTTPリクエストにはurllib2ではなくてRequestsを使えということらしいです。
Python リクエスト」でggったらurllib2での記事がトップに出てきたのですが、どちらが一般的なのでしょうか。
Python歴長くないのでわからない。

ちなみにurllib2とRequestsでのリクエスト送信をそれぞれ書くとこうなるらしいです。Requests使おう。
(私のコードではない)

gist.github.com


そしてもともと気になっていた「urllibとurllib2の違い」ですが、リクエストに関してはutllib2の方がより機能的とか、ヘッダを指定できるとかそれぐらいのようでした。