前回 までは、「詳解セキュリティコンテスト: CTFで学ぶ脆弱性攻略の技術 Compass Booksシリーズ」を読み進めてきました。ようやく読み終わったので、今回からは、「解題pwnable セキュリティコンテストに挑戦しよう! 技術の泉シリーズ (技術の泉シリーズ(NextPublishing))」を読んでいきます。
全体で、140ページぐらいで、第1章から第12章まであります。
今回は、第1章の「準備」を読んでいきたいと思います。
それでは、やっていきます。
参考文献
今回、題材にさせて頂いた「解題pwnable」です。
はじめに
「セキュリティ」の記事一覧です。良かったら参考にしてください。
セキュリティの記事一覧
以下は、の公式サイトです。特に追加の情報はありませんでした。
nextpublishing.jp
また、以下は、「解題pwnable セキュリティコンテストに挑戦しよう! 技術の泉シリーズ (技術の泉シリーズ(NextPublishing))」の公式の Docker Hub です。書籍では、tag として、3
を使っていますが、4
がアップされています。とりあえず、3
を使ってやっていきます。
https://hub.docker.com/r/kusanok/ctfpwn
では、書籍の章を参考に書き進めていきます。
第1章:準備
1.1:問題サーバの準備
環境は、Parrot OS 6.1 です。Docker は、自分ではインストールした記憶がないのですが、試しに、Docker を実行してみると、既にインストールされているようです。
本家の Docker ではなく、Podman という Docker互換のエミュレータ?がインストールされているようです。Podman は知らなかったのですが、root じゃなくても実行できる、デーモンではない、などの特徴のようです。
$ docker -v
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
podman version 4.3.1
まずは、書籍の最初に、以下のコマンドが書かれてるので、実行してみます。
エラーが出ました。
$ docker run --rm -it -p 10080:80 -p 10001-10013:10001-10013 kusanok/ctfpwn:3
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Error: short-name "kusanok/ctfpwn:3" did not resolve to an alias and no unqualified-search registries are defined in "/etc/containers/registries.conf"
Podman は、短い名前(kusanok/ctfpwn:3)の場合は、設定が必要なようです。正式な名前を設定すればいいようです。正式名(docker.io/kusanok/ctfpwn:3)を指定すると、正常に実行できたようです。
$ docker run --rm -it -p 10080:80 -p 10001-10013:10001-10013 docker.io/kusanok/ctfpwn:3
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Trying to pull docker.io/kusanok/ctfpwn:3...
Getting image source signatures
Copying blob e7cb79d19722 done
Copying blob 4e280afd9780 done
Copying blob 323d0d660b6a done
Copying blob 3ff22d22a855 done
Copying blob b7f616834fd0 done
Copying blob 651a3c01bb06 done
Copying blob 4bde72ab9496 done
Copying blob 72f19bdb2e8d done
Copying blob 4e224cbd8473 done
Copying blob 4b0f5d2e446f done
Copying blob b562778600c4 done
Copying blob 0229a0981ca2 done
Copying blob 8609aee5f00e done
Copying blob 6cd7991e5983 done
Copying config 2abac598f3 done
Writing manifest to image destination
Storing signatures
* Starting internet superserver xinetd [ OK ]
* Starting nginx nginx [ OK ]
open http://localhost/
Parrot OS のブラウザ(Firefox)で、http://localhost/
を開いてみます。あ、書籍を見ると、http://localhost:10080
でした。
うーん、「This address is restricted」と言われて、アクセスできません。chromium でやってみましたが、アクセスできません。curl で確認してみます。反応があるような気がします。
$ curl http://localhost:10080
<!doctype html>
<html>
<head>
<title>Malleus CTF Pwn Challenge</title><meta data-n-head="1" charset="utf-8"><meta data-n-head="1" name="viewport" content="width=device-width,initial-scale=1"><meta data-n-head="1" data-hid="description" name="description" content="Malleus CTF Pwn Practice"><link data-n-head="1" rel="icon" type="image/png" href="/favicon.png"><link data-n-head="1" rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900&display=swap"><link data-n-head="1" rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"><link rel="preload" href="/_nuxt/runtime.2d43a49.js" as="script"><link rel="preload" href="/_nuxt/node_modules/commons.1a40dd4.js" as="script"><link rel="preload" href="/_nuxt/app.c569442.js" as="script">
</head>
<body>
<div id="__nuxt"><style>#nuxt-loading{background:
<script src="/_nuxt/runtime.2d43a49.js"></script><script src="/_nuxt/node_modules/commons.1a40dd4.js"></script><script src="/_nuxt/app.c569442.js"></script></body>
</html>
いろいろ調べたところ、「This address is restricted」と言われた場合、特殊なポートなどはアクセス制限がされているとのことです。URL に about:config を入力して、許可するポートの範囲を設定するため、検索ボックスに network.security.ports.banned.override
を入力します。String にチェックを入れて、+ボタンを押します。そして、1-12000
として、チェックボタンを押して、有効にします。すると、ようやくアクセスできました。
問題の一覧
1.2:攻撃用の環境の準備
先ほど、アクセスを確認したものを「問題サーバー」と呼ぶようです。ここでは、問題サーバーへのアクセスを確認します。
問題なく、アクセスできました。
$ nc localhost 10001
ID: aaa
Password: bbb
Invalid ID or password
また、書籍で使用する「pwntools」のインストール方法が説明されています。私は既にインストール済みですが、以下のように、インストール方法が説明されていました。
$ sudo pip3 install pwntools
1.3:解析用サーバーの準備とツールの使用法
ここでは、解析用サーバーの準備が説明されています。私の場合は、問題サーバーは、先ほど起動した Dockerコンテナで、解析用サーバーは、Parrot OS とします。
問題サーバーは、Ubuntu 20.04 で、glibc 2.31 とのことなので、以下の記事で、Parrot OS 6.1 で、glibc 2.31 を動作させる方法を構築したので、それを使います。
daisuke20240310.hatenablog.com
あとは、objdump、GDB、PEDA、pwngdb が紹介されています。PEDA と pwngdb は、GDB のプラグインです。私は、pwndbg を使います。
また、checksec、socat、One-Gadget RCE、GCC が紹介されています。One-Gadget RCE は、「詳解セキュリティコンテスト: CTFで学ぶ脆弱性攻略の技術 Compass Booksシリーズ」でも紹介されていましたが、Ruby を使うということで、環境構築が面倒ということでスルーしました。必要になったら、インストールすることにします。
以上で、第1章「準備」は終了です。
おわりに
今回から「解題pwnable セキュリティコンテストに挑戦しよう! 技術の泉シリーズ (技術の泉シリーズ(NextPublishing))」を読み始めました。今回は、第1章「準備」ということで、少し短かったですが、この書籍でも、これまでと同じ環境で問題ないということだと思います。
次回は、第2章「login1(スタックバッファオーバーフロー1)」を進める予定です。
最後になりましたが、エンジニアグループのランキングに参加中です。
気楽にポチッとよろしくお願いいたします🙇
今回は以上です!
最後までお読みいただき、ありがとうございました。