Ô´´ | Ripple20£ºTreck TCP/IPºÍ̸ջ·ì϶·ÖÎöÓëÑéÖ¤
°ä²¼¹¦·ò 2020-06-30Ò»¡¢Ã½½é
¹ú±í°²È«×êÑÐÈËÔ±ÔÚÓÉTreck¿ª·¢µÄTCP/IPºÍ̸ջÖз¢ÏÖÁ˶à¸ö·ì϶£¬£¬£¬£¬£¬£¬£¬£¬ÕâһϵÁзì϶ͳ³ÆÎªRipple20¡£¡£¡£¡£¡£¡£¡£¡£ÕâЩ·ì϶¿í·º´æÔÚÓÚǶÈëʽºÍÎïÁªÍøÉ豸ÖУ¬£¬£¬£¬£¬£¬£¬£¬Ó°ÏìÁ˶à¸öÐÐÒµÁìÓò£¨Ô̺¬Ò½ÁÆ¡¢ÔËÊä¡¢ÄÜÔ´¡¢µçÐÅ¡¢¹¤Òµ½ÚÔì¡¢ÁãÊÛºÍóÒ׵ȣ©£¬£¬£¬£¬£¬£¬£¬£¬Éæ¼°Á˶à¶à¹©¸øÉÌ£¨Ô̺¬HP¡¢Schneider Electric¡¢Intel¡¢Rockwell Automation¡¢Caterpillar¡¢BaxterµÈ£©¡£¡£¡£¡£¡£¡£¡£¡£
ÕâЩ·ì϶ԴÓÚRipple20µÄ¶à¸öºÍ̸£¨Ô̺¬IPv4¡¢ICMPv4¡¢IPv6¡¢IPv6OverIPv4¡¢TCP¡¢UDP¡¢ARP¡¢DHCP¡¢DNS»òÒÔÌ«ÍøÁ´Â·²ã£©ÔÚ´¦ÖÃÍøÂ籨ÎÄ·¢ËÍʱ´æÔÚȱµã£¬£¬£¬£¬£¬£¬£¬£¬ÆäÖÐÔ̺¬ËĸöÑϳÁ·ì϶£¬£¬£¬£¬£¬£¬£¬£¬ËüÃǵÄCVE±àºÅ±ðÀëΪCVE-2020-11896¡¢CVE-2020-11898¡¢CVE-2020-11910¡¢CVE-2020-11911¡£¡£¡£¡£¡£¡£¡£¡£CVE-2020-11896£¨CVSSÆÀ·Ö10£©¿Éµ¼ÖÂÔ¶³ÌÖ´ÐдúÂ룬£¬£¬£¬£¬£¬£¬£¬CVE-2020-11897£¨CVSSÆÀ·Ö10£©¿Éµ¼ÖÂÔ½½çдÈ룬£¬£¬£¬£¬£¬£¬£¬CVE-2020-11901£¨CVSSÆÀ·Ö9£©¿Éµ¼ÖÂÔ¶³ÌÖ´ÐдúÂ룬£¬£¬£¬£¬£¬£¬£¬CVE-2020-11898£¨CVSSÆÀ·Ö9.1£©¿Éµ¼ÖÂй¼ûô¸ÐÐÅÏ¢¡£¡£¡£¡£¡£¡£¡£¡£ÆäËü15¸öRipple20·ì϶µÄÑϳÁˮƽ¸÷±ð£¬£¬£¬£¬£¬£¬£¬£¬CVSSÆÀ·Ö±ðÀë´Ó3.1µ½8.2¡£¡£¡£¡£¡£¡£¡£¡£
ÓÉÓÚÎïÁªÍøÉ豸¹©¸øÁ´µÄ¸öÐÔ£¬£¬£¬£¬£¬£¬£¬£¬·ì϶ӰÏìµÄÉ豸¶à¶à£¬£¬£¬£¬£¬£¬£¬£¬Ó°ÏìÁìÓò¹ãÇÒ³ÖÐø¹¦·ò³¤£¬£¬£¬£¬£¬£¬£¬£¬·ì϶½¨¸´µÄÖ´ÐнÏÄÑÌâ¡£¡£¡£¡£¡£¡£¡£¡£Òò¶ø£¬£¬£¬£¬£¬£¬£¬£¬8827Ì«Ñô¼¯ÍÅADLabµÚÒ»¹¦·ò¶ÔÓйطì϶½øÐÐÁË·ÖÎö²¢Ìá³öÁË·À±¸½¨Òé¡£¡£¡£¡£¡£¡£¡£¡£
¶þ¡¢ºÍ̸ջ¼ì²â
ÓÉÓÚѡȡTreckºÍ̸ջµÄ³§¼Ò½Ï¶à£¬£¬£¬£¬£¬£¬£¬£¬ÓÐЩ³§¼ÒÊÇÓ²¼þIPºËµÄ·½Ê½ÒýÓÃÁËTreckºÍ̸ջ¡£¡£¡£¡£¡£¡£¡£¡£µ¥´¿Í¨¹ýÉè±¸Ö¸ÎÆÀ´¼ø±ð·ì϶ÊDz»¼°µÄ£¬£¬£¬£¬£¬£¬£¬£¬ÈôºÎ¼ì²âÖ¸±êÉ豸ÊÇ·ñΪTreckºÍ̸ջ³ÉΪ×ʲúÅŲéµÄ¹Ø¼ü£¬£¬£¬£¬£¬£¬£¬£¬Îª´Ë8827Ì«Ñô¼¯ÍÅADLab°²È«×êÑÐÔ±¶ÔTreckºÍ̸ջ½øÐÐÁËÉî¿Ì·ÖÎö£¬£¬£¬£¬£¬£¬£¬£¬²¢¹«¿ªÁËTreckºÍÌ¸Õ»Ö¸ÎÆ¼ì²â²½Öè·¢ÏÖ·ì϶¡£¡£¡£¡£¡£¡£¡£¡£
TreckºÍ̸ջ×Ô½ç˵ÁËÀàÐÍΪ165(0xa5)µÄICMP°ü£¬£¬£¬£¬£¬£¬£¬£¬²¢Ò»µ©ÊÕµ½165µÄICMP°ü»á»Ø¸´ÀàÐÍΪ166µÄICMP°üÏìÓ¦¡£¡£¡£¡£¡£¡£¡£¡£ÈçÏ´úÂëËùʾ£º
Ê×ÏÈ£¬£¬£¬£¬£¬£¬£¬£¬ÏòÖ¸±ê·¢ËÍ ICMPÒªÇó°ü£¬£¬£¬£¬£¬£¬£¬£¬ÆäÖÐtype=0xa5£¬£¬£¬£¬£¬£¬£¬£¬code=0¡£¡£¡£¡£¡£¡£¡£¡£ÈçÏÂͼËùʾ£º
¶øºó£¬£¬£¬£¬£¬£¬£¬£¬½Ó¹ÜÖ¸±ê·µ»ØµÄicmpÏìÓ¦°üÊý¾Ý£¬£¬£¬£¬£¬£¬£¬£¬ÆäÖÐtype =0xa6,code =0£¬£¬£¬£¬£¬£¬£¬£¬ICMP±¨ÎĵÚ9×Ö½ÚºóµÄÁù¸ö×Ö½ÚΪ0x01,0x51,0x35,0x28,0x57,0x32(´ó¶Ë)»ò0x51,0x01,0x28,0x35,0x32,0x57(Ó×¶Ë£©¡£¡£¡£¡£¡£¡£¡£¡£
Âú×ãÉÏÊöµÄǰÌᣬ£¬£¬£¬£¬£¬£¬£¬ÔòÅúÖõÖ¸±êÉ豸Ϊtreck ºÍ̸ջ¡£¡£¡£¡£¡£¡£¡£¡£ÈçÏÂͼËùʾ£º
Èý¡¢·À±¸½¨Òé
1¡¢ÀûÓøüÐÂ
ʵʱ¸üе½Treck TCP/IPºÍ̸ջÈí¼þµÄ×îв»±ä°æ±¾£¨6.0.1.67»ò¸ü¸ß°æ±¾£©¡£¡£¡£¡£¡£¡£¡£¡£
2. ×èÖ¹Òì³£IPÁ÷Á¿
Äܹ»Í¨¹ýÉî¶ÈÊý¾Ý°ü²é³À´×èÖ¹ÍøÂç¹¥»÷£¬£¬£¬£¬£¬£¬£¬£¬ÒÔÏÂÊÇÄܹ»Êʵ±ÀûÓÃÓÚÍøÂç»·¾³ÖеĿÉÄÜ»º½â´ëÊ©£¬£¬£¬£¬£¬£¬£¬£¬¹ýÂËÑ¡ÏîÔ̺¬£º
¡ñ ÈôÊÇÍøÂç»·¾³²»Ö§³Ö£¬£¬£¬£¬£¬£¬£¬£¬Ôò¹æ·¶»¯»ò»Ø¾øIP·Ô쬵ÄÊý¾Ý°ü£¨IP·Ô쬣©
¡ñ ÈôÊDz»±ØÒª£¬£¬£¬£¬£¬£¬£¬£¬Çë½ûÓûò×èÖ¹IPËí·£¨IPv6-in-IPv4»òIP-in-IPËí·£©
¡ñ ×èÖ¹IPԴ·ÓɺÍËùÓв»ÔÞ³ÉʹÓÃIPv6µÄÖ°ÄÜ£¬£¬£¬£¬£¬£¬£¬£¬ÀýÈç·ÓɱêÍ·
¡ñ Ç¿ÔìÖ´ÐÐTCP²é³²¢»Ø¾øÌåʽÃýÎóµÄTCPÊý¾Ý°ü
¡ñ ×èֹδʹÓõÄICMP½ÚÔìÐÂÎÅ£¬£¬£¬£¬£¬£¬£¬£¬ÀýÈçMTU¸üк͵ØÖ·ÑÚÂë¸üÐÂ
¡ñ ͨ¹ý°²È«µÄµÝ¹é·þÎñÆ÷»òÀûÓòã·À»ðǽ¹æ·¶DNS
¡ñ È·±£ÍøÂç»·¾³ÖÐʹÓõÄÊÇ¿¿µÃסµÄOSIµÚ2²ãÉ豸£¨ÒÔÌ«Íø£©
¡ñ ͨ¹ýDHCPÕìÌýµÈÖ°ÄÜÌṩDHCP / DHCPv6°²È«ÐÔ
¡ñ ÈôÊÇδÔÚ»¥»»»ù´¡¼Ü¹¹ÖÐʹÓ㬣¬£¬£¬£¬£¬£¬£¬Ôò½ûÓûò×èÖ¹IPv6¶à²¥¡£¡£¡£¡£¡£¡£¡£¡£
ËÄ¡¢ÓйظÅÏë½éÉÜ
1¡¢IP·Ôì¬
IP·Ôì¬Ê¹µÃÔÚÍøÂçÖз¢ËÍ´óµÄIP°ü³ÉΪ¿ÉÄÜ£¬£¬£¬£¬£¬£¬£¬£¬¼´±ãÆä´óÓ×´óÓÚÍøÂçÌØ¶¨Á´Â·ÖÐÔÊÐíµÄ×î´óÖµ¡£¡£¡£¡£¡£¡£¡£¡£IP·Ô쬼¼ÊõÊÇÒ»ÖÖ½«Êý¾Ý°ü·Ö³É¼¸¸ö½ÏÓ׵IJ¿ÃÅÒÔÖ§³Öͨ¹ýÕâЩÁ´Â·ºÍÍøÂç´«ÊäµÄ¼¼Êõ¡£¡£¡£¡£¡£¡£¡£¡£¸ÃºÍ̸֧³ÖÔÚ·¢ËͶ˽øÐзÔ쬣¬£¬£¬£¬£¬£¬£¬£¬¶øºóÔڽӹܶ˶ԷÔ쬳ÁÐÂ×éºÏ¡£¡£¡£¡£¡£¡£¡£¡£ÕâÔÊÐí·ÖÆçµÄ°üÔÚÍøÂçÖÐÁãÉ¢µØ´«Ê䣬£¬£¬£¬£¬£¬£¬£¬²¢ÔÚÁíÒ»²àÕýÈ·µØ³ÁÐÂ×é×°¡£¡£¡£¡£¡£¡£¡£¡£
·ÖÆçµÄ°üʹÓÃIPÍ·Öеıêʶ×ֶΣ¨Identification£©½øÐзÖ×é¡£¡£¡£¡£¡£¡£¡£¡£´Ë±êʶ×Ö¶ÎÃèÊö·Ôì¬ÊôÓÚÄĸö°ü¡£¡£¡£¡£¡£¡£¡£¡£Í³Ò»¸ö°üµÄ¶à¸ö·Ô쬵ÄIdentificationÊÇÒ»ÑùµÄ¡£¡£¡£¡£¡£¡£¡£¡£IPv4ͨ¹ýFlags¼°Fragment Offset×ֶζԷÔ쬽øÐÐÖÎÀí£¬£¬£¬£¬£¬£¬£¬£¬FlagsÓÉR¡¢DF¡¢MFÈý²¿ÃÅ×é³É£º
¡ñ R£¨Reserve bit£©±£ÁôδÓÃ
¡ñ DF (Don't Fragment) DF =1£º²»ÈÝ·Ôì¬ , DF =0£ºÔÊÐí·Ôì¬
¡ñ MF (More Fragment) MF =1£º·Ç×îºóһƬ, MF =0£º×îºóһƬ(»òδ·Ôì¬)
Fragment Offset(13λ)£ºÒ»¸öIP·Ö×é·Ô쬷â×°ÔIP·Ö×éÊý¾ÝµÄÏà¶ÔÆ«ÒÆÁ¿, Æ¬Æ«ÒÆ×Ö¶ÎÒÔ8×Ö½ÚΪµ¥Ôª¡£¡£¡£¡£¡£¡£¡£¡£IP°ü½á¹¹ÈçÏÂͼËùʾ£º
2¡¢IPËí·¼¼Êõ
IPËí·ÔÊÐíÁ½¸ö¶ÀÁ¢ÍøÂçÖ®¼äµÄÐé¹¹µãµ½µãÁ´Â·¡£¡£¡£¡£¡£¡£¡£¡£ËüÊÇͨ¹ý½«°ü£¨¿ÉËùÒÔIP°ü£©·â×°ÔÚÁíÒ»¸ö°üÖÐÀ´ÊµÏֵ쬣¬£¬£¬£¬£¬£¬£¬Ê¹µÃÄÚ²¿°üÓµÓÐÓë±í²¿°ü·ÖÆçµÄÔ´µØÖ·ºÍÖ¸±êµØÖ·¡£¡£¡£¡£¡£¡£¡£¡£±í²¿°üµÄÔ´µØÖ·ºÍÖ¸±êµØÖ·ÊÇËí·¶Ëµã£¬£¬£¬£¬£¬£¬£¬£¬ÄÚ²¿°üÖеĵØÖ·ÓÃÓÚËí·Á½¶ËµÄÍøÂç·ÓÉ¡£¡£¡£¡£¡£¡£¡£¡£Ëí·Èë¿ÚµãÊǽӹÜӦͨ¹ýËí·ת·¢µÄIPÊý¾Ý°üµÄ½Úµã¡£¡£¡£¡£¡£¡£¡£¡£Ëü½«´ËÊý¾Ý°ü·â×°ÔÚ±í²¿IPÊý¾Ý°üÖС£¡£¡£¡£¡£¡£¡£¡£µ±Êý¾Ý°ü´ïµ½Ëí·³ö¿Úµãʱ£¬£¬£¬£¬£¬£¬£¬£¬Ëü±»½â·â×°²¢×ª·¢£¬£¬£¬£¬£¬£¬£¬£¬¾ÍÈçͬËüÊÇÔÚÖ¸±êÍøÂçÖз¢Ë͵ÄͨÀýÊý¾Ý°üÒ»Ñù¡£¡£¡£¡£¡£¡£¡£¡£IP-in-IP°üÈçÏÂͼËùʾ£º
IPËí·¼¼ÊõÖØÒªÀûÓÃÔÚÐ鹹רÓÃÍø£¨VPN£©¼¼ÊõÖС£¡£¡£¡£¡£¡£¡£¡£Ä¿Ç°Óм¸ÖÖËí·ºÍ̸£¬£¬£¬£¬£¬£¬£¬£¬ÆäÖÐ×îµ¥Ò»ºÍ×î¹ÅÀϵÄÊÇIP-in-IP£¨IPºÍ̸±àºÅ4£©¡£¡£¡£¡£¡£¡£¡£¡£IP-in-IPÊÇÒ»ÖÖIPËí·ºÍ̸£¬£¬£¬£¬£¬£¬£¬£¬ÆäÖÐÒ»¸öIP°üͨ¹ýÔö³¤Ò»¸ö±í²¿IP±¨Í·£¨ÆäÔ´µØÖ·ºÍÖ¸±êµØÖ·±ðÀëµÅ×ÚËí·µÄÈë¿ÚµãºÍ³ö¿Úµã£©·â×°ÔÚÁíÒ»¸öIP°üÖС£¡£¡£¡£¡£¡£¡£¡£ÄÚ²¿Êý¾Ý°üδ±»Åú¸Ä£¬£¬£¬£¬£¬£¬£¬£¬±í²¿IPÍ·´ÓÄÚ²¿IPÍ·¸´ÔìһЩ×ֶΡ£¡£¡£¡£¡£¡£¡£¡£±í²¿±¨Í·µÄIPºÍ̸ºÅΪ4¡£¡£¡£¡£¡£¡£¡£¡£IP-in-IP±¨ÎÄʾÀýÈçÏÂͼËùʾ£º
Îå¡¢TreckºÍ̸ջ
1¡¢ºÍ̸ջ¸ÅÊö
TreckºÍ̸ջͨ¹ýtsPacket½á¹¹À´ÃèÊö°ü½á¹¹£¬£¬£¬£¬£¬£¬£¬£¬Í¨¹ýtsUserPacket½á¹¹Ö§³ÖÊý¾Ý°ü·Ô쬡£¡£¡£¡£¡£¡£¡£¡£ÕâÁ½¸ö½á¹¹ÌåÔÚtreck/include/trsocket.hÎļþÖнç˵¡£¡£¡£¡£¡£¡£¡£¡£Treck TCP/IPºÍ̸ջÖеİüÊý¾ÝÓÉtsPacketµÄ½á¹¹°µÊ¾¡£¡£¡£¡£¡£¡£¡£¡£Ã¿¸ö°ü¶¼ÓëÒ»¸öÊý¾Ý»º³åÇøÓйØÁª£¬£¬£¬£¬£¬£¬£¬£¬¸ÃÊý¾Ý»º³åÇø±£Áô´Ó½Ó¿ÚÇý¶¯·¨Ê½´ïµ½µÄÔʼÊý¾Ý¡£¡£¡£¡£¡£¡£¡£¡£tsPacket½á¹¹»¹±£ÁôÁíÒ»¸ö³ÆÎªttUserPacketµÄ³ÁÒª½á¹¹£¬£¬£¬£¬£¬£¬£¬£¬ÒÔ¼°Ö¸ÏòtsSharedData½á¹¹µÄÖ¸Õ룬£¬£¬£¬£¬£¬£¬£¬¸Ã½á¹¹Ô̺¬ÍøÂçºÍ̸ջ´¦ÖÃÊý¾Ý°üʱËùÐèµÄÐÅÏ¢£¨Ö¸ÏòÌ×½Ó×ֽṹ¡¢src/dstµØÖ·»ò¶Ë¿ÚµÈµÄÖ¸Õ룩¡£¡£¡£¡£¡£¡£¡£¡£½ç˵ÈçÏ£º
struct tsPacket {
ttUserPacket pktUserStruct;
ttSharedDataPtr pktSharedDataPtr;
struct tsPacket * pktChainNextPtr;
struct tsDeviceEntry * pktDeviceEntryPtr;
union anon_union_for_pktPtrUnion pktPtrUnion;
tt32Bit pktTcpXmitTime;
tt16Bit pktUserFlags;
tt16Bit pktFlags;
tt16Bit pktFlags2;
tt16Bit pktMhomeIndex;
tt8Bit pktTunnelCount;
tt8Bit pktIpHdrLen;
tt8Bit pktNetworkLayer;
tt8Bit pktFiller[1];
};
ÕâÊÇÔ̺¬µÄttUserPacket½á¹¹£¨tsUserPacketµÄtypedef£©£¬£¬£¬£¬£¬£¬£¬£¬½ç˵ÈçÏ£º
struct tsUserPacket {
void * pktuLinkNextPtr; // Next tsUserPacket for fragmented data
ttUser8BitPtr pktuLinkDataPtr;
ttPktLen pktuLinkDataLength;
ttPktLen pktuChainDataLength;
int pktuLinkExtraCount;
};
pktuLinkNextPtr £ºÓÃÓÚ¸ú×ÙÊý¾Ý°üÖеķÔ쬡£¡£¡£¡£¡£¡£¡£¡£´Ë×Ö¶ÎÖ¸Ïò°µÊ¾ÏÂÒ»¸ö·Ô쬵ÄÁíÒ»¸ötsPacket½á¹¹£¬£¬£¬£¬£¬£¬£¬£¬¸ÃtsPacket»¹±£Áô¶ÔÏÂÒ»¸ö·Ô쬵ÄÒýÓ㬣¬£¬£¬£¬£¬£¬£¬ÈôÊÇ´ËÁ´½ÓÊÇ×îºóÒ»¸ö·Ô쬣¬£¬£¬£¬£¬£¬£¬£¬»òÕßÊý¾Ýδ±»·Ô쬣¬£¬£¬£¬£¬£¬£¬£¬Ôò´Ë×ֶν«ÎªNULL¡£¡£¡£¡£¡£¡£¡£¡£
pktuLinkDataPtr£ºÖ¸Ïòµ±Ç°·Ô쬵ÄÊý¾Ý»º³åÇø¡£¡£¡£¡£¡£¡£¡£¡£µ±TreckºÍ̸ջÔÚ·ÖÆç½×¶Î´¦ÖÃÊý¾Ý°üʱ£¬£¬£¬£¬£¬£¬£¬£¬Êý¾Ý»º³åÇøÖмòÖ±ÇеØÎ»»á²úÉú±ä¶¯£¬£¬£¬£¬£¬£¬£¬£¬ÕâÈ¡¾öÓÚµ±Ç°ÔÚ´¦ÖõÄÊý¾Ý°üµØµãºÍ̸²ã¡£¡£¡£¡£¡£¡£¡£¡£ÀýÈ磬£¬£¬£¬£¬£¬£¬£¬µ±TreckºÍ̸ջ´¦ÖÃÒÔÌ«Íø²ã£¨ÔÚtfEtherRecv()º¯ÊýÖУ©Ê±£¬£¬£¬£¬£¬£¬£¬£¬´Ë×Ö¶ÎÖ¸ÏòÒÔÌ«Íø±¨Í·¡£¡£¡£¡£¡£¡£¡£¡£
pktuLinkDataLength£ºpktuLinkDataPtrÖ¸ÏòµÄÊý¾ÝµÄ´óÓ×£¬£¬£¬£¬£¬£¬£¬£¬¼´µ¥¸ö·Ô쬵ĴóÓס£¡£¡£¡£¡£¡£¡£¡£
pktuChainDataLength£º°µÊ¾Ô̺¬ËùÓзÔ쬵ÄÊý¾Ý°ü³¤¶È£¬£¬£¬£¬£¬£¬£¬£¬¼´Êý¾Ý°üµÄ×Ü´óÓס£¡£¡£¡£¡£¡£¡£¡£ËüֻΪµÚÒ»¸ö·Ôì¬ÉèÖᣡ£¡£¡£¡£¡£¡£¡£ÈôÊÇÊý¾ÝûÓзÔ쬣¬£¬£¬£¬£¬£¬£¬£¬ÔòµÅ×ÚpktuLinkDataLength¡£¡£¡£¡£¡£¡£¡£¡£
2¡¢ºÍ̸ջ´¦Öùý³Ì
ºÍ̸ջÖеÄÒ»¸ö³£¼ûģʽÊÇÔÚºÍ̸ջÖеIJãÖ®¼äÒÆ¶¯Ê±µ÷ÕûpktuLinkDataPtrÖ¸Õë¡£¡£¡£¡£¡£¡£¡£¡£ÀýÈ磬£¬£¬£¬£¬£¬£¬£¬ÈôÊÇ8827Ì«Ñô¼¯ÍŰüÊÇÒ»¸öICMP»ØÏÔÒªÇó°ü£¨ping£©£¬£¬£¬£¬£¬£¬£¬£¬ËüµÄºÍ̸ÓÉÈý²ã×é³É£ºEthernet¡¢IPv4¡¢ICMP¡£¡£¡£¡£¡£¡£¡£¡£ÔÚÕâÖÖÇé¿öÏ£¬£¬£¬£¬£¬£¬£¬£¬µ±´¦ÖÃÒÔÌ«Íø²ã£¨ÔÚtfEtherRecv()º¯ÊýÖУ©Ê±£¬£¬£¬£¬£¬£¬£¬£¬pktuLinkDataPtrÖ¸ÏòÒÔÌ«Íø±¨Í·µÄÆðÍ·£¬£¬£¬£¬£¬£¬£¬£¬¶øºóÔÚÒÆ¶¯µ½ÏÂÒ»²ã֮ǰ£¬£¬£¬£¬£¬£¬£¬£¬Ê¹ÓÃÒÔÏ´úÂë¶ÔÆä½øÐе÷Õû£¬£¬£¬£¬£¬£¬£¬£¬ÈçÏ´úÂëËùʾ£º
ÔÚ±¾ÀýÖУ¬£¬£¬£¬£¬£¬£¬£¬0xe£¨Ê®½øÔìΪ14£©ÊÇÒÔÌ«Íø±¨Í·£¨6£¨dst MAC£©+6£¨src MAC£©+2£¨etherType£©£©µÄ´óÓס£¡£¡£¡£¡£¡£¡£¡£µ±tfEtherRecv()º¯ÊýʵÏÖ°ü´¦ÖÃʱ£¬£¬£¬£¬£¬£¬£¬£¬Ëü½«°üת·¢µ½ÏÂÒ»²ã´¦Öᣡ£¡£¡£¡£¡£¡£¡£Ö§³ÖµÄÒÔÌ«ÍøÀàÐÍÓÐARP¡¢IPv4ºÍIPv6¡£¡£¡£¡£¡£¡£¡£¡£ÈçÏ´úÂëËùʾ£º
ÔÚʾÀýÖУ¬£¬£¬£¬£¬£¬£¬£¬µ±IPv4²ã½Ó¹Üµ½Êý¾Ý°ü£¨ÔÚº¯ÊýtfIpIncomingPacket()º¯ÊýÖУ©Ê±£¬£¬£¬£¬£¬£¬£¬£¬Ö¸ÕëpktuLinkDataPtrÒѾָÏòIP±¨Í·¡£¡£¡£¡£¡£¡£¡£¡£´«ÈëÊý¾ÝÓÉÓµÓÐÒ»Ñù¶¨ÃûÔ¼¶¨tf*IncomingPacketµÄº¯Êý´¦Ö㬣¬£¬£¬£¬£¬£¬£¬ÆäÖÐ*ÊǺÍ̸Ãû¡£¡£¡£¡£¡£¡£¡£¡£¶ÔÓÚICMP°üÀ´Ëµ£¬£¬£¬£¬£¬£¬£¬£¬ËüÓÉÈý²ãºÍ̸×é³É£¨Ethernet/IPv4/ICMP£©£¬£¬£¬£¬£¬£¬£¬£¬Êý¾Ý°ü½«Óɺ¯ÊýtfEtherRecv¡¢tfIpIncomingPacketºÍtfIcmpIncomingPacketº¯Êý±ðÀë´¦Öᣡ£¡£¡£¡£¡£¡£¡£
3¡¢·Ô쬳Á×é
TreckºÍ̸ջÔÚtfIpReassemblePacket()º¯ÊýÖд¦Ö÷Ô쬵ijÁ×飬£¬£¬£¬£¬£¬£¬£¬¸Ãº¯ÊýÓÉtfIpIncomingPacket()ŲÓᣡ£¡£¡£¡£¡£¡£¡£Ã¿µ±½Ó¹Üµ½·¢ÍùÉ豸µÄIP·Ôì¬Ê±£¬£¬£¬£¬£¬£¬£¬£¬¾Í»áŲÓô˺¯Êý¡£¡£¡£¡£¡£¡£¡£¡£ÈôÊǶÌȱ·Ô쬣¬£¬£¬£¬£¬£¬£¬£¬º¯Êý½«·µ»ØNULL¡£¡£¡£¡£¡£¡£¡£¡£²»È»£¬£¬£¬£¬£¬£¬£¬£¬ÈôÊÇËùÓзÔ쬶¼´ïµ½²¢ÇÒûÓи¡·º£¬£¬£¬£¬£¬£¬£¬£¬ÔòÍøÂçºÍ̸ջ½«Ê¹ÓÃpktuLinkNextPtr×ֶν«·Ôì¬Á´½ÓÔÚһ·£¬£¬£¬£¬£¬£¬£¬£¬¶øºó½«Êý¾Ý°ü´«µÝ¸øÏÂÒ»²ã½øÇ°½øÒ»²½´¦Öᣡ£¡£¡£¡£¡£¡£¡£Ôڴ˸ߵÍÎÄÖУ¬£¬£¬£¬£¬£¬£¬£¬¡°³Á×顱һ´Ê²¢²»ÁÏζ׎«Êý¾Ý°ü¸´Ôìµ½Â½ÐøµÄ´æ´¢¿é£¬£¬£¬£¬£¬£¬£¬£¬¶øÖ»Êǵ¥Ò»µØ½«ËüÃÇÁ´½Óµ½Ò»¸öÁ´±íÖС£¡£¡£¡£¡£¡£¡£¡£·Ôì¬Êý¾ÝÁ´±í½á¹¹ÈçÏÂͼËùʾ£º
4¡¢tfIpIncomingPacketº¯Êý
tfIpIncomingPacket()º¯ÊýÊÇ´¦ÖÃIP°üµÄÖØÒªº¯Êý£¬£¬£¬£¬£¬£¬£¬£¬¸Ãº¯ÊýÖØÒªÁ÷³ÌÈçÏÂͼËùʾ£º
tfIpIncomingPacket()Ê×ÏÈÅжÏÊý¾Ý°üºÏ·¨ÐÔ¡£¡£¡£¡£¡£¡£¡£¡£tfIpIncomingPacket()º¯Êý³ýÁËÑéÖ¤IPͷУÑéºÍ£¬£¬£¬£¬£¬£¬£¬£¬Ëü»¹½øÐÐÒÔÏÂÑéÖ¤£¬£¬£¬£¬£¬£¬£¬£¬ÈçÏ´úÂëËùʾ£º
¶øºóÈôÊÇËùÓкϷ¨ÐԲ鳶¼Í¨¹ý£¬£¬£¬£¬£¬£¬£¬£¬tfIpIncomingPacket()º¯Êý½«²é³IP±¨Í·ÖÐTotalLength ÊÇ·ñÑϸñÓ×ÓÚÊý¾Ý°üµÄpktuChainDataLength£¬£¬£¬£¬£¬£¬£¬£¬ÕⰵʾÏÖʵ½Ó¹ÜµÄÊý¾Ý±ÈIP±¨Í·ÖÐÉêÃ÷µÄÊý¾Ý¶à¡£¡£¡£¡£¡£¡£¡£¡£ÈôÊÇÊÇÕæµÄ£¬£¬£¬£¬£¬£¬£¬£¬Ôò½øÐн¨¼ô²Ù×÷£¬£¬£¬£¬£¬£¬£¬£¬ÒªÉ¾³ý¶î±íµÄÊý¾Ý£¬£¬£¬£¬£¬£¬£¬£¬ÈçÏ´úÂëËùʾ£º
ÔÙÕßÈôÊÇIPÊý¾Ý°üµÄMFΪ1»òÕßFragment Offset´óÓÚ0£¬£¬£¬£¬£¬£¬£¬£¬ÔòtfIpIncomingPacket()º¯Êý¾ÍҪŲÓÃtfIpReassemblePacket()º¯Êý½øÐзÔ쬳Á×é¡£¡£¡£¡£¡£¡£¡£¡£ÈôÊÇIP·Ôì¬Êý¾Ý½Ó¹Ü²»ÆëÈ«£¬£¬£¬£¬£¬£¬£¬£¬ÔòtfIpReassemblePacket()º¯Êý·µ»ØNULL¡£¡£¡£¡£¡£¡£¡£¡£ÈôÊÇËùÓÐIP·Ô쬶¼´ïµ½²¢ÇÒûÓÐÃýÎ󣬣¬£¬£¬£¬£¬£¬£¬ÔòTreckºÍ̸ջʹÓÃpktuLinkNextPtr×ֶν«ÕâЩ·Ôì¬Á´½ÓÔÚһ·£¬£¬£¬£¬£¬£¬£¬£¬³ÉÁ¢Á´±í£¬£¬£¬£¬£¬£¬£¬£¬²¢½«°ü´«µÝµ½ÏÂÒ»²ã½øÇ°½øÒ»²½´¦Ö㬣¬£¬£¬£¬£¬£¬£¬ÈçÏ´úÂëËùʾ£º
×îºóÈôÊÇÒѾÊÕµ½ÆëÈ«µÄIPÊý¾Ý°ü£¬£¬£¬£¬£¬£¬£¬£¬ÔòtfIpIncomingPacket()º¯Êýƾ¾ÝIPÊý¾Ý°üÖеĺÍ̸×ֶεĺÍ̸ºÅ£¬£¬£¬£¬£¬£¬£¬£¬Å²ÓÃÏàÓ¦µÄºÍ̸°ü´¦Öú¯Êý½øÐд¦Öᣡ£¡£¡£¡£¡£¡£¡£±ÉÈËÁдúÂëÖУ¬£¬£¬£¬£¬£¬£¬£¬µ±ºÍ̸ºÅΪUDPʱ£¬£¬£¬£¬£¬£¬£¬£¬ÔòŲÓÃtfUdpIncomingPacket()º¯Êý£¬£¬£¬£¬£¬£¬£¬£¬µ±Êý¾Ý°üºÍ̸ΪIP-in-IPºÍ̸£¨ºÍ̸ºÅ4£©Ê±£¬£¬£¬£¬£¬£¬£¬£¬»áµÝ¹éŲÓÃtfIpIncomingPacket()º¯Êý£¬£¬£¬£¬£¬£¬£¬£¬´úÂëʵÏÖÈçÏÂËùʾ£º
Áù¡¢·ì϶µÀÀí·ÖÎö
1¡¢CVE-2020-11896
ǰÎÄÒѾ½éÉÜtfIpIncomingPacket()º¯ÊýµÄʵÏÖ¹ý³Ì£¬£¬£¬£¬£¬£¬£¬£¬µÚ¶þ²½µÄÊý¾Ý²Ã¼ôÊÇ·ì϶µÄÔÒò£¬£¬£¬£¬£¬£¬£¬£¬ÈçÏ´úÂëËùʾ£º
pktuLinkDataLength±£Áôµ±Ç°·Ô쬵ĴóÓ×£¬£¬£¬£¬£¬£¬£¬£¬pktuChainDataLength±£ÁôÕû¸öIPÊý¾Ý°üµÄ´óÓס£¡£¡£¡£¡£¡£¡£¡£ÈôÊÇÖ´ÐÐÉÏÊö²Ù×÷£¬£¬£¬£¬£¬£¬£¬£¬½«µ¼ÖÂÒ»¸ö²»Ò»ÖÂÐÔµÄ״̬£¬£¬£¬£¬£¬£¬£¬£¬ÆäÖÐpkt->pktuChainDataLength==pkt->pktuLinkDataLength£¬£¬£¬£¬£¬£¬£¬£¬µ«¿ÉÄÜÓÐpkt->pktuLinkNextPtrÖ¸ÏòÆäËû·Ô쬡£¡£¡£¡£¡£¡£¡£¡£¸ü½øÒ»²½µÄÆäÖÐÁ´±íÉÏ·Ô쬵Ä×ÜÊý¾Ý´óÓ׿ÉÄÜ´óÓÚ´æ´¢ÔÚpktuChainDataLength±äÁ¿ÖеĴóÓס£¡£¡£¡£¡£¡£¡£¡£ÕâÖÖ²Ù×÷µ¼ÖµIJ»Ò»ÖÂÐÔ½«»áµ¼ÖºóÐø±¨ÎÄ´¦ÖòúÉúÒì³£¡£¡£¡£¡£¡£¡£¡£¡£
ͨ¹ýµ¥Ò»µØÉèÖÃÃýÎóµÄIP°ü·Ôì¬ÊÇÎÞ·¨´¥·¢·ì϶µÄ£¬£¬£¬£¬£¬£¬£¬£¬ÓÉÓڲüô¹ýºóµÄ·Ôì¬Êý¾ÝÔÚºóÐøµÄtfIpReassemblePacket()º¯Êý²Ù×÷ÖÐ»áÆ¾¾ÝpktuChainDataLengthµÄ´óÓ×£¬£¬£¬£¬£¬£¬£¬£¬³ÁгÉÁ¢·Ôì¬Á´±í£¬£¬£¬£¬£¬£¬£¬£¬²»»áÔì³É²»Ò»ÖµÄ״̬¡£¡£¡£¡£¡£¡£¡£¡£ÃÎÏëµÄÁ÷³ÌÊÇÏÈʵÏÖ·Ôì¬Á´±íµÄ³ÉÁ¢£¬£¬£¬£¬£¬£¬£¬£¬ÔÙ½øÐÐÁ´±íÊý¾Ý×Ü´óÓ׵IJüôÁ÷³Ì£¬£¬£¬£¬£¬£¬£¬£¬ÕâÑù¾Í»á½øÈë²»Ò»ÖµÄ״̬¡£¡£¡£¡£¡£¡£¡£¡£
ΪÁËÔÚIP²ã´¦Ö÷Ôì¬Êý¾Ý°ü²¢´¥·¢Ö´ÐÐÓÐÎÊÌâµÄÁ÷³Ì´úÂ룬£¬£¬£¬£¬£¬£¬£¬Äܹ»Ê¹ÓÃIP-in-IPÊý¾Ý°ü¡£¡£¡£¡£¡£¡£¡£¡£¶ÔÓÚ·Ô쬵ÄIP-in-IPÊý¾Ý°ü£¬£¬£¬£¬£¬£¬£¬£¬tfIpIncomingPacket()º¯Êý½«ÖÁÉٵݹéŲÓÃÁ½´Î£¬£¬£¬£¬£¬£¬£¬£¬Ò»´ÎÓÃÓÚIPËí·°üµÄÄÚ²ãIPÊý¾Ý°ü£¬£¬£¬£¬£¬£¬£¬£¬ÂÅ´ÎÓÃÓÚ±í²ãIPÊý¾Ý°ü£¨Ã¿´¦ÖÃÒ»¸ö±í²ãIP°ü·Ôì¬Ëã×÷Ò»´Î£©¡£¡£¡£¡£¡£¡£¡£¡£
tfIpIncomingPacket()º¯ÊýÔÚ´¦ÖÃIPËí·Êý¾Ý°üµÄʱ³½½«ÄÚ²¿IPÊý¾Ý°ü×÷Ϊ·Ç·Ôì¬Êý¾Ý°ü½øÐд¦Öᣡ£¡£¡£¡£¡£¡£¡£ÄÚ²¿Êý¾Ý°ü´Ë¿ÌÓɶà¸ö·Ôì¬×é³É£¬£¬£¬£¬£¬£¬£¬£¬µ«ÔÚIP±¨Í·ÖÐÏóÕ÷Ϊ·Ç·Ô쬣¨MF=0£©£¬£¬£¬£¬£¬£¬£¬£¬ËùÒÔËü²»»áÔÙ½øÈëtfIpReassemblePacket()º¯Êý½øÐгÁ×é¡£¡£¡£¡£¡£¡£¡£¡£Ëü´Ë¿ÌÓÉÒ»¸öÁ´±íÖеöµ¥¶ÀµÄtsPacketÁ´½Ó×é³É£¬£¬£¬£¬£¬£¬£¬£¬Ã¿¸öÁ´½Ó¶¼ÓÐÒ»¸öµ¥¶ÀµÄpktuLinkDataLengthÖµ¡£¡£¡£¡£¡£¡£¡£¡£¿£¿£¿£¿£¿£Ë¼¿¼ÏÂÃæµÄÀý×Ó£¬£¬£¬£¬£¬£¬£¬£¬Ëü½«ÓÐÖúÓÚÀí½â·ì϶µÄ³ÉÒò£º
¡ñ Inner IP packet: IPv4{len=32, proto=17}/UDP{checksum=0, len=12}£¬£¬£¬£¬£¬£¬£¬£¬ÆäÖÐÔ̺¬1000×Ö½ÚµÄÊý¾Ý¡¯A¡¯¡£¡£¡£¡£¡£¡£¡£¡£
¡ñ Outer IP packet (fragment 1): IPv4{frag offset=0, MF=1, proto=4, id=0xabcd} ,ÆäÖÐÔ̺¬40×Ö½ÚµÄIPÊý¾Ý¡£¡£¡£¡£¡£¡£¡£¡£
¡ñ Outer IP packet (fragment 2): IPv4{frag offset=40, MF=0, proto=4, id=0xabcd} £¬£¬£¬£¬£¬£¬£¬£¬ÆäÖÐÊý¾Ý¸ººÉΪ988×Ö½Ú¡£¡£¡£¡£¡£¡£¡£¡£
ΪÁËÈÆ¹ýUDPУÑ飬£¬£¬£¬£¬£¬£¬£¬½«Ð£ÑéºÍ×Ö¶ÎchecksumÉèÖÃΪ0¡£¡£¡£¡£¡£¡£¡£¡£Ê·ýÖеķÔ쬽ṹÈçÏÂͼËùʾ£º
µ±TreckºÍ̸ջ´¦ÖÃ±í²¿·Ôì¬Ê±£¬£¬£¬£¬£¬£¬£¬£¬ËüʹÓÃtsUserPacket½á¹¹ÖеÄpktuLinkNextPtr×Ö¶ÎÀ´Á´½ÓËüÃÇ¡£¡£¡£¡£¡£¡£¡£¡£ÈçǰËùÊö£¬£¬£¬£¬£¬£¬£¬£¬µ±tfIpIncomingPacket()º¯Êý´¦ÖÃÄÚ²¿IPÊý¾Ý°ü£¨ºÍ̸Ϊ4£¬£¬£¬£¬£¬£¬£¬£¬IP-in-IP£©Ê±£¬£¬£¬£¬£¬£¬£¬£¬ËüÒѾʵÏÖÁË·Ôì¬Êý¾ÝµÄ³Á×飨ÄÚ²¿IPÊý¾Ý°üÓÉÁ´½ÓÔÚһ·µÄÁ½¸ötsPacket½á¹¹°µÊ¾£©¡£¡£¡£¡£¡£¡£¡£¡£·Ôì¬Êý¾Ý³Á×éºóµÄÁ´±í½á¹¹ÈçÏÂͼËùʾ£º
ÓÉÓÚtfIpIncomingPacket()º¯ÊýÔÚ½øÐÐÓÐЧÐÔÅжÏʱ£¬£¬£¬£¬£¬£¬£¬£¬Ö»Ë¼¿¼tsUserPacketÖеÄpktuChainDataLength×ֶΣ¨¶ø²»ÊÇpktuLinkDataLength£©£¬£¬£¬£¬£¬£¬£¬£¬ËùÒÔÔÚ´¦ÖÃÄÚ²¿IP°üʱ½«½øÈëÃýÎóµÄÁ´±í³¤¶ÈµÄ²Ã¼ôÁ÷³Ì£¬£¬£¬£¬£¬£¬£¬£¬´Ó¶øµ¼ÖÂÁËÎÊÌâ¡£¡£¡£¡£¡£¡£¡£¡£
ÄÚ²¿IP°üͨ¹ýÁËIPÍ·ÆëÈ«ÐԲ鳣¬£¬£¬£¬£¬£¬£¬£¬ÔÚ¸ÃÀý×ÓÖУ¬£¬£¬£¬£¬£¬£¬£¬ÄÚ²¿IP°üµÄ×ܳ¤¶È(32£©Ó×ÓÚÁ´±íÊý¾Ý³¤¶È£¨1000+8+20=1028£©£¬£¬£¬£¬£¬£¬£¬£¬Òò¶øTreckºÍ̸ջ½«³¢ÊÔÃýÎ󵨽¨¼ôÊý¾Ý°ü£¬£¬£¬£¬£¬£¬£¬£¬²½ÖèÊǽ«×Ö¶ÎpktuLinkDataLengthºÍpktuChainDataLengthÉèÖÃΪһÑùµÄÖµipTotalLength£¨ÔÚ8827Ì«Ñô¼¯ÍÅʾÀýÖÐΪ32£©¡£¡£¡£¡£¡£¡£¡£¡£Õâµ¼ÖÂÄÚ²¿IPÊý¾Ý°üÓÉÁ´½ÓÔÚһ·µÄÁ½¸ötsPacket½á¹¹°µÊ¾£¬£¬£¬£¬£¬£¬£¬£¬µ«ËüÃǵÄÊý¾Ý×ܳ¤¶È´óÓÚpktuChainDataLength×ֶΣ¨½¨¼ôºópktuChainDataLength×ֶβ»ÊÇ1028×Ö½Ú£¬£¬£¬£¬£¬£¬£¬£¬¶øÊǵÅ×Ú32£©¡£¡£¡£¡£¡£¡£¡£¡£¾¹ýÊý¾Ý³¤¶È²Ã¼ôºóµÄÁ´±í½á¹¹ÈçÏÂͼËùʾ£º
´Ë¿ÌÒѾʹµÃÁ´±í°×µ½Á˲»Ò»ÖµÄ״̬£¬£¬£¬£¬£¬£¬£¬£¬ÏÂÃæ½«½éÉÜÈôºÎÀûÓÃÕâÖÖ²»Ò»ÖµÄ״̬À´µ¼ÖÂÄÚ´æ·ÛËé¡£¡£¡£¡£¡£¡£¡£¡£
ÔÚTreckºÍ̸ջ´úÂëÖÐÖÁÉÙÓÐÒ»¸ö´úÂëõè¾¶Äܹ»½«·Ôì¬Êý¾Ý¸´Ôìµ½µ¥¸öÂ½Ðø»º³åÇøÖС£¡£¡£¡£¡£¡£¡£¡£¾ßÌåµÄÖ´ÐÐõ辶Ϊ£º
tfUdpIncomingPacket() -> tfSocketIncomingPacket() -> tfCopyPacket()¡£¡£¡£¡£¡£¡£¡£¡£ÏÂÃæµÄ´úÂëÊÇtfSocketIncomingPacket()º¯Êý´¦ÖÃUDPÊý¾Ý±¨µÄ´úÂëµÄÒ»²¿ÃÅ£¬£¬£¬£¬£¬£¬£¬£¬ÈçÏ´úÂëËùʾ£º
Õâ¶Î´úÂëÖÐtfSocketIncomingPacket()º¯ÊýŲÓÃtfGetSharedBuffer()ÉêÇëÄڴ棬£¬£¬£¬£¬£¬£¬£¬Æä´óÓ×»ùÓÚpktuChainDataLength×ֶεÄÖµ£¬£¬£¬£¬£¬£¬£¬£¬¶øºóͨ¹ýtfCopyPacket()º¯Êý½«Êý¾Ý°üµÄ·ÖÆç·Ôì¬Öð¸ö¸´Ô쵽зÖÅäµÄÄÚ´æ¿Õ¼äÖУ¬£¬£¬£¬£¬£¬£¬£¬²úÉúÒç³öµÄ´úÂëÈçÏÂËùʾ£º
ÓÉÓÚÁ½¸ö·Ôì¬ÖеÄpktuLinkDataLengthÖ®ºÍΪ1000×Ö½Ú£¬£¬£¬£¬£¬£¬£¬£¬ºóÐøµÄtfCopyPacketº¯Êý½«»á°Ñ1000×Ö½ÚµÄÊý¾Ý¿½±´µ½Õâ¶ÎÄÚ´æÖУ¬£¬£¬£¬£¬£¬£¬£¬Õ⽫µ¼Ö¶ÑÒç³ö¡£¡£¡£¡£¡£¡£¡£¡£
2¡¢CVE-2020-11898
ÕýÈçǰÎÄÃèÊöÈôºÎ´¥·¢CVE-2020-11896·ì϶ÄÇÑù£¬£¬£¬£¬£¬£¬£¬£¬Treck TCP/IPºÍ̸ջÎÞ·¨ÕýÈ·´¦ÖÃͨ¹ýIP-in-IPËí·´«ÈëµÄIPv4·Ô쬡£¡£¡£¡£¡£¡£¡£¡£ÕâÒ²¿ÉÄÜÔÊÐíδ¾Éí·ÝÑéÖ¤µÄ¹¥»÷Õß´Ó¶ÑÖÐй©ÄÚ´æ¡£¡£¡£¡£¡£¡£¡£¡£¿£¿£¿£¿£¿£Äܹ»Ñ¡È¡ÒÔÏÂʾÀý½øÐзì϶´¥·¢£º
¡ñ ÄÚ²¿IPÊý¾Ý°ü£ºIPv4 {ihl = 0xf£¬£¬£¬£¬£¬£¬£¬£¬len = 100£¬£¬£¬£¬£¬£¬£¬£¬proto = 0}£¬£¬£¬£¬£¬£¬£¬£¬ÓÐÐ§ÔØºÉΪ'\ x00'* 40 +'\ x41'* 100¡£¡£¡£¡£¡£¡£¡£¡£
¡ñ ±í²¿IPÊý¾Ý°ü£¨·Ôì¬1£©£ºIPv4 {frag offset = 0£¬£¬£¬£¬£¬£¬£¬£¬MF = 1£¬£¬£¬£¬£¬£¬£¬£¬proto = 4£¬£¬£¬£¬£¬£¬£¬£¬id = 0xabcd}£¬£¬£¬£¬£¬£¬£¬£¬ÆäÖÐ24¸ö×Ö½ÚÀ´×ÔÄÚ²¿IPÊý¾Ý°üÓÐЧ¸ºÔØ¡£¡£¡£¡£¡£¡£¡£¡£ÕâÒâζ׎«¸´Ôì20¸ö×Ö½ÚµÄIP±êÍ·£¬£¬£¬£¬£¬£¬£¬£¬±í¼Ó4¸ö¿Õ×Ö½Ú¡£¡£¡£¡£¡£¡£¡£¡£
¡ñ ±í²¿IPÊý¾Ý°ü£¨·Ôì¬2£©£ºIPv4 {frag offset = 24£¬£¬£¬£¬£¬£¬£¬£¬MF = 0£¬£¬£¬£¬£¬£¬£¬£¬proto = 4£¬£¬£¬£¬£¬£¬£¬£¬id = 0xabcd}£¬£¬£¬£¬£¬£¬£¬£¬À´×ÔÄÚ²¿IPÊý¾Ý°üµÄÆäÓà×Ö½Ú×÷ΪÓÐЧ¸ºÔØ¡£¡£¡£¡£¡£¡£¡£¡£
Ê·ýÖеķÔ쬽ṹÈçÏÂͼËùʾ£º
ÕâÀïihlΪ0xf£¬£¬£¬£¬£¬£¬£¬£¬°µÊ¾Îª×î´óIPÑ¡Ï£¬£¬£¬£¬£¬£¬£¬³¤¶ÈΪ60×Ö½Ú£¬£¬£¬£¬£¬£¬£¬£¬Êý¾Ý°ü×ܳ¤¶Ètotal_lengthΪ100¡£¡£¡£¡£¡£¡£¡£¡£µ±ÍøÂçºÍ̸ջÊÕµ½Á½¸ö·Ôì¬Ê±£¬£¬£¬£¬£¬£¬£¬£¬Ëü½«Ê¹ÓÃtfIpReassemblePacket()º¯Êý³ÁÐÂ×é×°ËüÃÇ¡£¡£¡£¡£¡£¡£¡£¡£·Ôì¬Êý¾Ý³Á×éºóµÄÁ´±í½á¹¹ÈçÏÂͼËùʾ£º
¸ÃtfIpReassemblePacket()º¯ÊýʹÓÃtsUserPacket½á¹¹ÖеÄ×Ö¶ÎpktuLinkNextPtrÁ´½ÓÁ½¸ö·Ô쬡£¡£¡£¡£¡£¡£¡£¡£ÈôÊÇÆôÓÃÁËIP-in-IPËí·´«Ê䣬£¬£¬£¬£¬£¬£¬£¬ÔòÄÚ²¿IPÊý¾Ý°ü½«ËæºóÓÉtfIpIncomingPacket()º¯ÊýÖд¦Ö㬣¬£¬£¬£¬£¬£¬£¬½¨¼ôºóµÄpktuChainDataLength×ֶβ»ÊÇ160£¬£¬£¬£¬£¬£¬£¬£¬¶øÊǵÅ×Ú100¡£¡£¡£¡£¡£¡£¡£¡£¾¹ýÊý¾Ý³¤¶È²Ã¼ôºóµÄÁ´±í½á¹¹ÈçÏÂͼËùʾ£º
ÄÚ²¿IPÊý¾Ý°üͨ¹ýIP±êÍ·ÆëÈ«ÐԲ鳣¬£¬£¬£¬£¬£¬£¬£¬ÓÉÓÚ½ö˼¿¼ÁËtsUserPacketµÄpktuChainDataLength×ֶΣ¨¶ø²»Ë¼¿¼pktuLinkDataLength£©¡£¡£¡£¡£¡£¡£¡£¡£ÓÉÓÚÔڳ߶ÈIPÍ·²¿£¨20¸ö×Ö½Ú£©Ö®ºóÓÐ4¸ö¿Õ×Ö½Ú£¬£¬£¬£¬£¬£¬£¬£¬²¢ÇÒÒ»¸ö¿Õ×Ö½Ú´ú±íIPÑ¡ÏîµÄĩ⣬£¬£¬£¬£¬£¬£¬£¬IPÑ¡Ïî½âÎöͨ¹ý²é³¡£¡£¡£¡£¡£¡£¡£¡£ÓÉÓÚÄÚ²¿IPÊý¾Ý°üÔ̺¬ÎÞЧµÄIPv4ºÍ̸±àºÅ£¨ProtocolΪ0£©£¬£¬£¬£¬£¬£¬£¬£¬½øÈëdefault·ÖÖ§£¬£¬£¬£¬£¬£¬£¬£¬¶øºóÖ±½Ó½øÈëTM_IP_LOCAL_FLAG·ÖÖ§¡£¡£¡£¡£¡£¡£¡£¡£ÈçÏ´úÂëËùʾ£º
Òò¶øÍøÂçºÍ̸ջ½«Í¨¹ý·¢ËÍÀàÐÍΪ3£¨Ö¸±ê²»³É´ï£©ºÍ´úÂëΪ2£¨ºÍ̸²»³É´ï£©µÄICMPÃýÎóÐÂÎÅÀ´»Ø¾ø¸ÃÊý¾Ý°ü¡£¡£¡£¡£¡£¡£¡£¡£ÈçÏ´úÂëËùʾ£º
ÕÆ¹Ü´´½¨ÃýÎóÊý¾Ý°üµÄÊÇtfIcmpErrPacket()º¯Êý¡£¡£¡£¡£¡£¡£¡£¡£Ëü·ÖÅäÒ»¸öеÄÊý¾Ý°ü£¬£¬£¬£¬£¬£¬£¬£¬³õʼ»¯Ò»Ð©ICMPÍ·²¿×ֶΡ£¡£¡£¡£¡£¡£¡£¡£ÈçÏ´úÂëËùʾ£º
×îºó´ÓºóÐøÊý¾Ý°ü£¨ÄÚ²¿IPÊý¾Ý°ü£©Öи´ÔìһЩÊý¾Ý¡£¡£¡£¡£¡£¡£¡£¡£¸´Ô첿ÃÅÈçÏ´úÂëËùʾ£º
Èç´úÂëËù¼û£¬£¬£¬£¬£¬£¬£¬£¬tfIcmpErrPacket()º¯Êýͨ¹ý»ñÈ¡IP±¨Í·³¤¶È£¨ÒÔ×Ö½ÚΪµ¥Ôª¼ÓÉÏ8£¬£¬£¬£¬£¬£¬£¬£¬ÔÚÏÖʵÇé¿öÏÂΪ60 + 8 = 68£©ÓëpktuLinkDataLength×ֶΣ¨ÒÔ¼°±»²Ã¼ôΪ100£©Ö®¼äµÄ×îÓ×Ö·´ÍÆËãÒª¸´ÔìµÄ×Ö½ÚÊý ¡£¡£¡£¡£¡£¡£¡£¡£ÓÉÓÚ·¢ËÍÊý¾Ý°üµÄµÚÒ»¸ö·Ô쬵ÄÏÖʵÁ´Â·Êý¾Ý³¤¶ÈΪ24£¨¶ø²»ÊÇ100£©£¬£¬£¬£¬£¬£¬£¬£¬Òò¶øtfIcmpErrPacket()º¯Êý½«´Ó¶ÑÖи´Ôì68-24 = 44×ֽڵĶî±íÊý¾Ý¡£¡£¡£¡£¡£¡£¡£¡£¶øºóÉèÖÃv12_icmpErrPacketÖÐÓйØÊý¾Ý¡£¡£¡£¡£¡£¡£¡£¡£ÈçÏ´úÂëËùʾ£º
×îºóŲÓÃtfIpSendPacket()º¯Êý·¢ËÍicmp_ErrPacket°üµ½Ö¸±êµØÖ·£¬£¬£¬£¬£¬£¬£¬£¬Õ⽫µ¼ÖÂ44×Ö½ÚµÄÐÅϢй¶¡£¡£¡£¡£¡£¡£¡£¡£
3¡¢CVE-2020-11910
CVE-2020-11910ÊÇÔ½½ç¶Á·ì϶£¬£¬£¬£¬£¬£¬£¬£¬¸Ã·ì϶´æÔÚtfIcmpIncomingPacketº¯ÊýÖУ¬£¬£¬£¬£¬£¬£¬£¬¸Ãº¯ÊýÖØÒªÊÇ´¦ÖÃICMP°ü¡£¡£¡£¡£¡£¡£¡£¡£tfIcmpIncomingPacketº¯ÊýÔÚ´¦ÖÃÉ豸ÊÕµ½ÀàÐÍΪ3£¬£¬£¬£¬£¬£¬£¬£¬codeΪ4µÄICMP°üµÄʱ³½£¬£¬£¬£¬£¬£¬£¬£¬´úÂ벢ûÓÐÑéÖ¤ºóÐøÊý¾ÝµÄ³¤¶È£¬£¬£¬£¬£¬£¬£¬£¬Ö±½Ó¾Í½Ó¼ûÁ˶ÔÓ¦µØÎ»µÄÊý¾Ý£¬£¬£¬£¬£¬£¬£¬£¬Ôì³ÉÁËÔ½½ç¶Á·ì϶¡£¡£¡£¡£¡£¡£¡£¡£ÈçÏ´úÂëËùʾ£º
4¡¢CVE-2020-11911
CVE-2020-11911ÊÇδÊÚȨµÄÃô¸ÐÐÅÏ¢¸üзì϶£¬£¬£¬£¬£¬£¬£¬£¬¸Ã·ì϶´æÔÚtfIcmpIncomingPacketº¯ÊýÖУ¬£¬£¬£¬£¬£¬£¬£¬¸Ãº¯ÊýÖØÒªÊÇ´¦ÖÃICMP°ü¡£¡£¡£¡£¡£¡£¡£¡£tfIcmpIncomingPacketº¯ÊýÔÚ´¦ÖÃÉ豸ÊÕµ½ÀàÐÍΪ18£¨Address mask reply£©°üµÄʱ³½£¬£¬£¬£¬£¬£¬£¬£¬´úÂ벢ûÓÐÑéÖ¤É豸ÊÇ·ñ·¢Ë͹ýÀàÐÍ17£¨Address mask request£©ÒªÇ󣬣¬£¬£¬£¬£¬£¬£¬¾ÍÖ±½Ó¸üÐÂÁËÉ豸µÄ×ÓÍøÑÚÂë¡£¡£¡£¡£¡£¡£¡£¡£ÈçÏ´úÂëËùʾ£º
Æß¡¢CVE-2020-11898·ì϶ÑéÖ¤
Ô¶³Ì¹¥»÷´òÓ¡»ú£¬£¬£¬£¬£¬£¬£¬£¬ÊÓÆµÇ뵽΢ÐŹ«¼ÒºÅÖв鿴£ºÑéÖ¤ÊÓÆµ¡£¡£¡£¡£¡£¡£¡£¡£
°Ë¡¢²Î¿¼
1¡¢https://www.ietf.org/rfc/rfc2003.txt
2¡¢https://www.ietf.org/rfc/rfc792.txt
3¡¢https://www.ietf.org/rfc/rfc1853.txt
4¡¢https://www.jsof-tech.com/ripple20/
5¡¢https://kb.cert.org/vuls/id/257161
6¡¢/article/1/11834.html
7¡¢JSOF_Ripple20_Technical_Whitepaper_June20.pdf
8827Ì«Ñô¼¯ÍÅ»ý¼«·ÀÓù³¢ÊÔÊÒ£¨ADLab£©
ADLab³ÉÁ¢ÓÚ1999Ä꣬£¬£¬£¬£¬£¬£¬£¬ÊÇÖйú°²È«ÐÐÒµ×îÔç³ÉÁ¢µÄ¹¥·À¼¼Êõ×êÑг¢ÊÔÊÒÖ®Ò»£¬£¬£¬£¬£¬£¬£¬£¬Î¢ÈíMAPP´òËãÖ÷Ìâ³ÉÔ±£¬£¬£¬£¬£¬£¬£¬£¬¡°ºÚȸ¹¥»÷¡±¸ÅÏëÊ×ÍÆÕß¡£¡£¡£¡£¡£¡£¡£¡£½ØÖ¹Ä¿Ç°£¬£¬£¬£¬£¬£¬£¬£¬ADLabÒÑͨ¹ýCVEÀۼư䲼°²È«·ì϶1000Óà¸ö£¬£¬£¬£¬£¬£¬£¬£¬Í¨¹ý CNVD/CNNVDÀۼư䲼°²È«·ì϶800Óà¸ö£¬£¬£¬£¬£¬£¬£¬£¬³ÖÐøÎ¬³Ö¹ú¼ÊÍøÂ簲ȫÁìÓòÒ»Á÷Ë®×¼¡£¡£¡£¡£¡£¡£¡£¡£³¢ÊÔÊÒ×êÑз½Ïòº¸Ç²Ù×÷ϵͳÓëÀûÓÃϵͳ°²È«×êÑÓ×¢ÒÆ¶¯ÖÇÄÜÖն˰²È«×êÑÓ×¢ÎïÁªÍøÖÇÄÜÉ豸°²È«×êÑÓ×¢Web°²È«×êÑÓ×¢¹¤¿ØÏµÍ³°²È«×êÑÓ×¢ÔÆ°²È«×êÑС£¡£¡£¡£¡£¡£¡£¡£×êÑгɾÍÀûÓÃÓÚ²úÆ·Ö÷Ìâ¼¼Êõ×êÑÓ×¢¹ú¶È³Áµã¿Æ¼¼ÏîÄ¿¹¥¹Ø¡¢×¨Òµ°²È«·þÎñµÈ¡£¡£¡£¡£¡£¡£¡£¡£


¾©¹«Íø°²±¸11010802024551ºÅ