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!
0x64 + (0x1c * n) and 0x68 + (0x1c * n) for N in 0..255. From experimentation, they learned that wIndex to 3 with a class request will treat the uint at 0ffset 184 in the State as a code pointer and execute it. In that location, there's a counter called ep0_txbuff_offs that can be used.blx r0, which will jump to the address at r0 which is an argument in the USB::HandlePendingSetup call. This means that the USB setup packet will run as ARM code! The DFU buffer is 136 bytes, which is more than enough instructions to get stable code execution.withdraw() function to determines the amount of Ether that can be withdrawn. Prior to performing the withdraw, the contract may not have the funds to perform it with the proper token. So, it may take out a flashloan from balancer in order to do this. withdraw() always sends the full amount, since the difference is extremely large. receiveFlashLoan. buyItem() can be used to purchase existing listings to be bought for no fee on the NFT platform. The function signature is buyItem(nftAddress, tokenId, owner, quantity). quantity parameter is NOT zero. When multiplying the per-item price with the quantity, providing a zero would result in a cost of zero. <esi:>, which produced 500 errors. Additionally, the Burp Suite scanner found that it was possible since the comments were being removed but everything else was kept.<!--esi .... --> within a payload to bypass the parsing and still get the ESI parsed. I don't know HOW this get parsed but the comment seems to simply be removed. Now, the WAF doesn't stop it and the payload works.um6k<!--esi $(QUERY_STRING{countryCode}) --><!--esx-->ekdi&countryCode="}};prompt.call(null,origin);//US. The idea is to use the comment to make the WAF not block it then reference the countryCode parameter in the URL with the QUERY_STRING code to get XSS. Since ESI is so powerful, we can concatenate strings and do lots of things.HTTP_COOKIE could not be referenced because of weird transformations. So, they used the function url_decode within ESI. Akamai doesn't see this as an issue and does no transformations on it. They used the SSRF to their own site with the cookie to exfiltrate it.application/json endpoint, meaning the XSS approach wouldn't work. So, they simply changed the content type using ESI (lolz) using the add_header function. They even found a few of these until the company told them to stop looking for ESI injection bugs!iamadmin in the name. This is different than the standard iamv2/api/iam API. Besides the name change, the functionality was completely different as well; the service name was AWSIdentityManagementAdminService instead of AWSIdentityManagementV20100508.ListMFADevicesForMultipleUsers vs. iam:ListMFADevices. The authors SigV4 signed the request and it worked as expected. But what didn't work? CloudTrail!ListMFADevicesForMultipleUsers endpoint did not log in CloudTrail at all. They expanded this concept to many of the APIs on the same service as well. The functionality was only possible on the nonmutable functions though. This undocumented API allowed them to make calls not logged. Time to avoid detection! dtprintinfo since it had a track record of bad bugs.cat /dev/urandom > ~/.printers as their fuzzer! By doing, they immediately found a bunch of crashes. So, what happened? dtprintinfo caused a bunch of problems. By manipulating the contents with fake printers, it was possible to read heap memory of the setuid root binary. Additionally, being able to pass in printers is NOT something that should be possible as a lower privileged user and opens up a new attack surface.strcat that was triggering a crash. IS file and through it into hexdump. The beginning of it appears to be a hash and the rest of it looks like junk. They through the rest of the file into CyberChef with Shannon Entropy turned on in order to determine if the file was encrypted. Since the randomness is high, the file is likely encrypted.EABackgroundService.exe. Even cooler, Process Monitor will show the stack at the time of execution. This allows for decrypted data to be seen and for us to identify the region of code that executes these steps. Pretty neat!EVP_aes_256_cbc(), which is from the OpenSSL library. Nice! Now we know how these operations are being performed.SHA3_256("allUsersGenericId" + "IS") was the code used to generate the IV."allUsersGenericId" + "IS" + "a2a0ad25aa3556c035b34ea63863794e54ad5b53" was the string used for hashing. The first two are constants but the final string looks weird. Since this is 160, it must be a SHA-1 hash. Looking into the code for the function evp_SHA1 turns up a single function. While in this function, it appears to be taking a SHA1 hash of the hardware information.OpcodeDataSize is lager than 38. In opcode 7, the same issue occurs in a call to memmove on the same parameter for a size larger than 22 to the stack.