首页
社区
课程
招聘
[原创]KCTF2019 被诅咒的金字塔wp
2019-6-23 22:11 5402

[原创]KCTF2019 被诅咒的金字塔wp

2019-6-23 22:11
5402

可以多次利用漏洞,调试下到断点看到栈里有关于程序加载基址,栈地址,libc地址的值,挨个泄露出来。


断点到printf继续看栈,栈里有两个地址比较有趣,0xfff2e1e4和0xfff2e1e8,可以使用%n把0xfff2e274地址的值改为target_addr,用%n把0xfff2e27c地址的值改为target_addr+2。之后再到0xfff2e274把target_addr的值修改2字节,到0xfff2e27c把target_addr+2对的值修改2字节,即可完成任意地址任意写。


这里的target_addr即返回地址所在的栈地址,覆写成功即可返回到shell_addr


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

上传的附件:
收藏
点赞1
打赏
分享
最新回复 (3)
雪    币: 279
活跃值: (181)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
pangpwn 2019-6-30 21:34
2
0
首先对分析过程和exp格式表示感谢~!对新手非常友好,注释一看就能懂,复现也非常容易~

想请问一下,gadgets数组是怎么得到的?我跟踪exp猜测是先在libc中找execve函数的引用
Direction        Type        Address        Text
Up        p        sub_3A850+444        call    execve
Down        p        fexecve+62        call    execve
Down        p        execv+1F        call    execve
Down        p        execle+B5        call    execve
Down        p        execle+148        call    execve
Down        p        execl+C3        call    execve
Down        p        execl+159        call    execve
Down        p        execvpe+41        call    execve
Down        p        execvpe+10C        call    execve
Down        p        execvpe+246        call    execve
Down        p        execvpe+2E3        call    execve
Down        p        sub_D0330+7B1        call    execve
Down        p        sub_D4580+8E        call    execve
Down        p        sub_D4630+268        call    execve
Down        p        sub_D4630+5FA        call    execve
Up        o        LOAD:00009FA8        Elf32_Sym <offset aFexecve+1 - offset byte_D618, offset execve, 26h, \; "execve"
拿第一个举例,戳进去再把调用之前,push之后的复制下来,是这样吗
.text:0003AC5C                 push    0
.text:0003AC5E                 push    [esp+164h+var_154]
.text:0003AC62                 push    2
.text:0003AC64                 call    sigprocmask
.text:0003AC69                 mov     eax, ds:(environ_ptr_0 - 1B2000h)[esi]
.text:0003AC6F                 add     esp, 0Ch
.text:0003AC72                 mov     ds:(dword_1B3620 - 1B2000h)[esi], 0
.text:0003AC7C                 mov     ds:(dword_1B3624 - 1B2000h)[esi], 0
.text:0003AC86                 push    dword ptr [eax]
.text:0003AC88                 lea     eax, [esp+164h+var_138]
.text:0003AC8C                 push    eax
.text:0003AC8D                 lea     eax, (loc_15BA08+3 - 1B2000h)[esi]
.text:0003AC93                 push    eax
.text:0003AC94                 call    execve
雪    币: 645
活跃值: (384)
能力值: ( LV5,RANK:66 )
在线值:
发帖
回帖
粉丝
xmzyshypnc 2019-7-3 08:32
3
0
pangpwn 首先对分析过程和exp格式表示感谢~!对新手非常友好,注释一看就能懂,复现也非常容易~[em_63] 想请问一下,gadgets数组是怎么得到的?我跟踪exp猜测是先在libc中找execve函 ...
您好,感谢您复现我的exp。这里的gadgets是通过一个名为one_gadget的开源工具得到的,官方地址为https://github.com/david942j/one_gadget,使用方法为one_gadget ./libc.so.6。即可获得gadgets。这里使用gadgets会对寄存器有一些限制条件,使用的时候要自己多试几个,有时候都不可以还是得构造system('/bin/sh')或者在堆的题里可以使用realloc_hook中转来满足gadgets的使用条件。
雪    币: 279
活跃值: (181)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
pangpwn 2019-7-13 21:22
4
0
xmzyshypnc 您好,感谢您复现我的exp。这里的gadgets是通过一个名为one_gadget的开源工具得到的,官方地址为https://github.com/david942j/one_gadget,使用方法为 ...
谢谢回复。我再研究研究开源工具再次谢谢分享。
游客
登录 | 注册 方可回帖
返回