完整的新手警报,对您将要阅读的内容表示歉意。

我正在使用一个可执行文件来实现缓冲区溢出。这是针对已经消失的旧CTF,但我选择继续练习。我已经在上面运行了objdump,下面可以看到一个代码段:

...
 8048821:   e8 ea fc ff ff          call   8048510 <__isoc99_sscanf@plt>  // Gets input???
 8048826:   8b 44 24 78             mov    0x78(%esp),%eax // Moves ??? to %eax
 804882a:   3b 84 24 88 00 00 00    cmp    0x88(%esp),%eax //  Does a comparison?
 8048831:   75 14                   jne    8048847 <close@plt+0x317>  // Jump to 8048847 if it's not equal?
 8048833:   e8 49 fe ff ff          call   8048681 <close@plt+0x151>
 8048838:   a1 50 a0 04 08          mov    0x804a050,%eax
 804883d:   89 04 24                mov    %eax,(%esp)
 8048840:   e8 6b fc ff ff          call   80484b0 <puts@plt>
 8048845:   eb 0d                   jmp    8048854 <close@plt+0x324>
 8048847:   a1 54 a0 04 08          mov    0x804a054,%eax
 804884c:   89 04 24                mov    %eax,(%esp)
 804884f:   e8 5c fc ff ff          call   80484b0 <puts@plt>
 8048854:   b8 00 00 00 00          mov    q4312078qx0,%eax
 8048859:   c9                      leave  
 804885a:   c3                      ret    
 804885b:   66 90                   xchg   %ax,%ax
 804885d:   66 90                   xchg   %ax,%ax
 804885f:   90                      nop
 8048860:   55                      push   %ebp
 8048861:   57                      push   %edi
 8048862:   31 ff                   xor    %edi,%edi
 8048864:   56                      push   %esi
 8048865:   53                      push   %ebx
 8048866:   e8 05 fd ff ff          call   8048570 <close@plt+0x40>
 804886b:   81 c3 95 17 00 00       add    q4312078qx1795,%ebx
 8048871:   83 ec 1c                sub    q4312078qx1c,%esp
 8048874:   8b 6c 24 30             mov    0x30(%esp),%ebp
 8048878:   8d b3 0c ff ff ff       lea    -0xf4(%ebx),%esi
 804887e:   e8 b1 fb ff ff          call   8048434 <read@plt-0x3c>
 8048883:   8d 83 08 ff ff ff       lea    -0xf8(%ebx),%eax
 8048889:   29 c6                   sub    %eax,%esi
 804888b:   c1 fe 02                sar    q4312078qx2,%esi
 804888e:   85 f6                   test   %esi,%esi
 8048890:   74 27                   je     80488b9 <close@plt+0x389>
 8048892:   8d b6 00 00 00 00       lea    0x0(%esi),%esi
 8048898:   8b 44 24 38             mov    0x38(%esp),%eax
 804889c:   89 2c 24                mov    %ebp,(%esp)
 804889f:   89 44 24 08             mov    %eax,0x8(%esp)
 80488a3:   8b 44 24 34             mov    0x34(%esp),%eax
 80488a7:   89 44 24 04             mov    %eax,0x4(%esp)
 80488ab:   ff 94 bb 08 ff ff ff    call   *-0xf8(%ebx,%edi,4)
 80488b2:   83 c7 01                add    q4312078qx1,%edi
 80488b5:   39 f7                   cmp    %esi,%edi
 80488b7:   75 df                   jne    8048898 <close@plt+0x368>
 80488b9:   83 c4 1c                add    q4312078qx1c,%esp
 80488bc:   5b                      pop    %ebx
 80488bd:   5e                      pop    %esi
 80488be:   5f                      pop    %edi
 80488bf:   5d                      pop    %ebp
 80488c0:   c3                      ret    
 80488c1:   eb 0d                   jmp    80488d0 <close@plt+0x3a0>
 80488c3:   90                      nop
 80488c4:   90                      nop
 80488c5:   90                      nop
 80488c6:   90                      nop
 80488c7:   90                      nop
 80488c8:   90                      nop
 80488c9:   90                      nop
 80488ca:   90                      nop
 80488cb:   90                      nop
 80488cc:   90                      nop
 80488cd:   90                      nop
 80488ce:   90                      nop
 80488cf:   90                      nop
 80488d0:   f3 c3                   repz ret 


我不需要一个答案(我愿意!),只是一些指针(请问双关语) ),以正确的方式进行

可执行文件被剥离。我应该阅读更多有关它的内容还是值得我投入时间?我注意到六角形实际上有4个重复的部分,当分开时,它们也可以独立运行!

感谢

评论

您在这里面临的困难到底是什么?

我不确定会发生什么,也没有发现漏洞的任何提示...

我尝试着重于我认为最有帮助的方面,而不是将帮助您解决此特别不清楚的挑战。

#1 楼

由于OP的问题有点含糊,而且似乎他对一般性提示更感兴趣,而不是实际解决方案,因此我故意不专注于回答眼前的问题。

如果脆弱部分与调用__isoc99_sscanf(如标题所示)时,您应该真正专注于调用之前的代码,尤其是传递给该函数的参数和该函数的文档(通常会突出问题的用例)。

如果您刚开始进行逆向工程和漏洞发现,我将列出一些常规技巧和工作流程建议:


我建议您尝试将逆向工程和漏洞发现。您应该首先将相关函数转换回高级语言(在这种情况下为C),并且只有在获得不错的C代码(不必编译)之后,才应该继续研究易受攻击的部分。它的。是的,如果您是漏洞发现的新手,那么您真的应该编写C伪代码。
进行逆向工程时,应该使用比objdump更复杂的工具。 IDA,radare2是很好的例子。
关注用户可以操纵的输入路径和流,请确保您不会反转用户无法访问/影响的代码。
很好的介绍这些主题可能只是暂时尝试CTF,然后继续阅读演练/解决方案。