CentOS7にkippoを導入してみた
こんにちは。今回はCentOS7にkippoを導入していこうと思います。
経緯
なぜCentOS7に導入しようかと思ったのかというと、バージョンのCentOS6に導入した際にpythonのバージョンが古くモジュールのインストールなど色々面倒で時間がかかったため、python2.7系が標準インストールされているCentOS7ならば簡単に導入できるのではないかと思いCentOS7にも導入してみました!
環境
CentOS Linux release 7.2.1511 (Core)
kippo導入に必要なライブラリなど
#yum install -y gcc python-devel python-setuptools
#easy_install pip
pip install pyasn1 pycrypto
ここでハマった。新しいバージョンのtwisted(CentOS7の場合16.0)だとkippoが動かないので古いバージョンを指定してあげる。
pip install twisted==15.2.0
作業用のsshのポート番号を22から10022に変更
Firewalldを使って10022へのsshを許可するように変更する。
#cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/service/ssh_alt.xml
エディタでssh_alt.xmlを開き、port="22"をport="10022"に変更する。
#vi ssh_alt.xml
<?xml version="1.0" encoding="utf-8"?> <service> <short>SSH</short> <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description> <port protocol="tcp" port="10022"/> </service>
設定ファイルを読み込む
firewalld-cmd --reload
設定を永続的に設定する。
# firewall-cmd --permanent --add-service=ssh-alt
エディタで設定ファイルを開きsshのポートを変更する
#vi /etc/ssh/sshd_config
#Port 22 Port10022
設定を反映させるために、sshdを再起動する
#sytemctl restart sshd
これで.....やっとポート変更でsshができると思ったが port 10022: Connection refused wwwww おそらくSELinuxの仕業かなと思いSELinuxの設定を以下のように変更。
SELinuxの設定変更
よくよく考えるとハニーポットって侵入させるものだし、SELinux無効にしてもいいのではとも思ったが無効にせずに設定してみる。
SELinuxのポリシーを変更するために、semanageをインストールする。
#yum install policycoreutils-python
待ち受けポートとして、TCPの10022番ポートを許可。
#semanage port -a -t ssh_port_t -p tcp 10022
設定を反映させるためもう一度sshdを再起動
#systemctl restart sshd
これで22から10022へ、sshのポートを変更完了です。
kippoのインストール
インストールをする前に、ポート 22 に来た通信をkippoのデフォルト稼働ポートの 2222 にリダイレクトするように再度以下のようにFirewalldを設定する。
#firewall-cmd --permanent --add-forward-port="port=22:proto=tcp:toport=2222"
kippo起動用のユーザを作成し、kippoのソースコードを取得する。
#useradd kippo #su kippo $cd $git clone https://github.com/desaster/kippo.git $cd kippo $cp kippo.cfg.dist kippo.cfg $vi kippo.cfg
後は起動するだけだが、参考記事通りに設定ファイルを編集し、ログを有効にする。
[database_textlog] logfile = kippo-textlog.log
起動
$./start.sh
これで正常に起動できます!あとはお好みでkippoの設定を弄るだけです。
前にCentOS7を使った際は、Firewalld使いづらいと思っていたけど、慣れるとiptablesより簡単ですね。直感的な操作できるように作られたみたいなので当たり前っちゃ当たり前ですが、、、一時期頑張って学んだiptablesが使われなくなるのも悲しい...
参考文献
Advent Calendar CTF 2014 write up
冬休みに入って暇だったのでAdvent Calendar CTF 2014をやってみた。
基本的にNetwork問とWeb問しか問題見ない食わず嫌い勢の私なので、とりあえず克服のために一日目から順番にやっていこうという感じで取り組んでみました。
1日目Warm up 0x41444354465f57334c43304d335f37305f414443374632303134という16進数が与えられたので、とりあえずバイナリエディタに突っ込んでみたらFLAGがでてきた。
2日目 alert man
入力フォームに任意の文字を入力してtweetボタンを押すと入力した文字列が入力フォームの下あたりにリストとして追加される問題です。問題文にCan you alert('XSS')?と書いてあるので、とりあえず典型的な<script>タグを使ったXSSをやってみたら、検知に引っかかって入力した文字が消えた。まぁこれでフラグでるわけないよなって感じで、次にタグでXSSやってみたらalert(1)がでた!!が..........flagがでないwww
冷静になってもう一回問題文みたらalert('XSS')しろとかいてあるので、1の部分を'XSS'に変更してみることに。しかしこれではalertがでなかった。とういことは ' と " がエスケープされていのかなということで<img src=x onerror=alert('XSS')>
を<img src=x onerror=alert(String.fromCharCode(88,83,83))>
に変更。alertがでてFLAGが出てきた!!
the flag is: ADCTF_I_4M_4l3Rt_M4n
3日目 listen
listen.wavという音声ファイルが渡されたが、そのファイルを再生してもなにも聞こえない。とりあえず、listen.wavファイルをfileコマンドで見てみたら、Hzが1Hzと書いてある。ここらへん怪しいなと思い、liste.wavファイルをバイナリエディタに突っ込み、ここを参考に、Hzをラジオ音質の22,050Hz (リトルエンディアンなので22 56)に書き換えたら綺麗に聞こえるようになった。
ADCTF_SOUNDS_GOOD
5日目 shooting
この問題はシューティングゲームで10000ptを獲得しろという問題なのだが、これチートしないでクリアできる人いるの??ってくらい難易度が高い。とりあえずDeveloper tool 開いてごにょごにょ値を弄ってみる。gamé.scoreの値が弄れたので、scoreを10000点にしてみたがチート検知をされフラグがでない。その後、Javascriptを見つめながら色々な値を弄って、結局コンソールでgamé.rootScene._matrix=[1111111]と入力したら、フィールドの比!?がおかしくなり相手の攻撃があたらなくなり、ミサイル連打でクリアできた。
8日目 rotate
これプログラミング力なくて、とても辛かった。自分のやり方より効率的なやり方があると思うので、あまり参考にしないで下さい。
rotate.zipというファイルが渡され、解凍すると、flag.jpg.encという暗号化されたファイルとrotate.pyというflag.jpgを暗号化するのに用いられたであろうファイルが渡されました。
とりあえず、暗号化される前のflag.jpgはjpgファイルなので、バイナリの最初の2byteは\xff\xd8
で始まる。それと暗号化した後のflag.jpg.encのバイナリの最初の8byteの\xa8\x5d\x08\x42\x3c\x93\xA7\x41
からkeyを得る。得られたkeyを使ってx*cos(key)-y*sin(key)
とx*sin(key) + y*cos(key)
の連立方程式を解きx,yの値を求めることができる。
そのx,yの値をバイナリに変換してファイルに書き出してやると複合できる。
pythonで書いた問題を解くコードはもうすこし整形してから追記で掲げようと思います。
今回私が解いた問題は以上です。相変わらずPwnとReversingはやらず嫌い(やってもたぶんできない)で問題文すら見ない状況なので、簡単な問題から手を出していこうかなと思います。またSQLiの問題は今取り組んでいる最中なので解き次第追記しようかなと思います。
SECCON2014 Online予選 英語
こんにちは!!久々の投稿というかもうブログ自体忘れかけてた__28sh__です。今回はSECCONのオンライン予選に参加してきたので、Write up を書いていきたたいと思います。
一日目はほぼ寝過ごして、お茶汲み係でお茶汲みにも行けなかった勢なので、人権が.....
[Network 100] Get the key
初日の12時くらいに起きて、まだチーム内の人が誰も解いていなかったので、解くことに。とりあえずpcapファイル渡されて、中身を見てみるとBasic 認証してる通信を発見。あとはそこにアクセスして終わりみたいな問題でしたが、flagをサブミットしようとSECCONのサイトみたら......
あれっ。誰かに解かれてね!?
という感じで自分がやっている間に誰かが解いてくれてたみたいですwww
SECCON{Basic_NW_Challenge_Done!}
[Network 300] Get from curious "FTP" sever
一問目といた後に、二度寝をしてしまい、これに取りかかったのが次の日でした。
この問題はまずftpのpathみたいなものが渡されて、そのURLにブラウザでアクセスするとftpの502エラーのダイアログが表示されていたので、それをパケットキャプチャすると、FTPのユーザ名とパスワードがそのまま書いてあるので、それを使ってFTPにログインした。
あとはLISTが使えないので変わりに以下のようにSTATを使う。
ftp> quote STAT /
-rw-r--r-- 1 0 0 38 Nov 29 04:23 key_is_in_this_file_afjoirefjort94dv7u.txt
というファイルがあることが分かり、後はgetでローカルに持ってきてファイルの中身を見るだけ。
SECCON{S0m3+im3_Pr0t0c0l_t411_4_1i3.}
ちなみにMac環境ではこのquoteを付けないとftpコマンドで繋いでいる場合は、プロトコル直打ちはできないらしい?です。ちなみにtelnetで繋ぐと直打ちできます。
今回はほぼWeb300に時間を溶かしてしまって、結局解けなくて爆発してしまいました!!あとはNetwork200ができなかったのも悔いが残りましたorz こんな感じでチームに全然貢献していないので、お茶汲み係卒業のために精進していきたいと思いますw
ブログ始めました
こんばんは。__28sh__と申します!
最近、技術系の話をブログに残すことの重要さに気づいたのでブログを開設してみました。
主にセキュリティやネットワークやCTFについての記事やメモを投稿していこうと思います。技術的には初心者レベルなので、ちょっとこれ違うんじゃないとかもっとこうしたほういいよみたいなコメントしてくれると助かります!
基本的に文才がないので温かい目で見守ってやってください。