对于软件安全类,我必须简单地返回到libc攻击.我设法制作一个perl脚本,在给出system(),exit()和/ bin/sh字符串的正确指针的情况下完成攻击.我发现这些指针使用gdb"p system"等.现在我想通过编写在运行时找到system()和exit()的ad的程序来使这个漏洞更加"动态".我该怎么做呢?我试过"和系统",但这似乎并没有给我正确的地址.
编辑:系统未启用ASLR.
你可以很容易发现利用该地址binutils
- objdump
或者readelf
,而是二元实际使用的符号的地址.未使用的符号未与libc库链接.
假设你想破解ls
命令:
objdump -d `which ls` | less
Run Code Online (Sandbox Code Playgroud)
你会发现这个部分:
0000000000402910 <exit@plt>:
402910: ff 25 da 89 21 00 jmpq *0x2189da(%rip) # 61b2f0 <_fini+0x208704>
402916: 68 5e 00 00 00 pushq $0x5e
40291b: e9 00 fa ff ff jmpq 402320 <_init+0x10>
Run Code Online (Sandbox Code Playgroud)
所以现在你有了地址:0x402910
是exit()
函数的跳转地址(如果你试过的那个你会打印的地址)printf("%x\n", exit);
.
关于system
,ls
不使用此符号,因此您无法以这种方式访问它,因为它没有链接.