mrtc0.logこの広告は、90日以上更新していないブログに表示しています。SecurityPythonライブラリであるNetfilterQueueを使うことでiptablesのnfqueueルールにマッチしたパケットを扱うことができる。IndexここではNetfilterQueueとScapyを使用して偽のDNS応答パケットを返してみる。RequestパケットをフックしてReplyを返すfake_icmp.pyを作ってみる。sys.exit(1)main()iptablesにてecho-requestなICMPパケットをNFQUEUEターゲットでキューに入れる。1この状態でfake_icmp.pyを起動して、pingを打ってみる。ms実際には8.8.8.8にパケットは送信されず、iptablesのNFQUEUEターゲットによってフックされ、fake_icmp.pyへ渡される。replyが送信される。192.168.1.210偽のDNS応答を返す同様にDNSの問い合わせパケットをフックし、実際とは異なるIPアドレスを返すようにしてみる。iptablesでポート53番へ送信されるパケットをNFQUEUEに渡す。ここではキューIDを2にしている。2fake_dns.pyは以下のようになる。先ほどのICMPと同様、受け取ったパケットに基づいてDNS応答パケットを作成する。sys.exit(1)main()引数に返したいIPアドレスを渡して起動する。ここでは153.120.0.175(mrtc0.com)を渡す。153.120.0.175digの結果は以下のようになる。122偽の応答を返していることが確認できた。GoGoでパケットを扱うライブラリにgopacketがある。github.comここではgopacketでpcapを読み込んでパケットの内容を表示してみる。単純に読み込んで表示する読み込むpcapはhttp.capを使っている。}}読み込み箇所は以下の部分。handle.LinkType())でpcapからパケットを取得できる。https://godoc.org/github.com/google/gopacket#PacketSourceちなみに、もっと簡単に読み込む方法としてPackets()を使う方法もある。Networkパケットを作成したりpcapをいじったりして遊ぶPythonライブラリにscapyがある。pcapを扱う際、rdpcapで読み込むことができるが、一度に全て読み込んでしまうため、大きいpcapを操作するときには厳しいことがある。そんなときはPcapReaderを使えばいいらしい。LinuxCTFなどで脆弱なアプリケーションを動かしてそれをpwnする問題がある。DockerとかJailとか使う方法もあるだろうけど簡単に手っ取り早くできるのはchroot+xinetdだと思う。脆弱なプログラム(vuln.c)を用意する。vulnchroot環境を構築するためにlddで依存環境を確認して適当に配置。(0xb77d9000)最終的にこのようなディレクトリ構造になる。secret.txt続いてxinetdの設定。/etc/xinetd.d/vuln.confを以下の内容で作成する。}serverにはchrootコマンドのバイナリを指定する。server_argsにchrootの引数を指定する。chroot環境である/usr/chroot/のvulnを動かすという意。chrootを実行するにはroot権限が必要なのでuserにrootを指定する。/etc/xinetd.dが記述されていることを確認する。startでxinetdを起動すると指定したポート(ここでは12345)でvulnが待ち受けている。/etc/passwdのようにchroot環境にないファイルを参照することができないことが確認できる。HerokuChatworkの期限切れタスクを毎朝通知するためにHerokuアプリを書いた。AkkaどころかScalaも全然知らなかったし、Herokuも使ったことなかったけどとりあえず最低限動いてる。Buttonってのがあるらしい。README.mdなどのドキュメントに設置すると、クリック1つでHerokuにデプロイできるらしい。Center設置するまでのメモを残しておく。app.jsonを書くリポジトリにapp.jsonが必要。書いたほうがいいらしい。"chatwork"]}logoはないので私のTwitterアイコンにした。Buttonを設置する[![Deploy](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy?template=https://github.com/mrt-k/akka-cwnotifier)また、GitHubのREADME.mdに設置するのであれば以下のようにtemplate=を指定しなくてもRefererから勝手にリポジトリ特定してやってくれるらしい。Buttonを試したアプリにはChatworkのAPIキーなどを環境変数として設定する必要がある。これもapp.jsonで設定する。}}descriptionに説明を書ける。