我正在使用一个可执行文件来实现缓冲区溢出。这是针对已经消失的旧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,然后继续阅读演练/解决方案。
评论
您在这里面临的困难到底是什么?我不确定会发生什么,也没有发现漏洞的任何提示...
我尝试着重于我认为最有帮助的方面,而不是将帮助您解决此特别不清楚的挑战。