這里寫目錄標題
- 一級目錄
- 1、詳細解釋一下JIT spray以及heap spray是什么?
- 2、解釋一下老的windows作業系統下面利用SEH繞過DEP的原理和程序,
一級目錄
1、詳細解釋一下JIT spray以及heap spray是什么?
答:
(1)
JIT編譯(just-in-time compilation)狹義來說是當某段代碼即將第一次被執行時進行編譯,因而叫“即時編譯”,JIT可以加快腳本代碼的執行,在瀏覽器中通常會使用JIT,JIT編譯器對于攻擊者來說是一個很大的攻擊面,存在各種各樣的攻擊,例如: 1. JIT-Spray 2. JIT-based code-reuse attacks,另外JIT編譯器由于代碼很復雜,也導致了攻擊面很大,
JIT-Spray:JIT Spray是一種誕生于2010年的漏洞利用技術,可將Shellcode嵌入到JIT引擎生成的可執行代碼中,目前,包括Chakra在內的各JIT引擎幾乎都針對該技術采取了防御措施,包括隨機插入空指令、立即數加密等,如果一個高級語言的運算式中含有有固定值,并且這個高級語言是JIT編譯的,那就可以在運行時嵌入惡意代碼,從而繞過DEP,如果如果攻擊者嘗試去分配(Spray)很多的這類代碼,代碼的地址就變得可以預知了,從而繞過ASLR,最后需要獲得程式的控制流,這種情況下,JIT編譯器的UAF、Type Confusion、堆溢位就很有用了,
(2)
為什么需要Heap Spray?首先看看現有的攻擊技術:
對于已有的堆疊溢位堆溢位攻擊方法,大部分已經很難利用了,攻擊者怎么辦?別急!還可以覆寫的函式指標,物件指標,但是覆寫這些指標之后怎么利用呢?強大的Heap Spray來幫你,
Heap Spray(堆噴射)是在shellcode的前面加上大量的slide code(滑板指令),組成一個注入代碼段,然后向系統申請大量記憶體,并且反復用注入代碼段來填充,這樣就使得行程的地址空間被大量的注入代碼所占據,然后結合其他的漏洞攻擊技術控制程式流,使得程式執行到堆上,最終將導致shellcode的執行,
傳統slide code(滑板指令)一般是NOP指令,但是隨著一些新的攻擊技術的出現,逐漸開始使用更多的類NOP指令,譬如0x0C(0x0C0C代表的x86指令是OR AL 0x0C),0x0D等等,不管是NOP還是0C,他們的共同特點就是不會影響shellcode的執行,使用slide code的原因下面還會詳細講到,
Heap Spray只是一種輔助技術,需要結合其他的堆疊溢位或堆溢位等等各種溢位技術才能發揮作用,
Heap Spray第一次被用于漏洞利用至少是在2001年,但是廣泛被使用則應該是2005年,因為這一年在IE上面發現了很多的漏洞,造成了這種利用技術的爆發,而且在瀏覽器利用中是比較有效的,另一個原因是這種利用技術學習成本低,通用性高并且方便使用,初學者可以快速掌握,
因此,Heap Spray是一種通過(比較巧妙的方式)控制堆上資料,繼而把程式控制流導向ShellCode的古老藝術,
2、解釋一下老的windows作業系統下面利用SEH繞過DEP的原理和程序,
SEH(“Structured Exception Handling”),即結構化例外處理是windows作業系統提供給程式設計者的強有力的處理程式錯誤或例外的武器,
DEP是資料執行保護的英文縮寫,全稱為Data Execution Prevention,資料執行保護(DEP) 是一套軟硬體技術,能夠在記憶體上執行額外檢查以幫助防止在系統上運行惡意代碼,
第一步:Fuzz,觸發漏洞
第二步:利用no-safeSeh模塊地址覆寫seh,繞過safesef,并回傳到準備的資料緩沖區,
第三步:利用no-safeseh模塊內的add esp num; retn(num > 0x909)繞過no-safeseh,
第四步:關閉dep,指向shellcode,
如果在啟用DEP后,就不能使用pop pop ret地址了,而應采用pop reg/pop reg/pop esp/ret 指令的地址,指令pop esp 可以改變堆疊指標,ret將執行流轉移到nseh 中的地址上(用關閉NX 例程的地址覆寫nseh,用指向pop/pop/pop esp/ret 指令的指標覆寫例外處理器),
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/291179.html
標籤:其他
上一篇:fastjson安全學習雜記
