Rumah >Tutorial sistem >LINUX >Pemajuan port SFTP: Membolehkan fungsi ditindas

Pemajuan port SFTP: Membolehkan fungsi ditindas

Joseph Gordon-Levitt
Joseph Gordon-Levittasal
2025-03-17 09:43:07240semak imbas

Pemajuan port SFTP: Membolehkan fungsi ditindas

Pengenalan

Protokol SSH menyokong tiga kategori utama aktiviti pelayan jauh: a) Pelaksanaan arahan (termasuk shell login), b) Pemajuan dan operasi rangkaian, dan c) Pemindahan fail.

Penyelenggara OpenSSH telah menentukan bahawa SFTP dan SCP tidak mempunyai tujuan undang -undang untuk penghantaran pelabuhan (melalui pilihan -L dan -R). Semasa pemindahan fail menggunakan utiliti ini, bendera yang secara eksplisit melumpuhkan ciri -ciri ini diluluskan tanpa syarat kepada SSH Executable Child.

Sesetengah pengguna mungkin memerlukan ciri -ciri ini. Subset yang jelas ialah penguji penembusan yang tugasnya mengesahkan bahawa ciri ini secara jelas dilumpuhkan pada pelayan SFTP awam.

Berikut adalah dua teknik untuk membolehkan ciri -ciri yang ditindas ini dengan mengubah suai rentetan binari SFTP itu sendiri, atau mengalihkan melalui shell yang dengan mudah boleh mengedit baris arahan. Bergantung pada fungsi platform, sama ada teknologi mungkin diperlukan untuk mencapai matlamat ini.

Butiran menekan

Pertama, adalah penting untuk mencari proses minat yang berjalan. Fungsi shell di bawah akan memaparkan PID yang sepadan dengan corak shell (perhatikan bahawa ini bukan ungkapan biasa). Ini berjalan di bawah dash debian (dan kebanyakan kerang biasa lain) dan bergantung pada pilihan PS BSD:

 <code>pps () { local a= b= c= IFS=$'\r'; ps ax | while read -ra do [ "$b" ] || c=1; for b; do case "$a" in *"$b"*) c=1;; esac; done; [ "$c" ] && printf '%s\n' "$a" && c=; done; }</code>

Mulakan sesi SFTP tradisional untuk menyemak proses yang berkaitan dengannya:

 <code>$ id uid=1001(aturing) gid=1001(aturing) groups=1001(aturing)... $ sftp aturing@sftp.victimandum.com aturing@sftp.victimandum.com's password: Connected to sftp.victimandum.com. sftp></code>

Kami mengandaikan bahawa pengguna UNIX tempatan di atas mempunyai akaun nama pengguna yang sama pada pelayan SFTP jauh.

Selepas sesi dijalankan, proses proses tempatan untuk nama pengguna akan memaparkan proses SSH kanak -kanak yang dihasilkan oleh SFTP:

 <code>$ pps aturing PID TTY STAT TIME COMMAND 9666 pts/0 S 0:00 sftp aturing@sftp.victimandum.com 9667 pts/0 S 0:00 /usr/bin/ssh -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings yes -oForwardAgent no -l aturing -s -- sftp.victimandum.com sftp</code>

Parameter Clearallforwardings Ya di atas akan menindas sebarang percubaan penghantaran tanpa mengambil tindakan untuk memecahkannya.

Bendera pemajuan port -l dan -r tidak wujud sebagai pilihan yang sah untuk baris arahan SFTP, tetapi kita boleh menggunakan pilihan -s untuk mencetuskan mereka secara jelas untuk menentukan pengendali SSH tersuai, dalam hal ini pelayan mel:

 <code>$ cat portssh #!/bin/sh exec ssh -L2525:smtp.victimandum.com:25 "$@"</code>

