c - 在没有 NUL 终止字符串的情况下编写缓冲区溢出漏洞
问题描述
我有以下汇编代码全局_start
section .text
_start:
jmp call
pop:
pop ecx ; ECX = address of hello
xor eax, eax ; EAX = 0
xor al, al ; EAX = 4 (int 0x80 sys_write)
inc al
inc al
inc al
inc al
xor ebx, ebx
inc ebx //Does not work inside exploit
xor edx, edx
mov dl, hellolen ; EDX = length of hello string
int 0x80
; Terminate program
xor eax, eax
inc eax //Does not work inside exploit
xor ebx, ebx ; EBX = return value of 0
int 0x80
call:
call pop
hello: db "Hello World!Ho are you!!!!!"
hellolen equ $-hello
上面的代码可以正常工作并在独立运行时给出正确的输出。
但是,当我使用相同的 objdump 并且尝试通过缓冲区溢出时,我会遇到以下问题。
这里inc al
适当地增加 al 值,但inc eax
或inc ebx
可能是因为在 objdump 中它显示
inc al
--> fe c0
inc ebx
--> 43 //某个字节数
我还尝试了以下方法来更新 eax 和 ebx
xor ebx, ebx
xor bl, bl
inc bl
movsx ebx, bl
;inc ebx
但是这里 movsx 操作码是 0x0f 并且它不起作用,因为我遇到空终止的字符串(\x0x\x0f)。
解决方案
推荐阅读
- php - 当我添加 PHP 数组时,它会不断被覆盖......为什么?
- java - 查找具有重复的集合的子集 - Leetcode
- c# - json 响应中的 JSON.NET 动态值
- javascript - 如果回调包含错误,为什么 jQuery deferred 不能确保触发每个回调?
- c++ - 这个 absl::StrCat 错误发生在 Abseil 或 MSVC 的什么地方?
- c# - 嵌入 Chromium 的 Selenium RemoteWebDriver
- c# - 如何在uwp中实现信号槽
- c# - .net core 2.1 [ApiController] 返回 401 而不是 302
- phpmyadmin - Phpmyadmin 4.8.2 关系视图 500 错误
- css - 如何使图像不平衡?