您没有来错地!为了更好的发展,黑基网已于9月19日正式更名为【安基网】,域名更换为www.safebase.cn,请卸载旧的APP并安装新的APP,给您带来不便,敬请理解!谢谢

黑基Web安全攻防班
安基网 首页 IT技术 安全攻防 查看内容

深入理解黑客攻击——缓冲区溢出攻击

2018-7-21 03:15| 投稿: xiaotiger |来自: 互联网

摘要: 嗨,各位粉丝好,你们有没有想过黑客是一群什么样的人?他们是一群谁也不知道真实身份的人,他们可以是你、我、他当中的任何一个人他们可以攻击也可以防御。游走在法律的边缘,看似邪恶却也充满正以,它可以使一个人 ...

嗨,各位粉丝好,你们有没有想过黑客是一群什么样的人?

他们是一群谁也不知道真实身份的人,他们可以是你、我、他当中的任何一个人

他们可以攻击也可以防御。游走在法律的边缘,看似邪恶却也充满正以,它可以使一个人,也可以是一群人他们是谁?

匿名者!

永远不要忘记,他可能就在我们之中

有人会问,难道真的没有什么系统完全能抵御黑客的攻击吗?

对,当然没有!因为漏洞在人身上,没有绝对安全的系统

攻防无绝对,技术无黑白

今天就来讲解一下黑客攻击的其中一部分——缓冲区溢出攻击

缓冲区溢出攻击呢是利用缓冲区溢出漏洞所进行的攻击行动

如果有人利用栈中分配的缓冲区写溢出,悄悄地将一段恶意代码的首地址

作为返回地址覆盖写到原先的正确的返回地址处。那么程序在执行ret的时候会悄悄地转移到这个恶意代码段处执行

从而可以轻易获得系统特权,进而进行各种非法操作

造成缓冲区溢出的原因就是系统没有对作为缓冲区的数组进行越界检查

给出一段代码

#include #include "string.h"void outputs(char *str){char buffer[16];strcpy(buffer,str);//str to bufferprintf("%s \n",buffer);}void hacker(void){printf("being hacked\n");}int main(int argc,char *argv[]){outputs("1234567123456712345671234567\\xaa\\x84\\x04\\x08");return 0;}

main函数调用outputs函数。

通过对main函数进行反汇编,可以得到

Dump of assembler code for function main: 0x080484be <+0>: push %ebp 0x080484bf <+1>: mov %esp,%ebp 0x080484c1 <+3>: and $0xfffffff0,%esp 0x080484c4 <+6>: sub $0x10,%esp 0x080484c7 <+9>: movl $0x8048584,(%esp) 0x080484ce <+16>: call 0x804847d 0x080484d3 <+21>: mov $0x0,%eax 0x080484d8 <+26>: leave 0x080484d9 <+27>: ret

通过对outputs函数进行反汇编,可以得到

Dump of assembler code for function outputs: 0x0804847d <+0>: push %ebp 0x0804847e <+1>: mov %esp,%ebp 0x08048480 <+3>: sub $0x28,%esp 0x08048483 <+6>: mov 0x8(%ebp),%eax 0x08048486 <+9>: mov %eax,0x4(%esp) 0x0804848a <+13>: lea -0x18(%ebp),%eax 0x0804848d <+16>: mov %eax,(%esp) 0x08048490 <+19>: call 0x8048340 0x08048495 <+24>: lea -0x18(%ebp),%eax 0x08048498 <+27>: mov %eax,0x4(%esp) 0x0804849c <+31>: movl $0x8048570,(%esp) 0x080484a3 <+38>: call 0x8048330 0x080484a8 <+43>: leave 0x080484a9 <+44>: ret

可以看出,汇编代码

0x08048490 <+19>: call 0x8048340

是对应于c代码

strcpy(buffer,str);//str to buffer这一句的

那么strr[0]是对应于 0x0804848a <+13>: lea -0x18(%ebp),%eax这一句的

那么buffer[0]是对应于 0x08048483 <+6>: mov 0x8(%ebp),%eax这一句的

也就是说strcpy(buffer,str);这一条语句,就是将buffer数组赋值给str数组

而ebp+8的地址就是返回地址所在的内存地址的位置

所以我们必须将-0x18(%ebp)到4(%ebp)之间全部填充满

然后-4(%ebp)到8(%ebp)填充为我们想要程序返回的地址

这样函数outputs执行完毕以后,就会返回到我们想要返回的地址

通过对hacker进行反汇编

我们得到hacker函数的首地址

如图所示,hacker函数的首地址为0x080484aa

那么我们就把esp+4到esp+8的区间填充为0x080484aa

可以看到,劫持成功了

以上内容就是对黑客攻击做一个简单的了解和介绍

你想像他们一样么?做一名白帽子,帮助安全厂商去修复漏洞吗。

那就点击下方了解更多,进入我们的网站,可以加入我们。

投稿作者:殇羽


小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册黑基账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!

本文出自:https://www.toutiao.com/a6580192046856798728/

免责声明:本文由投稿者转载自互联网,版权归原作者所有,文中所述不代表本站观点,若有侵权或转载等不当之处请联系我们处理,让我们一起为维护良好的互联网秩序而努力!联系方式见网站首页右下角。


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

最新

返回顶部