xss-gameで遊んでみた

久々の投稿です. ShownetやHardening1010cfなどいろんなイベントに参加させていただいて 大変充実してます. そしていつの間にか社会人2年目になっていました. さて, タイトルの通り 勉強会に参加した際に, xss-game(下記のサイト)を教えてもらったので 遊んでいました. https://xss-game.appspot.com この後からはネタバレになるかもしれませんので,ご注意を. 解答を載っけていますが, 解き方等は正確でない可能性があります. その辺はご了承くださいましm(_ _)m Level1 何にも考えずに フォームに<script> alert(1); </script>入れちゃったら攻撃できた. Level2 ヒントみたらscriptタグは使えないらしい. br,i,spanタグあたりは使えるっぽい. もしかしたらaタグあたりも使えるんでねーかって予測して 実際にaタグ入れてみたらちゃんとリンクになっていた. aタグのhrefにjavascript入れたら実行できたなあと思い下記を入力して 実行して, リンクをクリックしたら攻撃できた. <a href="javascript: alert(1);"> test </a> Level3 frameの後の数字でイメージの切り替えをやっているみたい. chooseTabをみてると, imgタグの中に引数のnumを直接入れて jqueryの.html使ってタグを書き出している. なので, numにscriptを埋め込んだタグが入れば多分いけるんじゃないかなあと. で, URLのシャープの後に'<img src=. onerror="alert(1)"/>'と入力したらOKかなと思いやってみたら攻撃成功. Level4 ボタンを押した時の挙動がonload="startTimer('{{ timer }}');"になっているので, onload="startTimer('');alert('1');" みたいなのを作れたら多分行けるんじゃないかと思い フォームに');alert('1を入力したら攻撃成功. Level5 signup.htmlのソースを見ると <a href="{{ next }}">Next >></a> と書かれていた. {{ next }} は URLのパラメータに next=confirmと書かれていて、実際にWebを見た際は <a href="confirm">Next >></a> となる. nextのvalueがそのまま入るので、valueをいじればいけそう. hrefはjavascriptのコードも実行可能なので URLを https://xss-game. »

jqコマンド練習

