People often ask me "How did you learn how to hack?" The answer: by reading. This page is a collection of the blog posts and other articles that I have accumulated over the years of my journey. Enjoy!
ion_buffer_kmap_get(), which increments a buffer's reference counter and calls a heap specific memory map function. DMA_BUF_IOCTL_SYNC can arbitrary increment or decrement the reference counter for the shared buffer. This reference counting issue can lead to a malicious user triggering a use after free. virtio the functionality was in the PCIVirtIOWriteMM function. port I/O handlers. By writing to one of the unused handlers, they could get code execution in the kernel by adding their own port writing commands to the Hypervisor code. AhciIdpIndexInPortFunc gave absolute read and AhciIdpIndexOutPortFunc gave an absolute write. __proto__) object. This object-based inheritance gives JavaScript flexibility and power, but with great power comes great responsibility! __proto__[field] = value then checking to see if this had been inherited by the application. They wrote a chrome extension that automatically did this when visiting a page, which is pretty rad!backbone for query parameter handling. By passing in __proto__.x=11111 as a parameter, the prototype could be poisoned. Using the untrusted types extension, a few interesting syncs can be found to inject directly into the DOM. __proto__, you can use [constructor][prototype] as well. If you're a bug bounty hunter, this is a real good way to make extra money from the same bug. src then changed the onerror handler to be JavaScript that they controlled. When the image failed to load, this would execute JavaScript in the context of the page. The URL query parameter is :__proto__[src]=image&__proto__[onerror]=alert(1).querystring, which is vulnerable to prototype pollution. They found that the pollution was only possible if the property was a number. They found a real crazy payload if knockout.js was being used, but nothing else. __proto__[123] you will notice that the value is set to 'xx'. To me, this was really helpful for visualizing the vulnerability class.fbWP_APP_id:// scheme for the application then steal the access token from the end of the OAuth flow. fb and fb-work. The author noticed that by specifying xd_arbiter in the redirect_uri parameter and change the URI scheme to fb:// the redirect would succeed. fb:// and several other URIs. Then, if the an attacker had control over a specific URI on the phone, they could force the redirect to occur with the access token, resulting in a major compromise. authorizedTypes list, which is found in the web.config file for ASP.net. Alongside this allowlist, are a specific list of denied types from allowed namespaces that are known to be dangerous, such as the System.Workflow.ComponentModel.Compiler option. The post is finding a way to circumvent this allowlist and denylist. Compile() function is offered by the WorkflowCompiler for building applications, based on specific parameters. But, this allowed namespace is heavily locked down via the denylist for the types that can be used within it. Since denylists are hard to get right, is there a way around this? WorkflowCompiler functionality is implemented within WorkflowCompilerInternal. The WorkflowCompilerInternal code does not have the same denylist as the other one and is implicitly allowed via another option in the list. This means that we can access the bulk of the WorkflowCompiler functionality through the internal version!Compile operation can be directly called via the WorkflowCompilerInternal function. Using this function, code can be compiled without the specific restrictions, allowing for arbitrary code to be ran without a workflow on the server. The full POC and walkthrough of the exploit are in the article. .%2e/, which should have been normalized to the normal directory. For whatever reason, this was URL decoded down the road but not properly sanitized. .%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/etc/passwd could be used to escape the web server root to bring back the password file. A directory traversal in Apache in 2021; that is insane! Here is a proof of concept. URL parsing is extremely difficult!. (period) appears to be removed. PATH_MAX value), the extraction process for the archive utility would get confused. quarantine attribute was missing on some of the files. This seems bad! quarantine attribute. Short enough to execute the binary. Finally, short enough to be found by finder. PATH_MAX. PATH_MAX is found length is found out the attribute setting. CreateFile with a "NO SUCH FILE" or "PATH NOT FOUND" result could potentially be a bug. C:\ProgramData\ASUS\GamingCenterLib\ were not properly configured. The DLL hijacking will go through multiple directories (including the ProgramData) once it cannot find the original DLL. C:\ProgramData\ASUS\GamingCenterLib\ directory. Options->Enable Boot Loggin for ProcMon to see the loading process of the binary. Otherwise, they may not have found the bug. MODAPI.sys driver, which is open source. T _LSTAR register is used to transition from user-mode to kernel-mode. By playing with this register, we can direct what happens after a syscall, which gives us code execution in ring-0. Again, game over. $ echo "test e-mail" | mail -s "subject" user@example.org. However, this code has a deadly flaw in it!mail command has the ability to execute code if "~!" is included in the command. In the case of fail2ban, a parameter was being included in the mail command that that allowed for code execution. whois. How do we even control this? Asking an ISP to add a particular did not work, as they only change things for groups. They span up their own WhoIs server in order to attempt to run this exploit. mailutils command.