Sekiranya penindasan penghantaran tidak disediakan, panggilan SFTP ini mencukupi untuk mewujudkan sambungan penghantaran:

 <code>$ sftp -S ./portssh -oClearAllForwardings\ no aturing@sftp.victimandum.com aturing@sftp.victimandum.com's password: Connected to sftp.victimandum.com. sftp></code>

Sekarang anda dapat melihat percubaan penghantaran dalam proses SSH kanak -kanak:

 <code>$ pps aturing PID TTY STAT TIME COMMAND 9897 pts/0 S 0:00 sftp -S ./portssh -oClearAllForwardings no aturing@sftp.victimandum.com 9898 pts/0 S 0:00 ssh -L2525:smtp.victimandum.com:25 -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings yes -o ClearAllForwardings no -oForwardAgent no -l aturing -s -- sftp.victimandum.com sftp</code>

Walau bagaimanapun, cuba menghubungi pelayan mel jauh melalui port pemajuan tempatan tidak berjaya kerana mengatasi eksplisit:

 <code>$ nc localhost 2525 $</code>

Penindasan tanpa syarat ini dapat dilihat dalam kod sumber:

 <code>$ sed -n /X11/,/Forwardings/p openssh-8.7p1/sftp.c addargs(&args, "-oForwardX11 no"); addargs(&args, "-oPermitLocalCommand no"); addargs(&args, "-oClearAllForwardings yes");</code>

Rentetan statik ini juga dapat dilihat dalam fail binari yang disusun:

 <code>$ strings /usr/bin/sftp | grep [-]o[CFP] -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings yes -oForwardAgent no -oPort %d</code>

Akhirnya, dokumentasi dengan jelas menyatakan bahawa penindasan ini disengajakan dan memberikan alasan yang munasabah:

 <code>$ man ssh_config | sed -n /ClearAllForwardings/,/default/p ClearAllForwardings Specifies that all local, remote, and dynamic port forwardings specified in the configuration files or on the command line be cleared. This option is primarily useful when used from the ssh(1) command line to clear port forwardings set in configura‐ tion files, and is automatically set by scp(1) and sftp(1). The argument must be yes or no (the default).</code>

Perubahan rentetan yang disusun

Bagi mereka yang ingin melumpuhkan konfigurasi Clearallforwardings Ya, satu pilihan adalah menggunakan SED untuk mengedit rentetan dalam binari SFTP secara langsung (dengan asumsi Platform Sed adalah binari selamat):

 <code>$ sed 's/AllForwardings yes/AllForwardings no /' sftp.noclearforward</code>

Pengubahsuaian langsung ini lebih mudah daripada menyusun fail binari baru.

Kami dapat mengesahkan bahawa rentetan telah diubah suai dengan jayanya:

 <code>$ strings ./sftp.noclearforward | grep [-]o[CFP] -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings no -oForwardAgent no -oPort %d</code>

Walaupun kandungan dan cek SFTP yang diubahsuai akan berbeza, mana -mana Linux BuildID SHA1 yang sedia ada akan tetap sama (tetapi tidak mengemukakan tiket sokongan apabila menggunakan SFTP yang diedit):

 <code>$ file /usr/bin/sftp ./sftp.noclearforward /usr/bin/sftp: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=d7e77e24d5fac0fdc89e62a4c9c656091f2c4a33, for GNU/Linux 3.2.0, stripped ./sftp.noclearforward: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=d7e77e24d5fac0fdc89e62a4c9c656091f2c4a33, for GNU/Linux 3.2.0, stripped $ sha1sum /usr/bin/sftp ./sftp.noclearforward d8bdaf0b4642b9c324f9c2e0aeee2d9578fbe383 /usr/bin/sftp b12dda8ecfd7bd2847919b5531aea7c03364c123 ./sftp.noclearforward $ sha256sum /usr/bin/sftp ./sftp.noclearforward 986eecdfc654c9b3ff3fd0dce59690d47cf56be96a4b98a04a3682aef95d3f52 /usr/bin/sftp c8f99ce33fc129250c11dc6dbb8a01112e01124e470a92d0acefb955fd17d670 ./sftp.noclearforward</code>

