真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Linux中create_elf_tables函數(shù)如何使用

Linux中create_elf_tables函數(shù)如何使用,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺(tái)小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了市北免費(fèi)建站歡迎大家使用!

Linux中create_elf_tables函數(shù)如何使用

概述

在近期的一次安全分析過程中,我們?cè)?4位Linux系統(tǒng)內(nèi)核里的create_elf_tables()函數(shù)中發(fā)現(xiàn)了一個(gè)整型溢出漏洞,本地攻擊者將可以通過一份SUID-root代碼來利用這個(gè)漏洞,并獲取到目標(biāo)設(shè)備的完整root權(quán)限。

目前,受該漏洞影響的Linux發(fā)行版有Red Hat Linux企業(yè)版、CentOS和Debian 8。

漏洞分析

150#define STACK_ROUND(sp, items) \ 151         (((unsigned long) (sp - items)) &~15UL) ... 165 create_elf_tables(struct linux_binprm*bprm, struct elfhdr *exec, ... 169        int argc = bprm->argc; 170        int envc = bprm->envc; 171        elf_addr_t __user *sp; ... 178        int items; ... 190        p = arch_align_stack(p); ... 287        items = (argc + 1) + (envc + 1) + 1; 288        bprm->p = STACK_ROUND(sp, items); ... 295        sp = (elf_addr_t __user *)bprm->p;

“argc”表示傳遞給execve()系統(tǒng)調(diào)用的命令行參數(shù)個(gè)數(shù),個(gè)數(shù)受fs/exec.c中MAX_ARG_STRINGS的限制;“envc”表示傳遞給execve()的環(huán)境變量個(gè)數(shù),個(gè)數(shù)同樣受到MAX_ARG_STRINGS的限制;但是由于MAX_ARG_STRINGS為0x7FFFFFFF,所以我們可以讓整數(shù)“items”發(fā)生溢出并讓程序失效。

此時(shí),我們就可以以增加用戶態(tài)的棧指針,然后將用戶態(tài)棧指針指向我們的參數(shù)和環(huán)境變量字符串,最終在用戶模式執(zhí)行SUID-root代碼時(shí)重寫這些字符串。

漏洞利用

在使用execve()運(yùn)行SUID-root代碼時(shí),我們的“items”值為0x80000000,參數(shù)指針的大小約為0x80000000 * sizeof(char *) = 16GB,參數(shù)字符串為16GB,環(huán)境字符串也為16GB,因此我們的漏洞利用環(huán)境“只”需要2 * 16GB = 32GB內(nèi)存,而并非3 * 16GB = 48GB或者更多,因?yàn)槲覀兪褂昧艘恍┬〖记蓙頊p少內(nèi)存指紋。

下面這個(gè)圖表代表了SUID-root代碼開始執(zhí)行后,我們的用戶態(tài)棧結(jié)構(gòu):

Linux中create_elf_tables函數(shù)如何使用

-“A”(“alpha”)為create_elf_tables()分配的棧空間大?。ùa190-287行),大約為512字節(jié)。

-“sprand”是create_elf_tables()分配的隨機(jī)??臻g大?。ùa190行),大小范圍在0-8192字節(jié)之間。

-“protect”參數(shù)字符串是一個(gè)非常重要的命令行參數(shù)&選項(xiàng),這個(gè)參數(shù)必須不能受到內(nèi)存崩潰的影響。

-“padding”參數(shù)字符串大約需要占用16GB??臻g。

-“protect”環(huán)境字符串是一個(gè)重要的環(huán)境變量,必須必須不能受到內(nèi)存崩潰的影響。

-“scratch”環(huán)境字符串為1MB。

-“onebyte”環(huán)境字符串為256KB,其部分?jǐn)?shù)據(jù)會(huì)被fname[]緩沖區(qū)覆蓋。

-“B”(“beta”)為ld.so分配的棧空間數(shù)量。

此時(shí),ld.so會(huì)使用handle_ld_preload()中fname[]緩沖區(qū)的數(shù)據(jù)重寫“onebyte”環(huán)境變量中的部分?jǐn)?shù)據(jù),并讓process_envvars()中的UNSECURE_ECVVARS等過濾器失效。

我們的POC代碼能夠利用create_elf_tables()中的這個(gè)整型溢出漏洞,演示樣例如下:

# gcc-O0 -o poc-suidbin poc-suidbin.c#chown root poc-suidbin#chmod 4555 poc-suidbin $ gcc-o poc-exploit poc-exploit.c$time ./poc-exploit...ERROR:ld.so: object 'LD_LIBRARY_PATH=.0LD_LIBRARY_PATH=.0LD_LIBRARY_PATH=.' fromLD_PRELOAD cannot be preloaded:ignored.ERROR:ld.so: object 'LD_LIBRARY_PATH=.0LD_LIBRARY_PATH=.' from LD_PRELOAD cannot bepreloaded: ignored.ERROR:ld.so: object 'LD_LIBRARY_PATH=.' from LD_PRELOAD cannot be preloaded: ignored.argc2147090419stack0x7ffbe115008f < 0x7ffbe1150188 < 0x7fffe0e50128 < 0x7ff7e11503ea <0x7ffbe102cdeagetenv0x7ffbe114d83b .0x7ffbe114d82bLD_LIBRARY_PATH=.0x7ffbe114df60LD_LIBRARY_PATH=.0x7ffbe114df72LD_LIBRARY_PATH=....0x7ffbe114e69eLD_LIBRARY_PATH=.0x7ffbe114e6b0LD_LIBRARY_PATH=.0x7ffbe114e6c2LD_LIBRARY_PATH=. real    5m38.666suser    0m0.049ssys     1m57.828s

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。


分享名稱:Linux中create_elf_tables函數(shù)如何使用
網(wǎng)站網(wǎng)址:http://weahome.cn/article/psehhd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部