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!
manifest file that lists URLs that the browser should cache for the application. With the file, there are a few sections: Cache, Network and Fallback. The Cache is for files being downloaded, the network is for allowlisted resources that need a connection to the server and the fallback is what to do is the resource is inaccessible. For more on this, visit Mozilla./me endpoint on Facebook redirected to /victim, then the proper username had been found. However, if this resulted in an error message, this was NOT in the allowlisted set of domains. Because the redirect was rejected, this helps us know if the user is logged in AND which user they are. a*, b*...m*. If this works, cut the range in half. If it does not work, then use [n-z]. Continue this process until the character has been found. force-cache flag for cache, the request would be made locally from the browser, instead of the endpoint. No, it's all a matter of time to get the CSRF token!process.twig. This means that it will apply a Twig rendering pass on the content before serving the page. The rendering step is not sandboxed, at all. {{ system("id") }} will easily pop a shell after the function has been redeclared! Now, an author of content can pop a shell with template injection. tmpfs in order to make their life easier. Later on, they noticed that the mount point was mounted at /run instead of /var/run. /var/run is a symlink to ../run the author had an interesting question: how does containerd/runc ensure that moutns are inside the container rootfs? securejoin.SecureJoinVFS check to ensure the mount is within the proper host. mount target but not the mount source. Because of this, we can mount a directory containing a symlink over a K8S volume. Then, on the next mount, use this as the source to give access to the root file system. tmpfs in a C binary. While running this code, start another container and hope that the name swap as done at the perfect time to bypass the security check but have the wrong location. overwolfstore://app/apps/<img src=x onerror=alert(document.location)>/4. overwolf-extensions:// URI scheme was opening browsers via a direct call to CreateProcess. However, the application itself was calling the binary and using this to open up the browser. By replacing this parameter with another application, such as calc.exe, another application was ran! The issue was that no parameters could be provided to the binary.overwolf-extensions://, another piece of dangerous functionality was found: overwolf.io.writeFileContents. This gave access to an arbitrary file write primitive, allowing for bat files to be created.