Anda boleh menghubungi binari SFTP yang diubah suai untuk membolehkan penghantaran port:

 <code>$ chmod 755 sftp.noclearforward $ ./sftp.noclearforward -S ./portssh aturing@sftp.victimandum.com aturing@sftp.victimandum.com's password: Connected to sftp.victimandum.com. sftp></code>

Sekarang anda dapat melihat tetapan yang diubah suai dalam proses kanak -kanak:

 <code>$ pps aturing PID TTY STAT TIME COMMAND 9991 pts/0 S 0:00 ./sftp.noclearforward -S ./portssh aturing@sftp.victimandum.com 9992 pts/0 S 0:00 ssh -L2525:smtp.victimandum.com:25 -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings no -oForwardAgent no -l aturing -s -- sftp.victimandum.com sftp</code>

Ciri ini diaktifkan dan dijalankan pada pelayan jauh dan dapat mengesahkan sambungan dalam shell yang berasingan:

 <code>$ nc localhost 2525 220 smtp.victimandum.com Microsoft ESMTP MAIL Service, Version: 1.2.3456.78901 ready at Sun, 1 Jan 2023 01:23:45 -0100 ^C</code>

Apabila penghantaran dilumpuhkan pada pelayan, pelanggan akan menerima pemberitahuan yang menunjukkan status ini apabila sambungan cuba:

 <code>channel 3: open failed: administratively prohibited: open failed</code>

Pentadbir SFTP yang diberikan akaun yang tidak dipercayai sepatutnya mengesahkan bahawa konfigurasi pelayan secara eksplisit melumpuhkan pemajuan dan pelaksanaan perintah.

Beyond Posix Shell

Walaupun piawaian Dash dan Posix menyediakan set - sebagai cara untuk menetapkan semula parameter baris perintah, ciri -ciri yang lebih canggih disediakan dalam Bash dan KSH93:

 <code>$ cat ynargs #!/bin/bash echo "${@//yes/no}"</code>

Ujian cepat mengesahkan penyuntingan yang berjaya:

 <code>$ ./ynargs -oForwardX11 no -oPermitLocalCommand yes -oClearAllForwardings yes -oForwardAgent no -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings no -oForwardAgent no</code>

