Share Pastebin
Guest
Public paste!

Untitled

By: a guest | Mar 13th, 2010 | Syntax: C | Size: 0.62 KB | Hits: 36 | Expires: Never
Copy text to clipboard
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <string.h>
  4.  
  5. int good(int addr) {
  6.         printf("Address of hmm: %p\n", addr);
  7. }
  8.                
  9. int hmm() {
  10.         printf("Win.\n");
  11.         execl("/bin/sh", "sh", NULL);
  12. }
  13.  
  14. extern char **environ;
  15.  
  16. int main(int argc, char **argv) {
  17.  
  18.         int i, limit;
  19.  
  20.         for(i = 0; environ[i] != NULL; i++)
  21.         memset(environ[i], 0x00, strlen(environ[i]));
  22.  
  23.         int (*fptr)(int) = good;
  24.         char buf[32];
  25.        
  26.         if(strlen(argv[1]) <= 40) limit = strlen(argv[1]);
  27.        
  28.         for(i = 0; i <= limit; i++) {
  29.                 buf[i] = argv[1][i];
  30.                 if(i < 36) buf[i] = 0x41;
  31.         }
  32.  
  33.         int (*hmmptr)(int) = hmm;
  34.  
  35.         (*fptr)((int)hmmptr);
  36.        
  37.         return 0;
  38.        
  39. }