C 外壳代码未运行
我试着通过C程序运行很多shell代码来测试它们。给你C 外壳代码未运行,c,segmentation-fault,shellcode,C,Segmentation Fault,Shellcode,我试着通过C程序运行很多shell代码来测试它们。给你 #include<stdio.h> #include<string.h> unsigned char code[] = "shell here"; main() { printf("Shellcode Length: %d\n", strlen(code)); int (*ret)() = (int(*)())code; ret(); } (\bin\cat\etc\shadow) 跑步后 gcc-sctest.c
#include<stdio.h>
#include<string.h>
unsigned char code[] = "shell here";
main()
{
printf("Shellcode Length: %d\n", strlen(code));
int (*ret)() = (int(*)())code;
ret();
}
(\bin\cat\etc\shadow)
跑步后
gcc-sctest.c-o输出
/输出
它只是给了我外壳代码长度和分割错误
我已经尝试了很多不同的外壳代码,但每件事都给我错误
我的dmesg |尾巴-1
[18440.783383]测试[8768]:8049700 ip 08049700 sp bffff2ec故障测试[8049000+1000]中的错误15
我的外壳代码出了什么问题?在禁用NX位和其他东西(如随机化空间)后,我终于做到了 首先,应该使用键-z execstack和-fno stack-protector编译可执行文件 然后禁用ASLR echo 0>/proc/sys/kernel/randomize\u va\u空间。 现在您必须找到外壳代码。您可以尝试mspayload或msfvenom。Shellcode是一种字节码,通常为您提供shell 在这一步中,您应该找到堆栈溢出的偏移量。你可以试着找到像这样的线条
sub hex-offset, %esp
或者您可以尝试使用简单的脚本来强制执行它,例如./your_binaryNOPs(no operation)*x+shellcode+return-address(4 bytes)*y
len(外壳代码)+x+4y=您的偏移量
其中返回地址是堆栈中NOP所在位置的地址(输入前在gdb info r中看到的%esp地址)
不要忘记,在gdb中工作的漏洞在没有gdb的情况下是无法工作的,因为您需要从返回地址中添加/减去36个字节
你终于准备好利用它了
./your_binary < exploit.bin
/your_binary
在禁用NX位和其他诸如随机化空间等功能后,我终于做到了
首先,应该使用键-z execstack和-fno stack-protector编译可执行文件
然后禁用ASLR echo 0>/proc/sys/kernel/randomize\u va\u空间。
现在您必须找到外壳代码。您可以尝试mspayload或msfvenom。Shellcode是一种字节码,通常为您提供shell
在这一步中,您应该找到堆栈溢出的偏移量。你可以试着找到像这样的线条
sub hex-offset, %esp
或者您可以尝试使用简单的脚本来强制执行它,例如./your_binaryNOPs(no operation)*x+shellcode+return-address(4 bytes)*y
len(外壳代码)+x+4y=您的偏移量
其中返回地址是堆栈中NOP所在位置的地址(输入前在gdb info r中看到的%esp地址)
不要忘记,在gdb中工作的漏洞在没有gdb的情况下是无法工作的,因为您需要从返回地址中添加/减去36个字节
你终于准备好利用它了
./your_binary < exploit.bin
/your_binary
现在应该是常见问题了。在现代系统中,仅执行数据将不再有效,请参阅例如NX位。@FelixPalmen谢谢!我花了很多时间试图理解缓冲区溢出,现在看来我已经准备好利用测试程序来利用缓冲区溢出。现在,要利用缓冲区溢出,您将需要更复杂的技术,如ROP(面向返回的编程)对于底层选民:我认为你不应该这样做,因为类似的事情时不时会出现,这将是一个很好的地方来澄清为什么简单的利用只是跳转到堆栈上自己的代码将不再有效。也许有人觉得有必要写一个好的答案…@FelixPalmen我已经读过关于ROP的文章,但我想从一开始就开始,现在应该是一个常见问题了。在现代系统中,仅执行数据将不再有效,请参阅例如NX位。@FelixPalmen谢谢!我花了很多时间试图理解缓冲区溢出,现在看来我已经准备好利用测试程序来利用缓冲区溢出。现在,要利用缓冲区溢出,您将需要更复杂的技术,如ROP(面向返回的编程)对于底层选民:我认为你不应该这样做,因为类似的事情时不时会出现,这将是一个很好的地方来澄清为什么简单的利用只是跳转到堆栈上自己的代码将不再有效。也许有人觉得有必要写一个好的答案…@FelixPalmen我已经读过关于ROP的文章,但我想从头开始