逆向 学习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

  1. Leak the real address of puts
  2. Calculate the base address of libc
  3. Calculate the address of system
  4. Find an address in libc that contains the string /bin/sh
  5. 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