Gdb,Sections:
(gdb) i file
`/home/******/Desktop/BOF/lib64', file type elf64-x86-64.
Entry point: 0x400ffc
0x0000000000400190 - 0x00000000004001b0 is .note.ABI-tag
0x00000000004001b0 - 0x00000000004001d4 is .note.gnu.build-id
0x00000000004001d8 - 0x00000000004002f8 is .rela.plt
0x00000000004002f8 - 0x0000000000400312 is .init
0x0000000000400320 - 0x00000000004003e0 is .plt
0x00000000004003e0 - 0x0000000000494808 is .text
0x0000000000494810 - 0x000000000049614c is __libc_freeres_fn
0x0000000000496150 - 0x00000000004961f8 is __libc_thread_freeres_fn
0x00000000004961f8 - 0x0000000000496201 is .fini
0x0000000000496220 - 0x00000000004b6224 is .rodata
0x00000000004b6228 - 0x00000000004b6230 is __libc_atexit
0x00000000004b6230 - 0x00000000004b6288 is __libc_subfreeres
0x00000000004b6288 - 0x00000000004b6290 is __libc_thread_subfreeres
0x00000000004b6290 - 0x00000000004c32ac is .eh_frame
0x00000000004c32ac - 0x00000000004c33b9 is .gcc_except_table
0x00000000006c3ea0 - 0x00000000006c3ec0 is .tdata
0x00000000006c3ec0 - 0x00000000006c3ef8 is .tbss
0x00000000006c3ec0 - 0x00000000006c3ed0 is .init_array
0x00000000006c3ed0 - 0x00000000006c3ee0 is .fini_array
0x00000000006c3ee0 - 0x00000000006c3ee8 is .jcr
0x00000000006c3f00 - 0x00000000006c3ff0 is .data.rel.ro
0x00000000006c3ff0 - 0x00000000006c4000 is .got
0x00000000006c4000 - 0x00000000006c4078 is .got.plt
0x00000000006c4080 - 0x00000000006c56f0 is .data
0x00000000006c5700 - 0x00000000006c8308 is .bss
0x00000000006c8308 - 0x00000000006c8338 is __libc_freeres_ptrs
0x0000000000400190 - 0x00000000004001b0 is .note.ABI-tag
0x00000000004001b0 - 0x00000000004001d4 is .note.gnu.build-id
0x00000000004001d8 - 0x00000000004002f8 is .rela.plt
0x00000000004002f8 - 0x0000000000400312 is .init
0x0000000000400320 - 0x00000000004003e0 is .plt
0x00000000004003e0 - 0x0000000000494808 is .text
0x0000000000494810 - 0x000000000049614c is __libc_freeres_fn
0x0000000000496150 - 0x00000000004961f8 is __libc_thread_freeres_fn
0x00000000004961f8 - 0x0000000000496201 is .fini
0x0000000000496220 - 0x00000000004b6224 is .rodata
0x00000000004b6228 - 0x00000000004b6230 is __libc_atexit
0x00000000004b6230 - 0x00000000004b6288 is __libc_subfreeres
0x00000000004b6288 - 0x00000000004b6290 is __libc_thread_subfreeres
0x00000000004b6290 - 0x00000000004c32ac is .eh_frame
0x00000000004c32ac - 0x00000000004c33b9 is .gcc_except_table
0x00000000006c3ea0 - 0x00000000006c3ec0 is .tdata
0x00000000006c3ec0 - 0x00000000006c3ef8 is .tbss
0x00000000006c3ec0 - 0x00000000006c3ed0 is .init_array
0x00000000006c3ed0 - 0x00000000006c3ee0 is .fini_array
0x00000000006c3ee0 - 0x00000000006c3ee8 is .jcr
0x00000000006c3f00 - 0x00000000006c3ff0 is .data.rel.ro
0x00000000006c3ff0 - 0x00000000006c4000 is .got
0x00000000006c4000 - 0x00000000006c4078 is .got.plt
0x00000000006c4080 - 0x00000000006c56f0 is .data
0x00000000006c5700 - 0x00000000006c8308 is .bss
0x00000000006c8308 - 0x00000000006c8338 is __libc_freeres_ptrs
#1 楼
这取决于您正在利用的错误的类型。如果您的有效载荷不能包含空字节(易受攻击的strcpy),这可能会成为问题,但是并非所有的bug都有此约束。以一个错误的文件类型解析为例,该错误允许空字节。还可能会使用一系列错误,例如堆喷的想法。通常,您会在堆上做其他“合法”的事情,例如在corelancoder编写的代码中。他的外壳程序代码(将是您的ROP链)是位图文件的一部分,他连续加载该文件以“喷射堆”,而该错误实际上是由javascript触发的,实际上并不包含外壳程序代码。
如果您只想在ROP上工作,而不用担心字节限制,我建议编写一个简单的工具来测试您的shellcode。显然,这是64位特定的。
#include <stdio.h>
#include <stdlib.h>
int data[10000000];
void start_rop(char * rop)
{
__asm("mov (%rax),%rsp"); //move contents of first argument into the stack pointer
}
int main(int argc, char * argv)
{
char code[] = "AAAAAAAA";
char * malloc_code = (char *)malloc(sizeof(code));
memcpy(malloc_code,&code,sizeof(code));
start_rop(malloc_code);
free(malloc_code);
return 0;
}
评论
我认为上面的代码与rop没有关系,它只是一个用于测试shellcode的C存根函数,也不能用于新内核,因为数据段不再可执行。
–user40387
2014年2月20日在17:23
你是完全正确的,我是用错误的方式复制的。固定的答案。
– jbh
14年2月20日在18:53
评论
这取决于您正在利用的错误。您是在说简单的strcpy / strcat / sprintf / ...错误,对吧?是的,但是有什么区别?在所有错误中(如果不是非派),我们都具有上述地址...另请参见:v0ids3curity.blogspot.de/2013/07/…(我无法理解我们如何使用在其小工具中包含空字节的rop小工具地址)
您可以使用地址中的空字节来构建ROP小工具。是。实际上,已经有一段时间我不需要在漏洞利用有效载荷中过滤掉0x00字符了,因为已经有一段时间了,因为我没有利用纯粹的字符串操作问题(即仅二进制格式和东西)。