逆向 学习r2 part2
逆向 学习r2 part2
https://www.megabeets.net/a-journey-into-radare-2-part-2/
在NX和ASLR的保护下
$ r2 -d megabeets_0x2
-d
– Open in the debug mode
aas – Analyze functions, symbols and more
dcu address Continue until address
VV
pdf @ sym.beet
ragg2
ragg2
, which allows us to generate a cyclic pattern called De Bruijn Sequence and check the exact offset where our payload overrides the buffer.
它允许我们生成一个称为De Bruijn Sequence的循环模式,并检查有效载荷覆盖缓冲区的确切偏移量
-P [size] prepend debruijn pattern
-q [fragment] debruijn pattern offset
-r show raw bytes instead of hexpairs
$ ragg2 -P 100 -r
之前SEH攻击 应该有用过
rarun2
rarun2
用作启动器,用于运行具有不同环境,参数,权限,目录的程序,并覆盖默认文件描述符(例如stdin)。
当您必须使用长参数运行程序,将大量数据传递给stdin或类似的东西时,这很有用,这通常是利用二进制文件的情况。
$ ragg2 -P 200 -r > pattern.txt
$ cat pattern.txt
$ vim profile.rr2
$ cat profile.rr2
#!/usr/bin/rarun2
stdin=./pattern.txt
$ r2 -r profile.rr2 -d megabeets_0x2
-r [rarun2] specify rarun2 profile to load (same as -e dbg.profile=X)
-d debug the executable ‘file’ or running process ‘pid’
信号是发送到同一进程中的某个进程或特定线程的异步通知,以便将发生的事件通知给它。
·当SIGSEGV(11)信号做出无效的虚拟内存引用或分段错误时,即在执行分段违规时,将其发送到进程。
wopO value
Finds the given value into a De Bruijn Pattern at current offset
| dr Show ‘gpr’ registers
wopO dr eip
没有成功
wopO 0x41417641
i Get info from opened file (see rabin2’s manpage)
ii Imports
iip 更简明
The plan
- Leak the real address of puts
- Calculate the base address of libc
- Calculate the address of system
- Find an address in libc that contains the string /bin/sh
- Call system with /bin/sh and spawn a shell
过程链接表Procedure Linkage Table(PLT)
是一个内存结构,其中包含外部功能的代码存根,这些函数的地址在链接时是未知的。
·每当我们在.text段中看到对函数的CALL指令时,都不会直接调用该函数。
·相反,它在PLT处调用存根代码,例如func_name @ plt
。
然后,存根跳转到全局偏移表(GOT)
中为此功能列出的地址。
如果它是此功能的第一个CALL,则GOT条目将指向PLT,后者将调用动态链接器,该链接器将解析所需功能的实际地址
下次调用func_name @ plt时,存根直接从GOT获取功能地址
。
((少了动态链接步骤??))
pwntools
漏洞利用框架
~ character is radare’s internal grep
[0xf7763b30]> # the address of puts@plt:
[0xf7763b30]> ?v sym.imp.puts //Usage: ?v[id][ num] # Show value
0x08048390
[0xf7763b30]> ?v reloc.puts
sy按tab键自动搜寻
Usage: dmi # List/Load Symbols
All these paddr=0x000xxxxx are the offsets of the function from libc base.
为此,我们将使用radare的搜索功能。
·默认情况下,radare正在dbg.map中搜索,这是当前的内存映射。
·我们要搜索所有内存映射,因此我们需要对其进行配置:
[0x080483d0]> e search.in = dbg.maps
要以可视方式配置雷达,请使用Ve
Usage: /[!bf] [arg] Search stuff
dmm List modules of target process
[0x080483d0]> ?X 0xf7700768-0xf7599000