问题标签 [shellcode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 从 shellcode 中获取 128 位密钥
我正在尝试从 shellcode 中取出一个 128 位的密钥。我已将 shellcode 编译为数组中的 C 代码,就像
当我在linux下使用GCC编译它时。使用 GDB 反汇编后,作为位于代码数组中的 shellcode;
看反汇编 128bit key 会在 6008fb 循环指令后计算。我对 GDB 不是很满意。如何从这个 shellcode 中获取 128 位密钥,我怀疑我需要在循环之后放置一个指针并查看内容?但我不知道该怎么做。非常感谢您提前...
shellcode - 注入shellcode
我在网络服务器上有一个带有变量 user="..." 的 .cmd 文件,容易受到缓冲区溢出的影响。我可以通过 ssh 或 web 执行 .cmd 文件。现在我有了这个shellcode:
我的问题是,我不知道这一切是如何一起发挥的。我知道汇编程序和 C 代码的作用,但是如何将代码注入正在运行的 cmd 文件中?
assembly - 使用内联汇编启动 shell
我正在完成一项学校作业,我完全被难住了。教授和助教没有任何帮助,因为他们提供给任何学生的每一个答案都是“继续寻找,答案就在那里”的某种变体。我正在尝试使用以下代码创建一个外壳:
我试图用code[]
在网上找到的其他一些例子(包括这个网站)以及教授提供的附加 pdf 中的一个例子来替换。这些都没有用。我使用 gdb 反汇编并尝试构建自己的code[]
,但也失败了。对于它的价值,我可以说,在普通用户中,我的应用程序在该((void(*)( ))buf)( );
行出现段错误,然后在同一行的 root 用户中退出(没有段错误通知)。
我不知道在哪里可以完成这项任务,并且在我理解这个简单的第一步之前,我无法处理任何以后的缓冲区溢出任务。任何帮助将不胜感激。
编辑:我忘了提,我在 OSX 10.8.2 和通过 VirtualBox 的 Ubuntu VM 上都试过这个。我假设它在 OSX 上不起作用,但我很绝望。ha 对于 Ubuntu,我们被要求做:
sudo #sysctl -w kernel.randomize_va_space=0
sudo apt-get install zsh cd/bin sudo rm sh sudo ln -s /bin/zsh /bin/sh
这些命令应该禁用地址空间随机化,安装 zsh 并将其链接到 /bin/sh。我在虚拟机中完成了所有这些任务,没有任何错误
c - 缓冲区溢出作为 homeowrk
仍在为安全类学习此缓冲区溢出内容,我正在尝试利用此应用程序中的漏洞:
使用此漏洞利用应用程序:
出于某种原因,当我通过运行漏洞利用创建坏文件时,它不会向其推送任何内容。缓冲区为空或未正确写入。我似乎找不到我的错误,经过不知疲倦的谷歌搜索,我找不到足够的答案。根据我对我使用的填充缓冲区代码的理解,这应该用我的缓冲区地址填充 long_string,然后将我的 shellcode 放在 long_string 的开头(经过一点 NOOP 幻灯片),然后将 long_string 复制回缓冲区。我真的不认为这个或 fwrite 有任何问题。建议?
assembly - 负跳转操作码
我正在尝试创建一些需要跳回的shellcode(负跳转)。我想跳回 2400 字节。这是我使用的操作码:
这首先是a nop
,然后是接近跳跃到-4200。0xef98 = -4200(至少我认为是这样)。但是在调试器中它看起来像这样:
正如预期的那样,首先是 nop,然后是 jmp,但跳转到的地址不是我所期望的(就像jmp 02A8EF45
我所想的那样)。谁能看到我做错了什么?
assembly - 理论上溢出堆栈..和组装
假设一个没有 aslr 的 x86 系统我想问以下问题;
1) 理论上说,当我们执行堆栈溢出攻击时,ebp 寄存器指向的值也会被新的返回地址覆盖。
现在,由于我们从不返回调用者函数,我们实际上并不需要 ebp 的原始值来恢复先前的堆栈帧,但是,ebp 寄存器必须始终指向某个地方。在 eip 寄存器开始指向我们的新 shellcode 之后,ebp 是如何设置的?更具体地说,两条汇编指令(leave-ret)中的哪一条会引发进一步的微指令,将 ebp 恢复为一个值?
2)最后但同样重要的是,我还想问一下,我们如何确保在我们的 shellcode 需要将几个值压入堆栈的情况下,这些值不会覆盖 shellcode 的任何部分?换句话说,我们如何确定任何 shellcode 生成的变量只会放在 shellcode 开始之前,而不是介于两者之间?
谢谢大家。
linux - 内核利用shellcode
我想在 32 位 Linux 上为内核模式编写 shellcode,它将执行此操作:
所以我创建了一个文件:
其中 0x1234567 是 prepare_kernel_cred 的地址,0x1234568 是 commit_creds 的地址,两者都是从 /proc/kallsyms 中找到的。
我用 nasm -f elf 和 objdump -d 组装它以获得机器码。
我得到类似的东西:
这行不通。但是,使用e8 79
代替e8 7c
和e8 74
代替第二个e8 7c
,有效。我不记得我从哪里得到第二个机器代码(我把它放在不同的文件中),但我很好奇为什么这会起作用,而不是像那样简单地组装它会起作用。
这是什么类型的CALL
?为什么像上面显示的那样简单地组装代码不起作用?e8 79
如果我将and用于 CALL,我的玩具漏洞利用可以很好地解决我的人工内核错误e8 74
,但是当我使用来自 nasm/objdump 的组装机器代码时会失败。
c - shellcode中的无限循环
我想从 shellcode 中显示一个 hello world,c 代码很简单:
问题应该在汇编文件中,这里是:
代码运行良好,但在显示“hello shell!”后不退出,相反它一直显示这句话,就像在无限循环中一样。
security - 看不懂“剥削的艺术”中的缓冲区溢出示例
我的问题与this非常相似但不一样。
我在书中运行了相同的exploit_notesearch.c 示例:Hacking, the Art of Exploitation on my 64-bit OS, Archlinux,但它不起作用。
从上面的链接我了解到它不能在大多数 64 位系统上工作。但我仍然不明白为什么程序必须这样做:ret = (unsigned int)&i - offset
. 为什么我不能这样做:ret = (unsigned)shellcode
以便我可以将易受攻击的程序的返回地址替换为 shellcode 的起始地址?
c - Linux Shellcode“你好,世界!”
我有以下工作 NASM 代码:
它将“Hello, World!\n”打印到屏幕上。我还有以下 C 包装器,其中包含以前的 NASM 对象代码:
但是,当我运行代码时,似乎没有执行汇编代码,但程序退出正常。有任何想法吗?
谢谢