堆的攻擊方式

2021-10-25 01:49:24 字數 1100 閱讀 5035

堆溢位是指程式向某個堆塊中寫入的位元組數超過了堆塊本身可使用的位元組數(之所以是可使用而不是使用者申請的位元組數,是因為堆管理器會對使用者所申請的位元組數進行調整,這也導致可利用的位元組數都不小於使用者申請的位元組數),因而導致了資料溢位,並覆蓋到物理相鄰的高位址的下乙個堆塊。

calloc ==malloc + memeset

remalloc = malloc + free

尋找危險函式

通過尋找危險函式,我們快速確定程式是否可能有堆溢位,以及有的話,堆溢位的位置在**。

常見的危險函式如下

輸入

gets,直接讀取一行,忽略 '\x00'

scanf

vscanf

輸出 sprintf

字串 strcpy,字串複製,遇到 '\x00' 停止

strcat,字串拼接,遇到 '\x00' 停止

bcopy

確認填充(最小 2*size_t的倍數+size_t previous_size)

嚴格來說 off-by-one 漏洞是一種特殊的溢位漏洞,off-by-one 指程式向緩衝區中寫入時,寫入的位元組數超過了這個緩衝區本身所申請的位元組數並且只越界了乙個位元組

off-by-one 利用思路

溢位位元組為可控制任意位元組:通過修改大小造成塊結構之間出現重疊,從而洩露其他塊資料,或是覆蓋其他塊資料。也可使用 null 位元組溢位的方法

溢位位元組為 null 位元組:在 size 為 0x100 的時候,溢位 null 位元組可以使得 prev_in_use 位被清,這樣前塊會被認為是 free 塊。(1) 這時可以選擇使用 unlink 方法(見 unlink 部分)進行處理。(2) 另外,這時 prev_size 域就會啟用,就可以偽造 prev_size ,從而造成塊之間發生重疊。此方法的關鍵在於 unlink 的時候沒有檢查按照 prev_size 找到的塊的大小與prev_size 是否一致。

已加入針對 2 中後一種方法的 check ,但是在 2.28 前並沒有該 check 。

程式中存在基於堆的漏洞

漏洞可以控制 chunk header 中的資料

ARP DNS DHCP攻擊方式

arp請求 pc a需要其預設閘道器 r1 的mac位址 因此,它將傳送arp請求以獲取192.168.10.1的mac位址。arp響應 r1用pc a的ip和mac位址更新其arp快取。r1向pc a傳送arp答覆,然後pc a用r1的ip和mac位址更新其arp快取。欺詐性arp答覆 在圖中,威...

Ddos攻擊方式分類

分布式拒絕服務是 利用分布式的客戶端,向服務端傳送大量看似合法的請求,從而消耗大量資源或者長時間占用資源不釋放。攻擊網路頻寬自願的攻擊方式 1 直接攻擊 1.1 icmp igmp 洪水攻擊 1.2 udp洪水攻擊 2 反射和方法攻擊 2.1 ack反射攻擊 2.2 dns放大攻擊 2.3 ntp放...

基於cache的攻擊方式

1,flush reload 攻擊者和受害者之間使用共享記憶體,導致這種攻擊的可行性,由於頁面重複資料刪除和共享庫,許多平台上都可以使用共享記憶體。攻擊者可以利用clflush指令簡單的重新整理目標位址,在經過一定的時間間隔後,攻擊者再去重新訪問目標的位址並測量出時間間隔。如國被攻擊方在時間間隔中訪...