Perhatikan bahawa di atas $ {@// .../...} bukanlah POSIX yang sah dan tidak boleh berjalan di Dash atau mana -mana shell (MKSH, OKSH) yang diperoleh dari PDKSH. Banyak platform tidak mengikat kerang dengan ciri ini (seperti Android dan OpenBSD, walaupun ada cara untuk menambahnya);

Untuk memanfaatkan ciri ini dengan shell yang kuat, kami membuat direktori dan kemudian membuat pembalut SSH di dalamnya untuk membersihkan tetapan masalah:

 <code>$ cat ~/switcharoo/ssh #!/bin/bash exec /usr/bin/ssh "${@//yes/no}"</code>

Kemudian tetapkan direktori sebelum Sistem SSH dalam $ Path:

 <code>$ export PATH=~/switcharoo:$PATH $ which ssh ~/switcharoo/ssh</code>

Kemudian, kami memanggil sistem SFTP dalam persekitaran yang diubah suai ini:

 <code>$ /usr/bin/sftp -S ./portssh aturing@sftp.victimandum.com aturing@sftp.victimandum.com's password: Connected to sftp.victimandum.com. sftp></code>

Kami melihat bahawa shell menetapkan semula parameter masalah:

 <code>$ pps aturing PID TTY STAT TIME COMMAND 10058 pts/0 S 0:00 /usr/bin/sftp -S ./portssh aturing@sftp.victimandum.com 10059 pts/0 S 0:00 /usr/bin/ssh -L2525:smtp.victimandum.com:25 -oForwardX11 no -oPermitLocalCommand no -oClearAllForwardings no -oForwardAgent no -l aturing -s -- sftp.victimandum.com sftp</code>

Mengesahkan semula sambungan tempatan ke port pemajuan:

 <code>$ nc localhost 2525 220 smtp.victimandum.com Microsoft ESMTP MAIL Service, Version: 1.2.3456.78901 ready at Sun, 1 Jan 2023 01:23:45 -0100 ^C</code>

Sebagai demonstrasi akhir, pertukaran SMTP lengkap boleh dilakukan menggunakan skrip berikut:

 <code>$ cat awkmail #!/bin/gawk -f BEGIN { smtp="/inet/tcp/0/localhost/2525"; ORS="\r\n"; r=ARGV[1]; s=ARGV[2]; sbj=ARGV[3]; # /bin/awkmail to from subj 0) print |& smtp print "." |& smtp; smtp |& getline j; print j print "quit" |& smtp; smtp |& getline j; print j close(smtp) } # /inet/protocol/local-port/remote-host/remote-port</code>

Kami boleh menggunakan skrip ini untuk menghantar surat kami sendiri ke penerima jauh yang boleh diakses oleh pelayan SMTP:

 <code>$ ./awkmail jatanasoff@victimandum.com aturning@localhost awkmail Queued mail for delivery</code>

Dalam persekitaran yang sangat terkawal, kehadiran fungsi ini tidak optimum.

Sekatan pelayan

Adalah difahami bahawa pentadbir SFTP tidak mahu membenarkan pengguna mereka membuat sambungan TCP sewenang -wenang dengan bantuan pelayan, yang boleh meletakkan rangkaian sensitif berisiko. Mengehadkan aktiviti ini adalah tetapan keselamatan yang berhati -hati.

Konfigurasi yang sama adalah untuk menambah pengguna SFTP yang tidak dipercayai kepada kumpulan dan kemudian menghalang aktiviti kumpulan ini dalam sshd_config:

 <code>Match Group sftponly ChrootDirectory %h ForceCommand internal-sftp AllowTcpForwarding no</code>

Konfigurasi yang disyorkan ini biasanya mencukupi untuk mencegah semua percubaan penghantaran.

Adalah disyorkan untuk menambah Disableforwarding Ya:

 <code>$ man sshd_config | sed -n /DisableForwarding/,/configurations/p DisableForwarding Disables all forwarding features, including X11, ssh-agent(1), TCP and StreamLocal. This option overrides all other forwarding- related options and may simplify restricted configurations.</code>

Ini ditinggalkan kepada pentadbir untuk amalan.

kesimpulannya

Terlalu ketat tetapan klien SFTP boleh membawa kepada beberapa tahap kebutaan pengurusan pelayan. Sekatan pelanggan SFTP mudah dielakkan melalui pelbagai kaedah.

Bagi pentadbir pelayan SFTP, adalah penting untuk mengetahui di mana ia terhad dan di mana ia terhad, dan tidak bergantung kepada pelanggan untuk melindungi pelayan dari kawalan TCP sewenang -wenangnya. Pelanggan dikawal oleh pengguna, dan jika konfigurasi itu salah, sukar untuk melaksanakan arahan TCP ke pelayan. Sebarang ujian perlu dilakukan tanpa penghantaran yang luas dalam pengguna ssh_config, perhatikan amaran dalam dokumen.

Walaupun ciri ini mungkin mempunyai tujuan undang -undang yang boleh dibayangkan, penyalahgunaan akan jarang berlaku.

Isu -isu ini tidak baru, kerana varian Exec Tapak telah hadir dalam Plaintext FTP selama beberapa dekad. SFTP bukanlah alternatif mudah untuk pemindahan fail plaintext, ia juga mempunyai banyak ciri yang mudah digunakan.

Semoga pentadbir dapat menggunakan kaedah ini untuk mengesahkan keselamatan pelayan mereka agar tidak ditangkap.

Atas ialah kandungan terperinci Pemajuan port SFTP: Membolehkan fungsi ditindas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn