撫遠王瑞雪培訓課件_第1頁
撫遠王瑞雪培訓課件_第2頁
撫遠王瑞雪培訓課件_第3頁
撫遠王瑞雪培訓課件_第4頁
撫遠王瑞雪培訓課件_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

PWN漏洞利用核心技術培訓課程目錄1基礎準備培訓背景與目標介紹、基礎環(huán)境搭建、Linux基礎與調試工具2漏洞基礎棧溢出漏洞詳解、Shellcode編寫與利用、格式化字符串漏洞3進階技術動態(tài)鏈接與GOT劫持、堆漏洞入門與進階、IOFILE結構漏洞4實戰(zhàn)與總結實戰(zhàn)演練與案例分析、常見防護機制與繞過、學習資源與職業(yè)規(guī)劃第一章:培訓背景與目標撫遠王瑞雪團隊介紹撫遠王瑞雪團隊是由一群對二進制安全充滿熱情的專業(yè)安全研究人員組成,在PWN漏洞挖掘與利用領域擁有豐富的實戰(zhàn)經驗,曾在多個國內外CTF比賽中取得優(yōu)異成績。培訓目標通過系統(tǒng)化的培訓,使學員能夠:掌握PWN漏洞利用的核心技術與方法論熟練使用各類調試工具與自動化利用腳本培養(yǎng)獨立分析與解決二進制安全問題的能力建立系統(tǒng)的二進制安全知識體系培訓環(huán)境準備推薦操作系統(tǒng)Ubuntu16.04LTS(64位)選擇此版本是因為其安全機制相對簡單,適合入門學習大多數(shù)CTF比賽環(huán)境也基于此版本系統(tǒng)穩(wěn)定性好,社區(qū)支持資源豐富虛擬機軟件選擇VirtualBox:免費開源,跨平臺支持,資源占用較少VMware:性能更佳,快照功能強大,但部分版本需付費推薦配置:2核CPU,4GB內存,40GB硬盤空間必備工具IDAPro:強大的反匯編工具,建議學習免費版或教育版GDB:必備的調試工具,建議安裝增強插件:peda/gef/pwndbgPython:編寫漏洞利用腳本的首選語言Linux基礎與調試工具Linux常用命令速覽ls/cd/pwd-文件與目錄操作file/strings/hexdump-文件分析chmod/chown-權限管理IDA靜態(tài)分析簡介強大的反編譯功能,將二進制代碼轉為偽C代碼函數(shù)調用圖與交叉引用分析支持插件擴展,提高分析效率GDB調試基礎與插件GDB是GNU調試器,是二進制漏洞分析的核心工具:break/run/continue:設置斷點與運行程序print/x:查看變量與內存內容info:查看寄存器、棧、函數(shù)等信息推薦插件peda:提供彩色輸出與棧內容可視化gef:功能全面,適合深入學習第二章:棧溢出漏洞基礎棧的結構棧是程序運行時用于存儲局部變量、函數(shù)參數(shù)和返回地址的內存區(qū)域高地址向低地址增長包含棧幀(StackFrame)遵循"先進后出"原則函數(shù)調用流程函數(shù)調用時棧的變化過程:保存返回地址(call指令)保存上一幀的?;罚╮bp)分配局部變量空間執(zhí)行函數(shù)體恢復?;放c返回地址棧溢出原理當程序未對輸入進行充分驗證時,超長輸入會覆蓋棧上的其他數(shù)據(jù)覆蓋局部變量改變程序邏輯覆蓋返回地址控制程序執(zhí)行流棧溢出實戰(zhàn)演練stack1.c:覆蓋局部變量示例#include<stdio.h>voidfunc(){charbuf[64];intvalue=0;gets(buf);if(value==0xdeadbeef)printf("成功修改value!\n");}intmain(){func();return0;}漏洞點:gets()函數(shù)不檢查輸入長度,導致可以覆蓋value變量stack2.c:返回地址覆蓋示例voidbackdoor(){system("/bin/sh");}voidvuln(){charbuf[64];gets(buf);}intmain(){vuln();return0;}攻擊目標:覆蓋vuln()函數(shù)的返回地址為backdoor()函數(shù)地址,獲取shell調試步驟:確定緩沖區(qū)到返回地址的偏移找到backdoor函數(shù)的地址棧溢出高級技巧ROP鏈構造基礎返回導向編程(Return-OrientedProgramming)是一種高級棧溢出技術:利用程序中已有的代碼片段(gadgets)這些片段以ret指令結尾通過精心排列這些片段地址實現(xiàn)復雜功能可以繞過DEP/NX保護棧遷移技術當溢出空間有限時,可以使用棧遷移:將棧指針(esp/rsp)指向可控內存區(qū)域在新區(qū)域構造更長的ROP鏈常用gadget:leave;ret(等價于movesp,ebp;popebp;ret)參數(shù)控制技術在x64系統(tǒng)中,函數(shù)參數(shù)通過寄存器傳遞:RDI,RSI,RDX,RCX,R8,R9需要尋找類似poprdi;ret的gadget可使用ROPgadget工具自動化查找案例解析stack4.c與stack5.c演示:在開啟ASLR/NX的環(huán)境下利用棧溢出泄露libc地址實現(xiàn)system("/bin/sh")第三章:Shellcode編寫與利用Shellcode概念與作用Shellcode是一段精心構造的機器碼,主要用于在漏洞利用成功后執(zhí)行攻擊者指定的操作:獲取系統(tǒng)shell(如/bin/sh)添加系統(tǒng)用戶反彈連接(reverseshell)讀取/寫入敏感文件編寫與調試技巧編寫精簡的匯編代碼,減少無效指令避免NULL字節(jié)(\x00),因為它會終止字符串復制使用shellcraft工具生成常用shellcode使用pwntools進行測試與調試常見Shellcode類型execve型使用execve系統(tǒng)調用執(zhí)行任意命令,最常見的類型#64位execve("/bin/sh")簡化偽代碼rax=59#execve系統(tǒng)調用號rdi="/bin/sh"地址rsi=0rdx=0syscallopen-read-write型用于讀取特定文件內容,如/etc/passwdsocket型Shellcode實戰(zhàn)案例sc1.c:syscall獲取shell#include<stdio.h>charshellcode[100];voidvuln(){gets(shellcode);void(*func)()=(void(*)())shellcode;func();}intmain(){vuln();return0;}這個示例將用戶輸入的數(shù)據(jù)作為代碼執(zhí)行,我們可以輸入精心構造的shellcode獲取shellsc3.c:orwshellcode詳解當seccomp禁止execve系統(tǒng)調用時,可以使用open-read-write技術:使用open打開目標文件(如flag文件)使用read讀取文件內容到內存使用write將內容輸出到標準輸出適用于CTF比賽中的讀取flag場景防護機制繞過技巧seccomp沙箱:分析允許的系統(tǒng)調用,使用替代方案NULL字節(jié)規(guī)避:使用異或、減法等技術處理長度限制:編寫更精簡的shellcode或使用分段技術第四章:格式化字符串漏洞常見格式化字符串參數(shù)%d-輸出整數(shù)%s-輸出字符串%p-輸出指針地址%n-寫入已輸出字符數(shù)量%x-十六進制輸出格式化字符串漏洞原理當程序將用戶可控制的輸入直接作為printf等函數(shù)的格式化字符串參數(shù)時,就會產生格式化字符串漏洞://安全代碼printf("%s",user_input);//存在漏洞的代碼printf(user_input);漏洞利用方式信息泄露通過%p或%s泄露棧上或任意地址的內存內容,可獲取程序地址、密碼等敏感信息內存寫入格式化字符串漏洞案例fs2.c:泄露棧變量#include<stdio.h>intmain(){intsecret=0xdeadbeef;charbuf[100];fgets(buf,sizeof(buf),stdin);printf(buf);//格式化字符串漏洞if(secret!=0xdeadbeef)system("/bin/sh");return0;}利用思路:使用%n格式符修改secret變量的值,觸發(fā)shell獲取fs4.c:修改返回地址voidbackdoor(){system("/bin/sh");}voidvuln(){charbuf[100];fgets(buf,sizeof(buf),stdin);printf(buf);//格式化字符串漏洞}intmain(){vuln();return0;}漏洞利用腳本示例第五章:動態(tài)鏈接與GOT劫持ELF文件結構簡介ELF(ExecutableandLinkableFormat)是Linux系統(tǒng)下可執(zhí)行文件的標準格式:包含程序頭(ProgramHeader)和節(jié)頭(SectionHeader)定義了代碼段、數(shù)據(jù)段、BSS段等不同區(qū)域存儲了符號表、字符串表等輔助信息動態(tài)鏈接原理動態(tài)鏈接是指程序運行時才加載外部庫函數(shù)的機制:減少可執(zhí)行文件大小實現(xiàn)代碼共享和更新但也引入了特殊的漏洞利用向量PLT與GOT表PLT(ProcedureLinkageTable):過程鏈接表,包含跳轉到實際函數(shù)的代碼GOT(GlobalOffsetTable):全局偏移表,存儲實際函數(shù)地址首次調用時解析并緩存函數(shù)地址GOT劫持原理通過修改GOT表中的地址,可以劫持程序流程:將普通函數(shù)地址改為system等危險函數(shù)利用格式化字符串或棧溢出等漏洞修改GOTGOT劫持實戰(zhàn)dl2.c:泄露libc地址實現(xiàn)ret2libc#include<stdio.h>voidvuln(){charbuf[64];read(0,buf,100);//棧溢出}intmain(){puts("HelloPWN!");vuln();return0;}利用思路:利用棧溢出控制返回地址泄露puts函數(shù)的GOT地址計算libc基址構造system("/bin/sh")調用dl3.c:修改atoi為system實現(xiàn)getshell#include<stdio.h>#include<stdlib.h>intmain(){charbuf[100];while(1){printf("請輸入:");fgets(buf,sizeof(buf),stdin);printf("你輸入的是:");printf(buf);//格式化字符串漏洞intchoice=atoi(buf);if(choice==0)break;}return0;}利用思路:利用格式化字符串漏洞泄露libc地址計算system函數(shù)地址修改atoi的GOT表項為system地址第六章:堆漏洞入門堆的基本結構堆是程序在運行時動態(tài)分配的內存區(qū)域,由內存分配器(如ptmalloc2)管理:包含多個大小不同的內存塊(chunk)每個chunk有元數(shù)據(jù)(header)和用戶數(shù)據(jù)區(qū)根據(jù)大小分為fastbin、smallbin、largebin等使用空閑鏈表(freelist)管理未使用的塊常見堆漏洞類型Use-After-Free:使用已釋放的內存DoubleFree:重復釋放同一內存塊HeapOverflow:堆上的緩沖區(qū)溢出Off-by-One:邊界條件錯誤,寫入多一個字節(jié)HeapSpraying:精確布局堆內存堆利用基礎技巧偽造chunk:構造fakechunk繞過檢查堆噴射:控制堆布局堆疊風水:精確安排堆塊順序利用fastbin:快速釋放的小塊利用堆漏洞實戰(zhàn)案例heap2.c:use-after-free漏洞利用structUser{void(*print)(char*);charname[24];};voidnormal_print(char*str){puts(str);}voidbackdoor(char*str){system("/bin/sh");}intmain(){structUser*user=malloc(sizeof(structUser));user->print=normal_print;//漏洞代碼,釋放后仍使用free(user);//用戶可控制的新分配char*buf=malloc(sizeof(structUser));gets(buf);//UAF漏洞觸發(fā)點user->print("Hello");return0;}漏洞利用分析use-after-free(UAF)漏洞發(fā)生在程序釋放內存后仍繼續(xù)使用的情況:程序創(chuàng)建User結構體,包含函數(shù)指針調用free釋放該結構體分配新內存(與之前相同大小)用戶可控制新內存內容程序仍然使用釋放的結構體利用步驟確定結構體布局構造payload覆蓋函數(shù)指針將指針改為backdoor函數(shù)地址觸發(fā)調用獲取shell堆漏洞進階技巧unsortedbinattack利用unsortedbin的特性實現(xiàn)任意地址寫入:unsortedbin中的chunk包含指向main_arena的指針可以泄露libc地址通過精心構造,可以向任意地址寫入libc地址常用于覆蓋重要的全局變量off-by-one漏洞利用只能多寫一個字節(jié)的情況下如何利用:修改相鄰chunk的size字段創(chuàng)建overlappingchunks破壞堆管理數(shù)據(jù)結構通常需要精確的堆布局控制__malloc_hook與one_gadget更先進的利用技術:__malloc_hook是malloc調用前的鉤子函數(shù)覆蓋為system或one_gadgetone_gadget是libc中可直接獲取shell的gadget比傳統(tǒng)system("/bin/sh")更簡便第七章:IOFILE結構漏洞IOFILE結構簡介IOFILE是C語言標準庫中用于文件操作的核心數(shù)據(jù)結構:struct_IO_FILE{int_flags;char*_IO_read_ptr;char*_IO_read_end;char*_IO_read_base;//...更多字段void*_vtable;//虛表指針};每個文件流(如stdin、stdout)都是一個FILE結構體,包含了讀寫緩沖區(qū)指針、標志位和虛函數(shù)表等漏洞利用思路偽造FILE結構體修改流控制覆蓋_vtable指針控制執(zhí)行流利用特定函數(shù)(如fclose)觸發(fā)虛表調用典型攻擊手法FSOP(FileStreamOrientedProgramming)通過篡改vtable實現(xiàn)代碼執(zhí)行通過修改緩沖區(qū)指針泄露內存防御機制glibc2.24之后增加了vtable檢查要求vtable必須位于特定范圍內需要結合其他技術繞過自動化利用腳本基礎Python基礎語法快速入門Python是編寫漏洞利用腳本的首選語言,具有簡潔易讀的語法:#基本數(shù)據(jù)類型a=0x12345678#整數(shù)b=b"binary\x00data"#字節(jié)串c="string"#字符串#數(shù)據(jù)轉換p32_val=p32(a)#轉為小端序32位值p64_val=p64(a)#轉為小端序64位值#字符串操作payload=b"A"*64+p64(addr)pwntools庫介紹pwntools是專為CTF設計的Python庫,提供了大量便捷功能:實戰(zhàn)演練:綜合漏洞利用分析程序保護機制$checksec./chall[*]'/tmp/chall'Arch:amd64-64-littleRELRO:PartialRELROStack:NocanaryfoundNX:NXenabledPIE:NoPIE(0x400000)保護分析:開啟了NX保護(不能執(zhí)行棧),但沒有棧canary和PIE,GOT表可寫識別漏洞點通過IDA分析發(fā)現(xiàn)程序存在:棧溢出漏洞(gets函數(shù))格式化字符串漏洞(printf直接使用用戶輸入)利用思路:先用格式化字符串泄露地址,再用棧溢出控制程序流程構建攻擊鏈典型CTF題目解析題目背景:babyheap這是一個經典的堆利用題目,模擬了一個簡單的堆內存管理系統(tǒng),提供以下功能:分配內存(Allocate)釋放內存(Free)編輯內存內容(Edit)查看內存內容(Show)漏洞點分析在Free功能中未將指針置NULL,導致UAF漏洞在Edit功能中未檢查chunk是否已釋放在Show功能中可能泄露堆上數(shù)據(jù)漏洞利用思路利用UAF漏洞泄露堆地址和libc地址構造overlappingchunks修改__malloc_hook為one_gadget代碼實現(xiàn)關鍵點常見防護機制與繞過ASLR(地址空間布局隨機化)將程序的內存布局隨機化,包括棧、堆、共享庫等:影響:無法直接知道函數(shù)或變量的絕對地址繞過技術:信息泄露:利用格式化字符串等泄露地址相對地址:利用固定的偏移量計算爆破:在低熵系統(tǒng)上暴力嘗試DEP/NX(不可執(zhí)行保護)將數(shù)據(jù)頁標記為不可執(zhí)行,防止shellcode執(zhí)行:影響:棧和堆上的代碼無法執(zhí)行繞過技術:返回導向編程(ROP)ret2libc:利用已有函數(shù)如systemJIT噴射:在JIT編譯器中注入代碼StackCanary(棧保護)在棧幀中放置隨機值,函數(shù)返回前檢查:影響:簡單的棧溢出無法實現(xiàn)繞過技術:泄露canary值:格式化字符串等避開canary:利用棧變量間的溢出劫持檢查函數(shù):修改__stack_chk_failPIE(位置無關代碼)將可執(zhí)行文件編譯為位置無關代碼:影響:程序基址隨機化,函數(shù)地址不固定繞過技術:泄露程序基址相對偏移利用培訓資源推薦經典書籍《匯編語言》(王爽)-基礎必讀《深入理解計算機系統(tǒng)》-理解底層原理《TheShellcoder'sHandbook》-漏洞利用經典《程序員的自我修養(yǎng)》-理解鏈接和加載《黑客攻防技術寶典:系統(tǒng)實戰(zhàn)篇》-實戰(zhàn)指南在線工具Godbolt:/-在線匯編查看器CTF-Wiki:/-CTF知識百科ROPGadget:/JonathanSalwan/ROPgadget-自動尋找ROPgadgetPwntools文檔:/-利用框架詳解Exploit-DB:/-漏洞利用示例庫學習網站與社區(qū)Pwnable.kr-提供從入門到高級的PWN題目Pwnable.tw-高質量PWN練習平臺HackTheBox-真實環(huán)境漏洞利用平臺XCTF聯(lián)賽-國內高水平CTF競賽看雪論壇-國內老牌安全社區(qū)學員常見問題答疑環(huán)境搭建問題問:為什么推薦使用Ubuntu16.04而不是更新版本?答:Ubuntu16.04的保護機制相對簡單,glibc版本適中,便于初學者理解基本原理。許多CTF比賽也使用此版本,學習后更容易上手比賽。當基礎打牢后,可以嘗試更新版本中的高級防護繞過。漏洞理解疑惑問:為什么同樣的漏洞利用代碼在不同環(huán)境下可能失?。看穑哼@通常與環(huán)境差異有關,包括:glibc版本不同,內存布局變化編譯器優(yōu)化級別不同,棧布局變化ASLR熵值不同,地址隨機化程度不同解決方法是增強代碼健壯性,處理各種邊界情況。利用腳本問題問:為什么我的ROP鏈在本地可以執(zhí)行但遠程失敗?答:遠程環(huán)境與本地可能存在差異:libc版本不同,函數(shù)偏移變化網絡傳輸可能造成數(shù)據(jù)截斷遠程服務有超時限制課程總結1環(huán)境準備Ubuntu16.04、調試工具配置2基礎知識棧結構、函數(shù)調用、內存管理3基本漏洞棧溢出、格式化字符串、Shellcode編寫4中級技術GOT劫持、ROP鏈構造、ret2libc5高級利用堆漏洞、IO_FILE攻擊、保護機制繞過技能提升路徑建議1入門階段掌握基礎工具使用,理解簡單漏洞原理,解決基礎CTF題目進階階段深入理解內存管理機制,熟練掌握各類漏洞利用技術,參與中等難度CTF比賽3專家階段未來發(fā)展與職業(yè)規(guī)劃PWN技術在安全行業(yè)的應用漏洞挖掘與研究在軟件產品中發(fā)現(xiàn)二進制漏洞,提交CVE或參與漏洞賞金計劃滲透測試評估企業(yè)內部系統(tǒng)安全性,發(fā)現(xiàn)潛在風險,提出改進建議安全產品研發(fā)開發(fā)防護工具,如漏洞掃描器、HIDS、WAF等CTF競賽參與高水平安全競賽,提升實戰(zhàn)能力,獲得行業(yè)認可持續(xù)學習與實踐的重要性二進制安全是一個不斷發(fā)展的領域,新的保護機制和攻擊技術不斷涌現(xiàn)。持續(xù)學習、跟蹤學術研究和行業(yè)動態(tài)、參與實戰(zhàn)項目是保持競爭力的關鍵。建立個人知識庫和工具鏈,形成自己的技術特色。相關崗位介紹25K安全研究員專注于漏洞挖掘與分析20K滲透測試工程師進行安全評估與測試30K安全開發(fā)工程師開發(fā)安全工具與產品35K安全架構師設計安全防護體系以上為月薪參考范圍(人民幣),根據(jù)經驗和能力有較大浮動互動環(huán)節(jié)技術問題針對課程內容的具體技術疑問職業(yè)規(guī)劃如何從初學者成長為安全專家學習路徑針對個人情況的學習建議工具使用調試工具與漏洞利用框架問題經驗分享講師解決

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論