是否可以通过另一个程序调用一个程序

伊夫

我正在阅读一篇关于缓冲区溢出攻击的文章:http : //www.cse.scu.edu/~tschwarz/coen152_05/Lectures/BufferOverflow.html
理论上我明白它在说什么。

但是我无法想象黑客程序是如何被这种攻击执行的。
对于文章中的示例,bar由于设计的字符串而调用该函数但是,bar是同一个程序的函数。换句话说,他是在故意黑自己。据我所知,程序中的任何地址都只属于它自己,这意味着您不能通过其地址调用另一个程序的函数。

我只想知道在真实情况下,黑客会怎么做?
正如它所说:

真正的攻击会尝试将栈顶地址代替返回地址,然后是一些可怕的汇编代码行,例如调用另一个工具。

什么是“一些可怕的装配线”?有简单的例子吗?

彼得·科德斯

去阅读粉碎堆栈以获得乐趣和利润它有一个针对 32 位 x86 的特定示例。


是的,程序一直在运行其他程序。例如,命令外壳接受您键入的输入并运行该程序。或者在 GUI 中,双击程序运行它。绘制文件管理器窗口并接收双击的程序本身就是一个程序(或图形外壳)。

无论如何,操作系统有一个用于启动新程序的系统调用,并且通过获得足够的控制权在您正在攻击的进程中运行少量代码,您(攻击者)可以使用 args 调用该系统调用来启动任何程序你想在远程计算机上。

通常你会选择 args 之类的/bin/sh(Unix shell)。根据上下文,其输入可能仍连接到您用于发送漏洞利用负载的网络套接字。(通常称为“shellcode”,因为典型的漏洞利用目标是调用 shell。虽然这个术语现在更通用,适用于任何可执行的机器代码漏洞利用有效载荷,尤其是格式化为字符串时。通常这意味着避免任何0字节机器码。)


据我所知,程序中的任何地址都只属于它自己,这意味着您不能通过其地址调用另一个程序的函数。

数据就是代码,代码就是数据一旦您的攻击载荷(即机器代码)被您正在攻击的进程读入内存,它就会在目标进程中拥有一个地址。

最简单的缓冲区溢出类型包括覆盖函数返回地址的代码和数据,因此函数返回到漏洞利用负载而不是其调用者。这是对调用堆栈上分配的缓冲区的经典堆栈粉碎攻击,就像char buf[16]; // nobody ever types more than 16 digit numbers, right?在函数内部一样

从该页面,您已经知道攻击者如何通过缓冲区溢出来控制返回地址。

诸如不可执行的内存W^X例如写入或执行,而不是两者)和 ASLR(地址空间布局随机化)之类的东西都旨在击败这种攻击。如果堆栈地址是随机的,则可能需要多次尝试您设法使返回地址落在您的漏洞利用负载中的一堆 NOP(“nop 雪橇”)中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以从iOS中的另一个函数调用块完成处理程序?

来自分类Dev

是否可以通过另一个 Java 程序控制 Spotify 客户端?

来自分类Dev

汇编32位-从另一个程序调用一个程序

来自分类Dev

汇编32位-从另一个程序调用一个程序

来自分类Dev

是否可以从另一个类调用performSegueWithIdentifier?

来自分类Dev

在python中从另一个调用程序

来自分类Dev

从Java程序调用另一个类

来自分类Dev

如何从PHP调用另一个程序

来自分类Dev

在python中从另一个调用程序

来自分类Dev

通过system()调用启动另一个程序会阻塞套接字

来自分类Dev

通过调用另一个Java程序捕获异常

来自分类Dev

是否可以从另一个调用一个jax-rs方法?

来自分类Dev

是否可以从另一个类内部调用一个类(不扩展)?

来自分类Dev

是否可以在另一个类中调用一个类的构造函数?

来自分类Dev

是否可以从Octave的另一个脚本中调用一个脚本?

来自分类Dev

CMake我可以通过另一个程序过滤编译器输出吗

来自分类Dev

如何判断我的程序是否正在通过管道传输到另一个(Perl)

来自分类Dev

Vue.js。是否可以通过一个 <slot> 穿过另一个?

来自分类Dev

如何从另一个本地调用一个功能应用程序?

来自分类Dev

你如何从一个应用程序调用另一个视图

来自分类Dev

是否可以读取另一个线程的程序计数器?

来自分类Dev

是否可以在另一个.NET应用程序中抓取GridView控件的内容?

来自分类Dev

在Android上打开另一个应用程序时是否可以记录动作?

来自分类Dev

是否可以从apex中的另一个应用程序获取apex集合

来自分类Dev

在Android上打开另一个应用程序时是否可以记录动作?

来自分类Dev

是否可以拿走已经被另一个程序监听的tcp端口

来自分类Dev

是否可以在另一个应用程序中实现自定义视图?

来自分类Dev

是否可以引用在另一个应用程序中定义的模型?

来自分类Dev

是否可以从另一个应用程序更改Info.plist?

Related 相关文章

  1. 1

    是否可以从iOS中的另一个函数调用块完成处理程序?

  2. 2

    是否可以通过另一个 Java 程序控制 Spotify 客户端?

  3. 3

    汇编32位-从另一个程序调用一个程序

  4. 4

    汇编32位-从另一个程序调用一个程序

  5. 5

    是否可以从另一个类调用performSegueWithIdentifier?

  6. 6

    在python中从另一个调用程序

  7. 7

    从Java程序调用另一个类

  8. 8

    如何从PHP调用另一个程序

  9. 9

    在python中从另一个调用程序

  10. 10

    通过system()调用启动另一个程序会阻塞套接字

  11. 11

    通过调用另一个Java程序捕获异常

  12. 12

    是否可以从另一个调用一个jax-rs方法?

  13. 13

    是否可以从另一个类内部调用一个类(不扩展)?

  14. 14

    是否可以在另一个类中调用一个类的构造函数?

  15. 15

    是否可以从Octave的另一个脚本中调用一个脚本?

  16. 16

    CMake我可以通过另一个程序过滤编译器输出吗

  17. 17

    如何判断我的程序是否正在通过管道传输到另一个(Perl)

  18. 18

    Vue.js。是否可以通过一个 <slot> 穿过另一个?

  19. 19

    如何从另一个本地调用一个功能应用程序?

  20. 20

    你如何从一个应用程序调用另一个视图

  21. 21

    是否可以读取另一个线程的程序计数器?

  22. 22

    是否可以在另一个.NET应用程序中抓取GridView控件的内容?

  23. 23

    在Android上打开另一个应用程序时是否可以记录动作?

  24. 24

    是否可以从apex中的另一个应用程序获取apex集合

  25. 25

    在Android上打开另一个应用程序时是否可以记录动作?

  26. 26

    是否可以拿走已经被另一个程序监听的tcp端口

  27. 27

    是否可以在另一个应用程序中实现自定义视图?

  28. 28

    是否可以引用在另一个应用程序中定义的模型?

  29. 29

    是否可以从另一个应用程序更改Info.plist?

热门标签

归档