jqコマンドは圧縮されたjsonを整形してくれる便利なツールです。 もちろん必要なところだけを抽出したりなどもできます。 いつもはjsonの整形くらいにしか使ってなかったのだけれど、いろいろ使えそうだったので遊んでみます。 チュートリアルはjqの公式にあるのでまずはそこから。 Tutorial 公式だとcurlで都度responseを返してますが、 レスポンスを待つのが面倒なので一旦ファイルに書き出してそこを読むようにします。 curlで取得してるのは、githubの最新5件のcommit logです。 $ curl 'https://api.github.com/repos/stedolan/jq/commits?per_page=5' > json_response 下記のように使います。(行数多いので割愛) $ cat json_response | jq 最新のコミット分だけ取得する。 鉤括弧中の数字をインクリメントすれば2件目や3件目を取得できる。 $ cat json_response | jq .[0] { "sha": "0b8218515eabf1a967eba0dbcc7a0e5ae031a509", "commit": { "author": { "name": "Nicolas Williams", "email": "nico@cryptonector.com", "date": "2016-03-21T22:43:01Z" }, "committer": { "name": "Nicolas Williams", "email": "nico@cryptonector.com", "date": "2016-03-21T23:59:52Z" }, "message": "Disable appveyor build for now", "tree": { "sha": "4920056437c4f768f24b2771309eddac55f55645", "url": "https://api.github.com/repos/stedolan/jq/git/trees/4920056437c4f768f24b2771309eddac55f55645" }, "url": "https://api.github.com/repos/stedolan/jq/git/commits/0b8218515eabf1a967eba0dbcc7a0e5ae031a509", "comment_count": 3 }, "url": "https://api. »

328 on #jq,

EC2インスタンスのディスクを拡張する

EC2でインスタンスを建てる際にコミュニティAMIにあったCentOS7(RightScale)を選択し、ディスクを50GBにしておいたんだけど、いざログインしてみると10GB程しか認識されていない。 # df -Th ファイルシス タイプ サイズ 使用 残り 使用% マウント位置 /dev/xvda1 ext3 9.8G 1.3G 8.0G 14% / どうやったら認識されるんだろうと思ってあれこれやってたところ参考になりそうな下記のブログを見つけました。 AWSのCentOS6.7のインスタンスでボリュームが8GBしか認識しない - 渋谷で働くとあるエンジニアの適当なブログ よし、これの通りにやってみよう。 # yum install parted # parted -l モデル: Xen Virtual Block Device (xvd) ディスク /dev/xvda: 9.8GB # yum install epel-release # yum -y --enablerepo=epel install cloud-init.noarch cloud-utils-growpart # export LANG="en_US.UTF-8 # growpart /dev/xvda 1 # export LANG="ja_JP.UTF-8" # vi /etc/cloud/cloud.cfg disable_root: 0 # disable_rootを0に変更 # parted -l モデル: Xen Virtual Block Device (xvd) ディスク /dev/xvda: 53. »

LVM構成のqcow2イメージからデータを救出する

会社でディスクのサルベージをお願いされたのでその時のメモ。 大学時代によくやってたんだけど、ログ残してなかったので この機会に残しておきます。 環境 VirtualBoxでUbuntu Server 12.04を立てて、その中にサルベージするディスクを置いてます。 CentOS6だとnbdのインストールが上手く行かなかったのと、7では自分でビルドしないといけないようで、 ちょっと面倒だなあと思い、手間の少ないUbuntu12.04を使いました。 UbuntuのOSインストール時、インストーラーの手順にそのまま従うと、LVM構成で作成されますが、 今回は、Standard Partitionで作成しました。 Ubuntu上でCentOSのディスクのサルベージをやるのでLVMでも特に問題ないのですが、 Ubuntuで、Ubuntuのディスクをサルベージする際、LVMのVolGroupの名前空間が被ることがあります。 CentOSでCentOSのディスクをサルベージする際もそうです。 被っちゃうといろいろと面倒なので、できるだけStandard Partitionで構成しましょう。 qemu-nbdのインストールと有効化 $ apt-get install qemu-utils $ modprobe nbd max_part=8 qemu-utilsをインストールすると、関連パッケージでqemu-nbdも一緒にインストールされます。 qemu-nbd(Network Block Device)は、qemuで用いられる特殊なディスクをループバックマウントするためのツールです。 modprobeはKernel Moduleのロード、あんロードを行うためのコマンドです。 qcow2ディスクに接続 $ qemu-nbd --connect=/dev/nbd0 /root/centos.qcow2 $ lvscan >> inactive '/dev/VolGroup/lv_root' [37.54 GiB] inherit inactive '/dev/VolGroup/lv_swap' [1.97 GiB] inherit $ lvchange -an /dev/VolGroup/lv_root /dev/VolGroup/lv_root $ lvscan >> ACTIVE '/dev/VolGroup/lv_root' [37.54 GiB] inherit #ACTIVEであればOK ACTIVE '/dev/VolGroup/lv_swap' [1.97 GiB] inherit #ACTIVEであればOK $ mount /dev/VolGroup/lv_root /mnt qemu-nbd commandでqcow2ディスクを接続します。 »

Serverless Frameworkを触ってみた + 環境変数のアップロードまでやってみる

最近はあちこちでサーバーレスってTwitterのTLでよく聞くようになってて興味を持っています。 そういや、 今年の8月にもJAWS-UG沖縄 真夏の熱すぎるサーバレス祭り! - Doorkeeperに参加したのだれど、 その時のブログを書くの忘れてたのを今気づいた。 (過去記事漁ってみたら無かったからきっと書いてない…) ↑の勉強会に参加したときにServerless Frameworkの存在を初めて知りました。 と前置きはこのくらいにして Serverless Frameworkをちょっと触ってみたときのログを書いておきます。 最近、AWSのLambdaさんが環境変数使えるようになったのと、 Serverless Frameworkが環境変数のアップロードに対応したのでそこまでがんばってみました。 Serverless Frameworkの導入から実行まで 下記は割愛します。 npmのインストール awsのアクセスキー取得と登録 serverless frameworkのインストールは公式のドキュメントに書いてある通り $ npm install -g serverless で、プロジェクト作る時は $ serverless create --template aws-nodejs --path my-service でいけた。 後、ローカルで実行したかったのでserverless-run-function-pluginも入れておく。 $ npm install -g serverless-run-function-plugin my-serviceディレクトリに移動して/handler.jsの中身をちょちょいと書き換えて module.exports.hello = (event, context, callback) => { console.log("テストメッセージ"); }; 実行します。 $ serverless run -f hello すると、テストメッセージが表示される。 環境変数のアップロードまでやってみる ただアップロードするだけじゃ面白くないので 実際に環境変数が呼ばれて動くところまで確認してみます。 1分に1度Slackにメッセージをポストする感じのLambda Functionを作ってみます。 (1分に1度もポストされるとすごいうっとおしいので注意…w) プロジェクトを新しく作成します。 $ serverless create --template aws-nodejs --path slack-post $ cd slack-post ソースはgistに上げて起きました。 »

.ssh/configのファイルを分割管理する

最近、管理するサーバが増えてきたこともあり.ssh/configのファイルが肥大化してきた。 分割して管理できないかなあと思い調べてたらやってる人は多かった。 .ssh/configをファイル分割管理するようにした - Qiita 私の考えたzsh最強のssh接続設定 - Qiita 最近実践している OpenSSH の設定ファイルの分割 - Qiita sshが分割したconfigファイルを読む方法が無いからみなさん結合してるんですね。 ~/.ssh/conf.d/以下のファイルには、もともとconfigに書いてあったものを分割して配置してるだけです。 ~/.ssh ├── conf.d │ ├── github.conf │ ├── hogeserver.conf │ └── myserver.conf ├── config ├── id_rsa ├── id_rsa.pub ├── known_hosts あとは.zshrcに下記のfunctionを記述して function ssh-config-gen () { mv ~/.ssh/config ~/.ssh/config.backup cat ~/.ssh/conf.d/*.conf > ~/.ssh/config echo "generate file ~/.ssh/config" } $ ssh-config-gen と入力すれば直前のconfigのバックアップを取って 新たにconfigを生成し直すということができます。 実は~/.ssh/configを分割管理できるpincというコマンドを世に産んだを見てpincもちょっと触ってみましたが、 できることは同じなのでどっちでやっても良いかな 何か他に良い方法があるよとかあれば、ぜひ教えてくださいな。 おしまい。 »

328 on #ssh,

innerHTMLを使ってラベルを変更する

久々の投稿です。 10月はネスペ受けたり、Hardeningに参加したりと イベントごとが多くて充実してました。 そのことはまた別記事で書きます。 最近、フロント側も触ることが多くなったのでちょっと勉強中です。 innerHTMLを使ってラベルを変更する Slim(Rails)とかで特定の操作が行われたらlabelを変更したい時とか .control-group.pull-left label.control-label | プルダウンメニュー .controls .input-group.input-group-sm = select :search, :pldownmenu, PLDOWNMENU.invert, {:selected => @pldownmenu}, {:class => "form-control", :id => "pldownmenu"} .control-group.pull-left label.control-label = label :name, 'hogehoge', :id => "change_label" javascript: $(document).ready(function () { change_label = document.getElementById("change_label").innerHTML; if ($('#pldownmenu').val() == '3') { document.getElementById("change_label").innerText = "ほげ!"; }else{ document.getElementById("change_label").innerText = "hogehoge"; } }); おしまい。 »

CloudFrontのお話 + α

先週末あたりからAWSのCloudFrontさんを触ってみてます。 CloudFrontを触ってる理由は、証明書をEC2側で持ちたくなかったから ただそれだけです(笑) 実際に証明書の配置も楽チンだったので、今後も使っていきたい。 このタイミングで、CloudFrontの証明書の更新もお願いされてたのだけれど 同じ名前で証明書はアップロードできないので 証明書を削除 証明書を登録 という形をとりました。 証明書のアップロード後、CloudFront側で使えるようになるには少し時間がかかる。 僕の場合、2,3時間程度だった気がする。 クラスメソッドさんにはお世話になりっぱなしだ。 Amazon CloudFrontの独自ドメインSSL証明書をAWS CLIでアップロードする - ClassMethod 後は、EC2へのアクセスはCloudFrontからのみ受け付ける設定もやりました。 画面からぽちぽちやるのもめんどいので、aws-cliを使ってセキュリティグループに追加していく。 $ curl https://ip-ranges.amazonaws.com/ip-ranges.json | jq '.prefixes[] | select(.service=="CLOUDFRONT") | .ip_prefix' > iplist CIDRのリストが取れるのでvimでちょちょいと魔法をかけて 下記を実行。 aws ec2 authorize-security-group-ingress --group-id sg-xxxxxx --protocol tcp --port 80 --cidr 13.32.0.0/15 aws ec2 authorize-security-group-ingress --group-id sg-xxxxxx --protocol tcp --port 80 --cidr 52.46.0.0/18 aws ec2 authorize-security-group-ingress --group-id sg-xxxxxx --protocol tcp --port 80 --cidr 52.84.0.0/15 aws ec2 authorize-security-group-ingress --group-id sg-xxxxxx --protocol tcp --port 80 --cidr 52. »

ripgrepとhttpstats

自分のメモ用。 週末、Twitter見てたらripgrepとhttpstatsなるものを発見。 ripgrep 通常のgrepよりも高速な検索ツール。 ripgrep is faster than {grep, ag, git grep, ucg, pt, sift} - Andrew Gallant’s Blog Githubはこっち。 BurntSushi/ripgrep - Github 昨日の夜中にはStarが800くらいあったんだけど、今見たら1000超えてた。 Bug報告もissueに結構上がってたんだけど、fixも結構はやい。 httpstat 最近、httpstat なるものが流行っているらしい - tellme.tokyo 問題の切り分けに使えそうですね。 と、自分のメモ用でした。 今日たまたま足を運んだAUショップでiPhone7の在庫があったので契約してきました。 3Dtouchにはまだまだ慣れそうにないです…w »

Capistrano3を使ってみた

今月頭くらいからちょくちょく触っているCapistrano3 アプリケーションの自動デプロイができたのでまとめてみます。 1日に何回もデプロイする環境では、重宝するCapistranoですが、 ググってみるとハマってる人がそこそこ多い感じ。 一通り触ってみて、やっぱり学習コストはちょっと高い気がするけど、 得られるメリットは大きいなあと思いました。 Capistrano3 デプロイ自動かのためのフレームワーク Ruby製 cap deployという呪文を唱えるだけでアプリケーションのデプロイからアプリケーションサーバの再起動までやってくれる優れもの 対象のホストにsshkitを使ってログインして各種コマンドを発行する Web,AP,DBなど用途ごとにホストを分けて運用している場合でも、roleに記載すればそこでコマンドを実行してくれる。 インストール $ gem install capistrano $ gem install capistrano-rails $ gem install capistrano-rbenv $ gem install capistrano-bundler $ gem install capistrano3-unicorn $ gem install capistrano3-ridgepole $ gem install capistrano-rails-console $ gem install capistrano3-delayed-job セットアップ $ mkdir testdeploy $ cd testdeploy $ cap install ここまで入力するだけで必要なディレクトリやファイルが生成されます。 cap installはデフォルトではproductionとstagingが生成されますが、 productionでしか実行しないよって人はcap install STAGES=productionとオプションつけて実行してあげたらOKです。 develop,staging,production全部必要というのであればcap install STAGES=development,staging,productionと書けばOKです。 下記は実際に生成されたディレクトリやファイルです。 余談ですが、treeコマンドを使うと一発で下記のようなツリーが作れるので便利です。 /home/rails/testdeploy ├── Capfile ├── config │ ├── deploy │ │ ├── production. »