ret2v8

怎么征服一台v8?

想驯服一台V8?别慌,它虽然嗓门大、脾气爆,但本质上就是个渴望被理解的“钢铁猛男”。

第一步:投其所好
V8不喝92号“矿泉水”,98号“威士忌”才是它的最爱。机油?必须全合成,黏度要对,不然它分分钟给你摆脸色(比如拉缸)。

第二步:温柔拆解
拆螺丝要像拆盲盒——顺序错了?恭喜,喜提“发动机拼图大礼包”!记住,扭矩扳手是你的最佳僚机,拧太紧它会“哭”(滑丝),拧太松它会“跑”(漏油)。

第三步:灵魂交流
装正时链条时,务必比对待前任的生日还认真。错一个齿?V8秒变“重金属咳嗽老人”。点火前记得深情鼓励:“宝贝,吼一嗓子给我听听!”(然后祈祷邻居别报警)。

终极奥义
如果它终于发出低沉咆哮……恭喜!你已收获一台“机械哈士奇”——费油、爱闹,但让你笑得像个200斤的孩子!

(友情提示:备好钱包,V8的“爱”是按升计算的!)

回归正题

之前跟着其他同学做过其他JS引擎的fuzz,比如说webkit(Safari),对这些浏览器的漏洞也有一些了解。

环境配置:

(如果没有身处天朝应该会非常顺利)

depot_tools

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH="$PATH":pwd/depot_tools

ninja

git clone https://github.com/ninja-build/ninja.git
cd ninja && ./configure.py --bootstrap && cd ..
export PATH="$PATH":pwd/ninja

编译v8

fetch v8 && cd v8&& gclient sync
tools/dev/v8gen.py x64.debug
ninja -C out.gn/x64.debug

最后编译出的 输出在如下位置:

./out/x64.debug/d8
./out/x64.debug/shell

v8调试:

v8的官方团队编写了一个gdb的gdbinit脚本,使得在gdb中就能可视化显示v8的对象结构。在~/chrome_v8/v8/tools/gdbinit

将其添加到~/.gdbinit即可启用v8的调试功能:

┌──(kali㉿kali)-[~]
└─$ cat .gdbinit
#source ~/peda/peda.py
source /home/kali/Desktop/pwndbg-dev/gdbinit.py
source ~/Pwngdb/pwngdb.py
source ~/Pwngdb/angelheap/gdbinit.py
source ~/chrome_v8/v8/tools/gdbinit
#set context-output /dev/pts/1

define hook-run
python
import angelheap
angelheap.init_angelheap()
end
end

调试指令:

gdb d8

set args --allow-natives-syntax ./exp/exp.js

在加载d8时加入这个选项就可以在js中调用一些调试函数:

%DebugPrint(obj) 输出对象地址

%SystemBreak() 触发调试中断主要结合gdb等调试器使用

比如说下面这个JS文件:

var a = [1,2,3];
var b = [1.1, 2.2, 3.3];
var c = [a, b];
%DebugPrint(a);
%SystemBreak();  //触发第一次调试
%DebugPrint(b);
%SystemBreak();  //触发第二次调试
%DebugPrint(c);
%SystemBreak();  //触发第三次调试

我们可以使用job命令,这个命令可以可视化显示JavaScript对象的内存结构。用telescope命令查看内存数据。

pwndbg> job 0x3ca000062079
0x3ca000062079: [FixedArray]
 - map: 0x3ca00000067d <Map(FIXED_ARRAY_TYPE)>
 - length: 3
           0: 1
           1: 2
           2: 3
pwndbg> telescope 0x3ca000062078
00:00000x3ca000062078 ◂— 0x60000067d
01:00080x3ca000062080 ◂— 0x400000002
02:00100x3ca000062088 ◂— 0x10c900000006
03:00180x3ca000062090 ◂— 0x6207900000000
04:00200x3ca000062098 ◂— 0x6000008a1
05:00280x3ca0000620a0 ◂— 0x3ff199999999999a
06:00300x3ca0000620a8 ◂— 0x400199999999999a
07:00380x3ca0000620b0 ◂— 0x400a666666666666 ('ffffff\n@')

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