Friday, August 3, 2018
2017 Chevrolet Corvette Zora ZR1 Release Date And Engine Specs
2017 Chevrolet Corvette Zora ZR1 Release Date And Engine Specs
A couple weeks ago a vulnerability was posted for the dlink DCS-9xx series of cameras. The author of the disclosure found that the setup application that comes with the camera is able to send a specifically crafted request to a camera on the same network and receive its password in plaintext. I figured this was a good chance to do some analysis and figure out exactly how the application carried out this functionality and possibly create a script to pull the password out of a camera.
The basic functionality of the application is as follows:
- Application sends out a UDP broadcast on port 5978
- Camera sees the broadcast on port 5978 and inspects the payload � if it sees that the initial part of the payload contains �FF FF FF FF FF FF� it responds (UDP broadcast port 5978) with an encoded payload with its own MAC address
- Application retrieves the camera�s response and creates another UDP broadcast but this time it sets the payload to contain the target camera�s MAC address, this encoded value contains the command to send over the password
- Camera sees the broadcast on port 5978 and checks that it is meant for it by inspecting the MAC address that has been specified in the payload, it responds with an encoded payload that contains its password (base64 encoded)
After spending some time with the application in a debugger I found what looked like it was responsible for the decoding of the encoded values that are passed:
![]() |
| super exciting screen shot. |
| Command | Comments | |
| .JGE SHORT 0A729D36 | ; stage1 | |
| ./MOV EDX,DWORD PTR SS:[LOCAL.2] | ; set EDX to our 1st stage half decoded buffer | |
| .|MOV ECX,DWORD PTR SS:[LOCAL.4] | ; set ECX to our current count/offset | |
| .|MOV EAX,DWORD PTR SS:[LOCAL.3] | ; set EAX to our base64 encoded payload | |
| .|MOVSX EAX,BYTE PTR DS:[EAX] | ; set EAX to the current value in our base64 payload | |
| .|MOV AL,BYTE PTR DS:[EAX+0A841934] | ; set EAX/AL to a hardcoded offset of its value table is at 0a841934 | |
| .|MOV BYTE PTR DS:[ECX+EDX],AL | ; ECX = Offset, EDX = start of our half-decoded buffer, write our current byte there | |
| .|INC DWORD PTR SS:[LOCAL.4] | ; increment our offset/count | |
| .|INC DWORD PTR SS:[LOCAL.3] | ; increment our base64 buffer to next value | |
| .|MOV EDX,DWORD PTR SS:[LOCAL.4] | ; set EDX to our counter | |
| .|CMP EDX,DWORD PTR SS:[ARG.2] | ; compare EDX (counter) to our total size | |
| .JL SHORT 0A729D13 | ; jump back if we have not finished half decoding our input value | |
| .MOV ECX,DWORD PTR SS:[ARG.3] | ; Looks like this will point at our decoded buffer | |
| .MOV DWORD PTR SS:[LOCAL.5],ECX | ; set Arg5 to our decoded destination | |
| .MOV EAX,DWORD PTR SS:[LOCAL.2] | ; set EAX to our half-decoded buffer | |
| .MOV DWORD PTR SS:[LOCAL.3],EAX | ; set arg3 to point at our half-decoded buffer | |
| .MOV EDX,DWORD PTR SS:[ARG.4] | ; ???? 1500 decimal | |
| .XOR ECX,ECX | ; clear ECX | |
| .MOV DWORD PTR DS:[EDX],ECX | ; clear out arg4 value | |
| .XOR EAX,EAX | ; clear out EAX | |
| .MOV DWORD PTR SS:[LOCAL.6],EAX | ; clear out local.6 | |
| .JMP SHORT 0A729DAE | ; JUMP | |
| link download
Subscribe to:
Post Comments (Atom)
|

No comments:
Post a Comment
Note: Only a member of this blog may post a comment.