Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. #include <unistd.h>
  2. #include <string.h>
  3.  
  4. void unescape(char *p, char *s) {
  5. int i, l = strlen(p), m = strlen(s);
  6. for (i = 0; i < m; ++i)
  7. switch(s[i]) {
  8. case '\\':
  9. p[l++] = '\\';
  10. p[l++] = '\\';
  11. break;
  12. case '\n':
  13. p[l++] = '\\';
  14. p[l++] = 'n';
  15. break;
  16. case '"':
  17. p[l++] = '\\';
  18. p[l++] = '"';
  19. break;
  20. default:
  21. p[l++] = s[i];
  22. }
  23. }
  24.  
  25. int main(int argc, char **argv) {
  26. char before[] = "#include <unistd.h>\n#include <string.h>\n\nvoid unescape(char *p, char *s) {\n int i, l = strlen(p), m = strlen(s);\n for (i = 0; i < m; ++i)\n switch(s[i]) {\n case '\\\\':\n p[l++] = '\\\\';\n p[l++] = '\\\\';\n break;\n case '\\n':\n p[l++] = '\\\\';\n p[l++] = 'n';\n break;\n case '\"':\n p[l++] = '\\\\';\n p[l++] = '\"';\n break;\n default:\n p[l++] = s[i];\n }\n}\n\nint main(int argc, char **argv) {\n char before[] = \"";
  27. char s[] = " char PROG[] = \"echo\";\n char p[100000] = \"\";\n char *nv[4] = {argv[0], p, argv[1], NULL};\n strcat(p, before);\n unescape(p, before);\n strcat(p, \"\\\";\\n char s[] = \\\"\");\n unescape(p, s);\n strcat(p, \"\\\";\\n\");\n strcat(p, s);\n execvp(PROG, nv);\n}\n";
  28. char PROG[] = "echo";
  29. char p[100000] = "";
  30. char *nv[4] = {argv[0], p, argv[1], NULL};
  31. strcat(p, before);
  32. unescape(p, before);
  33. strcat(p, "\";\n char s[] = \"");
  34. unescape(p, s);
  35. strcat(p, "\";\n");
  36. strcat(p, s);
  37. execvp(PROG, nv);
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement