什么是radare2相当于GDB的'find&system,+ 9999999,'/ bin/sh''


4

什么是radare2相当于GDB的find &system,+9999999,"/bin/sh"

与ROP/return2libc技术相关。从radare @电报

6

首先,我们应该在调试模式下打开二进制与radare2

$ r2 -d file 

字符串/bin/sh驻留在libcsystem函数中,因此库应首先加载到内存中以便s在那里找到字符串。让我们继续执行程序,直到它的入口点。此时libc应该已经加载到内存中。

[0xf7f9bc60]> dcu entry0 
Continue until 0x565914a0 using 1 bpsize 
hit breakpoint at: 565914a0 
[0x565914a0]> 

dcu代表d ebug Ç ontinue ü NTIL

为了找到/bin/sh我们应该用radare的搜索功能。默认情况下,radare正在搜索dbg.map这是当前的内存映射。在我们的情况下,不能保证/bin/sh将会在我们当前的存储器映射中。因此,我们希望它在所有内存搜索地图,所以我们需要对它进行配置:

[0x080483d0]> e search.in = dbg.maps 

您可以查看更多选项,如果你执行e search.in=?。以可视方式配置Radare,请使用Ve

在radare中搜索是通过/命令完成的,您可以通过执行/?来查看大量的搜索选项。

让我们寻找/bin/sh

[0x565914a0]>//bin/sh 
Searching 7 bytes from 0x00000000 to 0xffffffffffffffff: 2f 62 69 6e 2f 73 68 
Searching 7 bytes in [0x56591000-0x56592000] 
hits: 1 

<..truncated..> 

Searching 7 bytes in [0xf7d97000-0xf7f66000] 
hits: 1 

0xf7f1180a hit1_2 .b/strtod_l.c-c/bin/shexit 0canonica. 

的Et瞧! radare在0xf7f1180a找到该字符串。

为了加快速度,我们可以告诉radare从system开始搜索,它位于libc的内部。 首先,我们需要libc中的system的地址,我们可以使用dmi来完成此操作,然后将search.from配置为从system开始。

[0x565914a0]> dmi libc system 
vaddr=0xf7dd3700 paddr=0x0003c700 ord=566 fwd=NONE sz=1126 bind=LOCAL type=FUNC name=do_system 
vaddr=0xf7ebf470 paddr=0x00128470 ord=4988 fwd=NONE sz=102 bind=LOCAL type=FUNC name=svcerr_systemerr 
vaddr=0xf7dd3c50 paddr=0x0003cc50 ord=6919 fwd=NONE sz=55 bind=WEAK type=FUNC name=system 

[0x565914a0]> e search.from=0xf7dd3c50 
[0x565914a0]>//bin/sh 
Searching 7 bytes from 0xf7dd3c50 to 0xffffffffffffffff: 2f 62 69 6e 2f 73 68 
Searching 7 bytes in [0xf7dd3c50-0xf7f66000] 
hits: 1 

<..truncated..> 

0xf7f1180a hit2_0 .b/strtod_l.c-c/bin/shexit 0canonica. 

你走了!现在,您可以使用ps @ 0xf7f1180a来打印字符串,或者使用您想要的地址。


0

感谢David Polverari虽然在调试模式:

e search.in=range 
e search.from=<start_addr> 
e search.to=<end_addr> 

"/ /bin/sh"