- C和C++安全編碼(原書第2版)
- (美)Robert C.Seacord
- 539字
- 2020-10-30 17:56:48
第3章 指針詭計(jì)
與Rob Murawski合著 [1]
Tush!tush!fear boys with bugs.
—William Shakespeare.The Taming of the Shrew.act1.scene2
指針詭計(jì)(pointer subterfuge)是通過(guò)修改指針值來(lái)利用程序漏洞的方法的統(tǒng)稱[Pincus 2004]。C和C++的對(duì)象指針和函數(shù)指針是有區(qū)別的。指向void或指向一個(gè)對(duì)象類型的指針的類型被稱為對(duì)象指針類型(object pointer type)。可以指定一個(gè)函數(shù)的指針類型被稱為函數(shù)指針類型(function pointer type)。指向類型T的對(duì)象的指針被稱為“指向T的指針”。C++還定義了一種成員指針類型(pointer to member type),它是指定一個(gè)非靜態(tài)類成員的指針類型。
可以通過(guò)覆蓋函數(shù)指針將程序的控制權(quán)轉(zhuǎn)移到攻擊者提供的外殼代碼(shellcode)。當(dāng)程序通過(guò)函數(shù)指針執(zhí)行一個(gè)函數(shù)調(diào)用時(shí),攻擊者提供的代碼將會(huì)取代原本希望執(zhí)行的代碼而得到執(zhí)行。
對(duì)象指針也可以被修改,從而執(zhí)行任意代碼。如果一個(gè)對(duì)象指針用作后繼賦值操作的目的地址,那么攻擊者就可以通過(guò)控制該地址從而修改內(nèi)存其他位置中的內(nèi)容。
本章詳細(xì)解釋了函數(shù)指針和對(duì)象指針的修改問題。與本書其他各章的不同之處在于,本章在介紹了如何初步利用漏洞后(如緩沖區(qū)溢出),還詳細(xì)討論了攻擊者可能如何進(jìn)一步地執(zhí)行任意的代碼。預(yù)防指針詭計(jì)非常困難,最佳緩解措施就是在編程階段消除漏洞。在進(jìn)一步討論指針詭計(jì)之前,讓我們首先了解數(shù)據(jù)的聲明與它在內(nèi)存中存儲(chǔ)位置之間的關(guān)系。
- Visual FoxPro程序設(shè)計(jì)教程
- Flink SQL與DataStream入門、進(jìn)階與實(shí)戰(zhàn)
- Oracle 12c中文版數(shù)據(jù)庫(kù)管理、應(yīng)用與開發(fā)實(shí)踐教程 (清華電腦學(xué)堂)
- FreeSWITCH 1.6 Cookbook
- Unity Virtual Reality Projects
- 精通軟件性能測(cè)試與LoadRunner實(shí)戰(zhàn)(第2版)
- 程序員考試案例梳理、真題透解與強(qiáng)化訓(xùn)練
- Java Web應(yīng)用開發(fā)技術(shù)與案例教程(第2版)
- Linux環(huán)境編程:從應(yīng)用到內(nèi)核
- Unity Shader入門精要
- Java:High-Performance Apps with Java 9
- 全棧自動(dòng)化測(cè)試實(shí)戰(zhàn):基于TestNG、HttpClient、Selenium和Appium
- Getting Started with React Native
- 21天學(xué)通C++(第5版)
- Node.js 12實(shí)戰(zhàn)